From d518465d7c54c18dae544ddeae7b47e9a3c0c864 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 26 Jan 2023 14:02:38 +0100 Subject: [PATCH 001/665] Update Subsembly-GRANDPA.md (#1476) --- applications/Subsembly-GRANDPA.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/Subsembly-GRANDPA.md b/applications/Subsembly-GRANDPA.md index 458b114f1e4..9321a234dc6 100644 --- a/applications/Subsembly-GRANDPA.md +++ b/applications/Subsembly-GRANDPA.md @@ -2,6 +2,7 @@ * **Team Name:** [LimeChain](https://github.com/LimeChain) * **Payment Address:** `0x6eDf76FD16Bb290A544fDc14fBB4b403D1DEeD9f` (USDT) +* **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/563#issuecomment-1404941967) ## Project Overview :page_facing_up: From feb44dc9909c3d2eea6a54f7555dbe3d0353d565 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 26 Jan 2023 20:13:23 +0700 Subject: [PATCH 002/665] Terminate JuniDB (#1474) --- applications/JuniDB.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/JuniDB.md b/applications/JuniDB.md index 15150b0b44b..5321bb76610 100644 --- a/applications/JuniDB.md +++ b/applications/JuniDB.md @@ -2,6 +2,7 @@ * **Team Name:** Uddug * **Payment Address:** 0xc45eAd98E95D1962133d9c15847e2EA4E16dfD0b +* **Status:** [Terminated](https://github.com/w3f/Grant-Milestone-Delivery/pull/254#issuecomment-1404647441) ## Project Overview :page_facing_up: From aeb0223c40143c5f89c23db516089bc24afde44e Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 26 Jan 2023 16:42:13 +0100 Subject: [PATCH 003/665] Add application parser action (#1477) --- .../workflows/check_application_document.yml | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/check_application_document.yml diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml new file mode 100644 index 00000000000..e24db790cce --- /dev/null +++ b/.github/workflows/check_application_document.yml @@ -0,0 +1,35 @@ +name: Check application document + +on: + pull_request: + types: [opened] + +jobs: + get_filename: + if: contains(github.event.pull_request.body, 'Project Abstract') + runs-on: ubuntu-latest + outputs: + filename: ${{ steps.files.outputs.added }} + steps: + + - name: Get application filename # We assume there's only one + id: 'files' + uses: Ana06/get-changed-files@v2.0.0 + with: + filter: 'applications/*.md' + format: 'csv' + + parse_document: + needs: get_filename + if: needs.get_filename.outputs.filename + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v2 + + - name: Parse application file + id: grant_parser + uses: w3f/parse-grant-application-action@master + with: + path: "${{ github.workspace }}/${{ needs.get_filename.outputs.filename }}" From 9c1f249cf88992abaa0d7260ebe3c70132eacc99 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 26 Jan 2023 17:06:16 -0300 Subject: [PATCH 004/665] Update index.md (#1478) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 60867a5225c..d47e8235b34 100644 --- a/applications/index.md +++ b/applications/index.md @@ -513,7 +513,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ParaSpell](https://github.com/paraspell) | [ParaSpell](./ParaSpell.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [Primis Labs](https://github.com/Primis-Labs) | [Primis](./Primis.md) | [GitHub](https://github.com/Primis-Labs/client) | ☐ | ☒ | ☒ | | [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | -| [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☐ | ☐ | +| [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | | [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | | [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | | [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | From 390db1cfe77f04f617b1f8d8e6686cf313854976 Mon Sep 17 00:00:00 2001 From: 327istesting <86153748+327istesting@users.noreply.github.com> Date: Fri, 27 Jan 2023 18:24:33 +1100 Subject: [PATCH 005/665] Revised milestone and timeline (#1473) * Timeline changed * Revised milestone and deadline --- applications/Meta_Defender.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/applications/Meta_Defender.md b/applications/Meta_Defender.md index d1eade6d964..ff1cc032d33 100644 --- a/applications/Meta_Defender.md +++ b/applications/Meta_Defender.md @@ -320,7 +320,7 @@ Angie: Angie is a Data Scientist in a ASX-listed Fintech in Australia. She has e ### Milestone 1 — Basic Functionalities -- **Estimated Duration:** 5.5 months +- **Estimated Duration:** 7.5 months - **FTE:** 2 - **Costs:** 4,000 USD @@ -331,11 +331,11 @@ Angie: Angie is a Data Scientist in a ASX-listed Fintech in Australia. She has e | 0c. | Testing Guide | Core functions will be covered by unit tests, along with detailed explanation step by step. | | 0d. | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | | 1. | ink! smart contract | An ink! smart contract that will enable the digital assets holders to buy cover and the capital holder to become an underwriter. | -| 2. | Manual of interaction between ink! and front-end | We will provide a manual regarding constructing an interface for the interaction between front-end and ink! smart contract & Polkadot.js wallet, just like what web3.js and ethers.js have done in the EVM ecosystem. | +| 2. | Front-end e2e test | We will use Cypress.io as an e2e testing framework for the Front-end automated test. | ### Milestone 2 Substrate + XCM -- **Estimated Duration:** 5 months +- **Estimated Duration:** 6 months - **FTE:** 2 - **Costs:** 4,000 USD @@ -347,6 +347,7 @@ Angie: Angie is a Data Scientist in a ASX-listed Fintech in Australia. She has e | 0d. | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish an **article** that explains the functionalities Meta Defender provides, which will cover: 1. auto-pricing model; 2. economic model of insuring and underwriting; 3. how we achieve cross-chain insurance through substrate and XCM and open source this part of code. | | 1. | Cross-chain support | Establish a local parachain testnet and two local parachains A and B with sovereign account in each other. With smart contract deployed on A parachain, allow the user to buy cover and receive his claim from addresses on the B parachain through XCM. | +| 2. | Manual of interaction between ink! and front-end | We will provide a manual regarding constructing an interface for the interaction between front-end and ink! smart contract & Polkadot.js wallet, just like what web3.js and ethers.js have done in the EVM ecosystem. | ## Future Plans From e00778871bfb55231a18cbde28bd9551c49f6154 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 27 Jan 2023 02:26:04 -0500 Subject: [PATCH 006/665] Update README.md (#1483) --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3bbcb7c4418..b72665bee8a 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ The W3F Grants Program offers different grant levels to help you best depending 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. 3. Name the new file after your project: `project_name.md`. 4. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. - 5. Once you're done, create a pull request. The pull request should only contain _one new file_—the Markdown file you created from the template. + 5. Once you're done, create a pull request in our main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see a comment template that contains a checklist. You can leave it as is and tick the checkboxes once the pull request has been created. Please read through these items and check all of them. 7. Sign off on the [terms and conditions](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) presented by the [CLA assistant](https://github.com/claassistantio) bot as a Contributor License Agreement. You might need to reload the pull request to see its comment. @@ -194,7 +194,7 @@ Ideas generally have better chances of being implemented if they're presented in 2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/rfps) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. -5. Once you're done, create a pull request. The pull request should only contain _one new file_—the Markdown file you created from the template. +5. Once you're done, create a pull request in our main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [this one](.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. From 26729038f356956c736a3fdcbce9f77eea75114f Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 27 Jan 2023 09:12:36 +0100 Subject: [PATCH 007/665] specify that a PR needs to be opened in our main grants program repo --- README.md | 4 ++-- docs/Process/how-to-apply.md | 2 +- docs/suggesting.md | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b72665bee8a..d96228080be 100644 --- a/README.md +++ b/README.md @@ -157,7 +157,7 @@ The W3F Grants Program offers different grant levels to help you best depending 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. 3. Name the new file after your project: `project_name.md`. 4. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. - 5. Once you're done, create a pull request in our main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. + 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see a comment template that contains a checklist. You can leave it as is and tick the checkboxes once the pull request has been created. Please read through these items and check all of them. 7. Sign off on the [terms and conditions](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) presented by the [CLA assistant](https://github.com/claassistantio) bot as a Contributor License Agreement. You might need to reload the pull request to see its comment. @@ -194,7 +194,7 @@ Ideas generally have better chances of being implemented if they're presented in 2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/rfps) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. -5. Once you're done, create a pull request in our main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. +5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [this one](.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. diff --git a/docs/Process/how-to-apply.md b/docs/Process/how-to-apply.md index 4e055053e88..892fbcb0703 100644 --- a/docs/Process/how-to-apply.md +++ b/docs/Process/how-to-apply.md @@ -18,6 +18,6 @@ The process below is independent of the [level](../Introduction/levels.md). Paym 3. In the newly created fork, create a copy of the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the [maintenance template](https://github.com/w3f/Grants-Program/blob/master/maintenance/maintenance-template.md) instead. 4. Name the new file after your project: `project_name.md`. 5. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](../Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. - 6. Once you're done, create a pull request. The pull request should only contain _one new file_—the Markdown file you created from the template. + 6. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 7. You will see a comment template that contains a checklist. You can leave it as is and tick the checkboxes once the pull request has been created. Please read through these items and check all of them. 8. Sign off on the [terms and conditions](../Support%20Docs/T&Cs.md) presented by the [CLA assistant](https://github.com/claassistantio) bot as a Contributor License Agreement. You might need to reload the pull request to see its comment. diff --git a/docs/suggesting.md b/docs/suggesting.md index 888c3ee7771..27c6606e585 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -19,6 +19,6 @@ Ideas generally have better chances of being implemented if they're presented in 2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/web-test-branch/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/blob/web-test-branch/docs/rfps/) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/web-test-branch/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. -5. Once you're done, create a pull request. The pull request should only contain _one new file_—the Markdown file you created from the template. +5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/web-test-branch/.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](./Introduction/team.md#w3f-grants-committee) members. From bc7fce642c7b9ff32fb5915726d2837ba953ac19 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 27 Jan 2023 11:48:54 +0100 Subject: [PATCH 008/665] Update pallet-drand-client.md (#1484) fix typo --- applications/pallet-drand-client.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/pallet-drand-client.md b/applications/pallet-drand-client.md index fd200afe450..25df3df9a03 100644 --- a/applications/pallet-drand-client.md +++ b/applications/pallet-drand-client.md @@ -118,7 +118,7 @@ We will create a new Rust library that | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. We will use standardized testing methods so tests can be pragmatically executed and updated by anyone. | | 1. | Drand client library | We will build out a drand client library with the requirements mentioned in the Milestoke 1 overview. -### Milestoke 2: Build a Substrate pallet with a fully-featured/configured example chain +### Milestone 2: Build a Substrate pallet with a fully-featured/configured example chain We will write a Substrate pallet that: - implements the drand client library from Milestone 1 From 2f1ce8b2a73abfe13552eb7ee5e2b2d68d94275e Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 27 Jan 2023 09:50:04 -0300 Subject: [PATCH 009/665] Terminate Zero Network (#1480) * Update zero-network.md * Update index.md * Update index.md --- applications/zero-network.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/zero-network.md b/applications/zero-network.md index d0cc95847ea..a42191016af 100644 --- a/applications/zero-network.md +++ b/applications/zero-network.md @@ -5,6 +5,7 @@ - **Team Name:** Zero Network - **Payment Address:** 0x9061b0787D28d0fDaD845d670F7505EAE5F3B01B (DAI) - **Level:** 2 +- **Status:** Terminated ## Project Overview :page_facing_up: From ce184304f186afc7929540badb91e9291ebf0c21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Brand=C3=A3o?= Date: Fri, 27 Jan 2023 09:50:30 -0300 Subject: [PATCH 010/665] A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem (#1420) * Creating research grant proposal A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem * Adding template for mandatory deliverables Adding placeholders, we need to specify each of the mandatory deliverables for the respective milestone. * Update Knowledge-Oriented-Framework.md Adding mandatory deliverables for each milestone * Update Knowledge-Oriented-Framework.md Adding required info about article deliverable in last milestone. * Update Knowledge-Oriented-Framework.md Adjusting last milestone, merging deliverables 0e and 1 (article and scientific paper). --- applications/Knowledge-Oriented-Framework.md | 265 +++++++++++++++++++ 1 file changed, 265 insertions(+) create mode 100644 applications/Knowledge-Oriented-Framework.md diff --git a/applications/Knowledge-Oriented-Framework.md b/applications/Knowledge-Oriented-Framework.md new file mode 100644 index 00000000000..cc8338074ae --- /dev/null +++ b/applications/Knowledge-Oriented-Framework.md @@ -0,0 +1,265 @@ +# A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem + +- **Team Name:** MOBR Systems + +- **Payment Address:** 0x504779E1d616Ff75aFA0D4417bc2A5cCB678c671 (USDC) + +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +This project is an R&D initiative towards enhancing integration and communicability in the Polkadot ecosystem. The first step encompasses a theoretical contribution to map, structure and formalize Polkadot's multi-chain environment concepts and relationships, by adopting an ontological approach. Afterwards, we expect this ontological framework to be applied on the building of a controlled natural language (CNL) and a querying engine for the Polkadot ecosystem. + +Ontologies represent concepts and relationships in a manner that approximate the way humans perceive interconnected abstractions, while promoting machine reasoning on top of that representation to offer insights to users, developers and intelligent applications. In addition to supporting reasoning capability, ontologies provide a coherent and easy interpretation, enhancing communication in the ecosystem. They allow users to navigate from one concept to another, supporting the current understanding about the fundamentals of the modeled domain, and also its natural expansion. The R&D process and contributions will be documented in a scientific paper and an ontology representation. Both will be publicly available on github. + + +Initially, the proposed ontology will focus on the Polkadot multi-chain environment to identify, describe and relate core concepts of the technology. That is, we will create a conceptual framework that represents the ecosystem behind Polkadot, including parachains, nodes, transaction settlement, cross-chain communication, assets, primitives, etc. With the fundamental aspects defined, it would be possible to expand the ontology to model the concepts and relationships between the Substrate blockchain framework and Polkadot’s canary network, Kusama. + + +Moving forward with the state-of-the-art and innovation that tackles real issues is what inspires the MOBR team. As an R&D-oriented startup, we target research opportunities where we can apply AI in a user-centric approach. As Web3 developers and enthusiasts, we are always looking for potential improvements for the technology and its community. The lack of a formal definition and terminology for blockchain environments is an open issue, since it remains open to interpretation and does not offer a consistent representation for its developers, users, and applications. + +### Project Details + +- The problem + +There is no doubt that the Polkadot's multi-chain environment is a highly disruptive platform. However, the lack of a formal definition of its terminology is an issue since it remains open to interpretation and does not offer a structured representation for its applications. Currently, Polkadot literature is predominantly written either from a purely technical or from an economical perspective. Aiming at supporting the growth of the Polkadot community in both formal knowledge and applications, it is critical that users, developers, and stakeholders have a formal and fundamental understanding on how the platform is built and how it works. Without such formal representation, application developers may struggle to integrate software components and data, as well as to build querying and reasoning features in a standardized manner. Unstructured development combined with lack of expressiveness about the ecosystem may jeopardize interoperation and wide adoption of Polkadot, especially in heterogeneous socio-technical environments. + +- Research questions/hypothesis + +The general research question we want to answer is: how a knowledge-oriented approach may benefit the communicability, integration, usage and development of blockchains? + +And more specifically, how an ontology-supported development impacts design and building of Polkadot’s parachains and cross-chain communication? + +- The methodology + +Our approach will begin by conducting a comprehensive literature review to identify key concepts and principles in ontologies for blockchains. This includes studying the existing applications and ontological frameworks that have been developed for blockchains, as well as other relevant research in the fields of symbolic representation. Once the key concepts and principles have been identified, the next step is to create a conceptual framework that incorporates and relates these concepts and principles. This framework will be designed to express the fundamental entities and relationships that govern the Polkadot ecosystem, and will be flexible enough to accommodate the ongoing evolution of the technology. With the conceptual framework specified, the next step will be applying it to a specific Polkadot-related use case scenario. This includes conducting case studies to explore the future application of the ontological framework to support the building of a controlled natural language (CNL) and a querying engine in Polkadot's multi-chain environment. Another important aspect of creating an ontology is to engage with experts from application domains to gain their insights and perspectives. This engagement helps to ensure that the ontological framework is grounded in real-world experience and reflects the current understanding of representative personas in the applied fields. In this sense, the final step of the proposed approach is to present and discuss the ontology with members of the Polkadot team. + +- Data collection and analysis procedures + +An ontology is a representation of a set of concepts within a domain and the relationships between those concepts. The data collection consists in the search for relevant concepts and their relationships. The initial data for defining the basics of the ontology will be collected through analysis of the available literature, including technical reports from Polkadot documentation. The engagement with the Polkadot team will also produce valuable data to be collected and analyzed. During the consolidation of the basic ontology, analysis will be carried out qualitatively. In the future, after having a consolidated ontology, dynamic tests can be developed to assess more quantitative aspects regarding the coverage of the formal definition. + +- Expected results + +The main expected result is an ontology representing the fundamental entities and relationships that govern the Polkadot ecosystem. We will work with the grants team to conduct a qualitative analysis to assess the correctness of the model. + +- Relevant related work + +Researchers have been exploring the potential applications and support of ontology to the field of blockchain and DApps in general. For example, ontology has been used to study the concept of trust in blockchain systems, to develop more robust and secure smart contract systems, and to address potential ethical and philosophical issues in the use of blockchain technology [1, 2, 3]. + +Currently, blockchain literature is predominantly written either from a purely technical or from an economic perspective. The use of ontologies in blockchain is an emerging field with significant potential for bridging both technical and economic perspectives, advancing the understanding of this technology while improving its design and use. Research is needed to better explore the potential use cases and applications on top of formal ontologies and to develop a comprehensive ontological framework for this type of technology. + +[1] Besançon, L., Da Silva, C. F., Ghodous, P., & Gelas, J. P. (2022). A Blockchain Ontology for DApps Development. IEEE Access, 10, 49905-49933. + +[2] Hang, L., Chen, C., Zhang, L., & Yang, J. (2022). Blockchain for applications of clinical trials: Taxonomy, challenges, and future directions. IET Communications. + +[3] Baqa, Hamza & Truong, Nguyen & Crespi, Noel & Lee, Gyu Myoung & Le Gall, Franck. (2019). Semantic Smart Contracts for Blockchain-based Services in the Internet of Things. 1-5. 10.1109/NCA.2019.8935016. + + +- Intended venue for results publication and the timeline for publication + +We deem the proposed work would be a good fit for venues such as the following: + +International Congress on Blockchain and Applications (ICBA) + +IEEE International Conference on Blockchain and Cryptocurrency (ICBC) + +International Semantic Web Conference (ISWC) + +In terms of timeline, and considering 4 months of project, it will depend on the dates for these venues. + +For the ISWC 2023, the dates are still TBD. But considering the 2022 calendar, it would be possible to submit by Q2-Q3 and publish by Q3-Q4 in 2023. + +For the ICBA 2024, the submission would be at Mar/2024 and the publication would be around July 2025. + +For the ICBC 2024, the submission would be at Dec/2023 and the publication would be around May/2024 + + +- What the project is _not_ or will _not_ provide or implement + +Our research proposal is a first-step towards creating a rich and convenient asset for performing query searching and data analytics on the Polkadot's multi-chain environment. For now, we are proposing a conceptual model that will be capable of formalizing the key Polkadot concepts and their relationships. In this proposal we are not considering the development and deployment of any functional asset or prototype, but specifically the ontology representation and a case study to explore the future application of the ontological framework to support building a controlled natural language (CNL) and a query engine in Polkadot’s multi-chain ecosystem. + +### Ecosystem Fit + +As mentioned, the proposed ontology will focus on the Polkadot multi-chain environment to identify, describe and relate core concepts of the technology. That is, we will create a conceptual framework that represents the ecosystem behind Polkadot, including parachains, nodes, transaction settlement, cross-chain communication, assets, primitives, etc. With the fundamental aspects defined, it would be possible to expand the ontology to model the concepts and relationships between the Substrate blockchain framework and Polkadot’s canary network, Kusama. + +- Target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + +The target audience is the Web3 community in general, and those specifically interested in the Polkadot multi-chain ecosystem, since we will provide a formal definition of the Polkadot terminology. + +- What need(s) does your project meet? + +At first, the need for a formal definition addressing the issue of having a terminology open to interpretation or that does not offer a structured representation for its applications. In the future, the project will allow ecosystem users and developers to retrieve and manipulate data from Polkadot using a controlled natural language. That is, users will be able to intuitively and correctly specify their queries. For instance: How many transactions were carried out for the past 30 min on all parachains? What are the top five wallets with DOT tokens? How many wallets have more DOT tokens than me? What is the total NFT sales volume on the Polkadot ecosystem? + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + +To the best of our knowledge, there is no similar project in the ecosystem using a knowledge-oriented approach to support CNL querying. Currently, users without programming skills depend on blockchain explorers to have access to chain data. There is a lack of solutions providing natural language querying. + +There is a project [1] providing querying capabilities on Polkadot. +[1] https://academy.subquery.network/ + +In addition, there is no formal ontology currently specified and maintained for the ecosystem. + + - If so, how is your project different? + +The SubQuery project uses GraphQL and does not support querying specific concepts inherent from the ecosystem. However, as mentioned this project demands programming skills from its users. + + - If not, are there similar projects in related ecosystems? + +Specifically regarding our first step for defining a formal ontology, there is the EthOn project, which is an Ethereum Ontology described in http://ethon.consensys.net + +Concerning the query-answering asset using CNL, there is no similar project in related ecosystems, as far as we know. + +## Team :busts_in_silhouette: + +### Team members + +- Name of team leader +**Dr. Marcio Moreno**, marcio@mobr.ai, Co-Founder, Research Scientist and CEO at MOBR Systems (https://www.mobr.ai). + +- Names of team members +**Dr. Rafael Brandao**, rafael@mobr.ai, Co-Founder, Research Scientist and COO at MOBR Systems (https://www.mobr.ai). + +### Contact + +- **Contact Name:** Marcio Ferreira Moreno + +- **Contact Email:** marcio@mobr.ai + +- **Website:** https://www.mobr.ai + +### Legal Structure + +- **Registered Address:** +Av Paulista, 1106 Sala 01 / ANDAR 16 - Bairro: Bela Vista, Sao Paulo - SP CEP 01310914 + +- **Registered Legal Entity:** +MOBR SYSTEMS LTDA + +### Team's experience + +Both applicants worked as Research Scientists at IBM for 7 years. Earlier, Dr. Moreno (full CV on [1]) was a postdoctoral researcher at CWI (Centrum Wiskunde & Informatica) in the Netherlands, and worked at the Pontifical Catholic University of Rio (PUC-Rio) in Brazil. Dr. Brandão (full CV on [2]) worked at the TecGraf Institute, from PUC-Rio, during his doctoral studies. The team has published multiple research papers and patents, their background includes Web3, AI, Knowledge Engineering, Distributed and Decentralized Systems, Multimedia and Hypermedia Systems, Human-Centered Computing, among other research topics. + +For a complete list of peer-reviewed published papers and granted patents, please visit the following google scholar links + +- Marcio Moreno, PhD: https://scholar.google.com/citations?user=PfdmrPUAAAAJ +- Rafael Brandao, PhD: https://scholar.google.com/citations?user=3ta0InEAAAAJ + +### Team Code Repos + +MOBR Systems: +- https://github.com/mobr-ai + +Our personal accounts: +- https://github.com/mfmoreno +- https://github.com/rbrandao + + +### Team LinkedIn Profiles (if available) + +- https://linkedin.com/in/marcio-moreno-phd-598a459a/ +- https://linkedin.com/in/rafaelrmb/ + +### Google Scholar Profiles (Or other research indexer profile, ex. Researchgate) +- https://scholar.google.com/citations?user=PfdmrPUAAAAJ +- https://scholar.google.com/citations?user=3ta0InEAAAAJ + +## Development Status :open_book: + +Not initiated yet. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** We expect to conclude the proposed first step of the project in 4 months + +- **Full-Time Equivalent (FTE):** 1 FTE (two PhDs each dedicating about 30 days of work during a 4 months project) + +- **Total Costs:** The total budget requested is US$ 29900 for two PhDs dedicating about 30 days of work during a 4 months project. Considering that for academic, scientific, consultancy on average a PhD daily rate is about US$500. + +### Milestone 1 — Literature review and conceptual framework specification + +Our approach will begin by conducting a comprehensive literature review to identify key concepts and principles in ontologies for blockchains. This includes studying the existing applications and ontological frameworks that have been developed for blockchain systems, as well as other relevant research in the fields of symbolic representation + +Once the key concepts and principles have been identified, the next step is to specify a conceptual framework that incorporates and relates these concepts and principles. This framework will be designed to express the fundamental entities and relationships that govern the Polkadot ecosystem, and it will be flexible enough to accommodate the ongoing evolution of the technology. + +- **Estimated Duration:** 2 months +- **FTE:** 1 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | MIT | +| **0b.** | Documentation/Tutorial | We will provide a PDF document identifying and reviewing related work, concepts and principles in blockchain ontologies. For the ontology, the specification will be delivered as an OWL file with formal description of the Polkadot ecosystem abstractions. | +| **0c.** | Methodology | PDF document detailing how we carried out a systematic review of related blockchain ontologies, and the correlation with the main abstractions of Polkadot's conceptual framework. | +| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. | +| **0e.** | Article | We will write a draft **article** (along with source code) explaining what was achieved in this milestone. | +| **1.** | Literature survey | Document identifying and reviewing related work, concepts and principles in blockchain ontologies | +| **2.** | Conceptual framework | Ontology in OWL format with formal description of the Polkadot ecosystem| + + +### Milestone #2 – Case study for query engine + +With the conceptual framework specified and developed, the next step will be applying it to a specific Polkadot-related use case scenario. This includes conducting a case study to explore the future application of the ontological framework to support building a controlled natural language (CNL) and a query engine in Polkadot’s multi-chain ecosystem. + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 8,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Unlicense | +| **0b.** | Documentation/Tutorial | We will provide a PDF document describing a use case to the future application of the ontological framework supporting the building of a controlled natural language (CNL) and a querying engine in Polkadot's multi-chain environment. | +| **0c.** | Methodology | The use case will be developed based on our expert perspective and also requirements identified from the engagement with other blockchain experts. That is, the requirements for the query engine will be grounded in real-world experience needs. | +| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. | +| **0e.** | Article | We will write a draft **article** explaining what was achieved in this milestone. | +| **1.** | Case study | Document describing case study on conceptual framework application with query engine | + +### Milestone #3 – Polkadot team brainstorming / workshop + +An important aspect of creating an ontology is to engage with experts from application domains to gain their insights and perspectives. This engagement helps to ensure that the ontological framework is grounded in real-world experience and reflects the current understanding of representative personas in the applied fields. In this sense, a key step of the proposed approach is to present and discuss the ontology with the Polkadot team. + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 6,900 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | CC BY 4.0 | +| **0b.** | Documentation/Tutorial | We will provide two PDF documents, one reporting scientific and technical findings and the other presenting reflections over the discussed content and action items | +| **0c.** | Methodology | The methodology for the team discussion will be loosely based on a Design Thinking process. We will guide the team during discussion in order to extract relevant feedback from experts. The idea is to carry this activity remotely. | +| **0d.** | Infrastructure | We will suggest tool options for carrying out the collab session. That can be Mural or other equivalent free cloud collaborative tool available (e.g. Google Drive, MS Teams).| +| **0e.** | Article | We will write a full **article** detailing what was achieved in the project. The article will have an acknowledgment in the body of it stating the research was supported by Web3 Foundation. It will be public available on arXiv.org and submited to listed scientific venues | +| **1.** | Presentation deck | Slide deck with reflections over the discussed content and action items| + + + + +## Future Plans + +- Our intention is that the conceptual framework constructed during the proposed research be used to support future knowledge-oriented assets. That is, assets that can take advantage of the Polkadot ecosystem’s formal definition, producing new knowledge, consuming it, and performing reasoning procedures. + +- In the short term, we will provide a case study for bootstrapping use cases to guide the design and building of a query engine tool. This asset will provide semantic searching features based on a controlled natural language (CNL). + +- The development roadmap for such an asset would be the long term plan related to this project proposal. Which would enrich the user experience within the Polkadot community. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website + +- Work already done + +We have work in progress assets being developed in our recently founded startup. More info can be found at: https://mobr.ai + +We also previously developed a technology that became widely adopted within IBM Research. It is a toolset to deal with knowledge engineering and ontology construction. More info can be found here: +1. https://github.com/ibm-hyperknowledge +2. https://ibm-hyperknowledge.github.io/possibility-link-demo-iswc2022/ + +- Previous applied grants + +We have already submited proposals to Waves and VeChain grant programs. + From 4b09e38f8feb07cdf1fdb5dd7219c83980a518c9 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 27 Jan 2023 13:54:07 +0100 Subject: [PATCH 011/665] Update index.md Add Knowledge Oriented Framework --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d47e8235b34..dd32177f3bb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -594,3 +594,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](Omniverse DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | From 26d8463b731d2f3b3d8a7799dbfe7bbc2952dae3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 27 Jan 2023 13:55:18 +0100 Subject: [PATCH 012/665] Update index.md Fix Omniverse%20DLT --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index dd32177f3bb..e00e2b06f8b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -593,5 +593,5 @@ Use this page for an overview of all public grants and their status. Use the sid | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](Omniverse DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | From 88d992173c6c16931716c6ef6e8f09d0a1c13c3f Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 27 Jan 2023 13:57:09 +0100 Subject: [PATCH 013/665] Update index.md (#1485) pallet-drand-client first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e00e2b06f8b..369eacf6aef 100644 --- a/applications/index.md +++ b/applications/index.md @@ -553,7 +553,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☐ | -| [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☐ | ☐ | +| [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | | [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | | [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | From c6bc3fe9f608832ceb8b120c746e88795bd7d4a8 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 30 Jan 2023 10:00:47 -0300 Subject: [PATCH 014/665] Update rfps.md to add open RFPs to the list (#1489) * Update rfps.md * fix sorting --- docs/rfps.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/rfps.md b/docs/rfps.md index 2b3e18f5a57..c2deeec56e8 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -31,8 +31,10 @@ If you find an open RFP here that you think you can address, feel free to [submi | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟢 | 29.11.2021 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | | [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | +| [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | | [candle-auction.md](RFPs/Implemented/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Under%20Development/crowdloan_front_end_template.md) | 🟡 | 18.11.2022 | +| [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | | [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | | [epassport-zk-validation.md](RFPs/Open/epassport-zk-validation.md) | 🟢 | 29.11.2021 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | @@ -42,6 +44,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Under%20Development/ISO_8583.md) | 🟡 | 31.05.2022 | | [ksm-tipping-button.md](RFPs/Implemented/ksm-tipping-button.md) | 🔴 | 20.07.2021 | +| [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 🟢 | 22.12.2022 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | | [on-chain-quadratic-funding.md](RFPs/Implemented/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | | [php-api.md](RFPs/Implemented/php-api.md) | 🔴 | 27.05.2022 | @@ -55,6 +58,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | +| [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | | [wallet-aggregator-library.md](RFPs/Open/wallet-aggregator-library.md) | 🟢 | 23.01.2023 | From bfbeffda8787fe8d98ded3b09dd600485c24efef Mon Sep 17 00:00:00 2001 From: Aviraj Khare <49766964+avirajkhare00@users.noreply.github.com> Date: Mon, 30 Jan 2023 20:59:33 +0530 Subject: [PATCH 015/665] Added polkasearch application (#1461) * [Aviraj] Added Ink Boxes follow up grant * [Aviraj] Amend Ink Smart Contract Wizard * [Aviraj] Amend ink smart contract wizard * [Aviraj] Added polkasearch application * [Aviraj] Added more details to the application * [Aviraj] Added 0e in M2 * [Aviraj] Added wireframes * [Aviraj] Updated application --- applications/polkasearch.md | 206 ++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 applications/polkasearch.md diff --git a/applications/polkasearch.md b/applications/polkasearch.md new file mode 100644 index 00000000000..1154ebceabf --- /dev/null +++ b/applications/polkasearch.md @@ -0,0 +1,206 @@ +# polkasearch.xyz + +- **Team Name:** Aviraj Khare +- **Payment Address:** Bitcoin Address: bc1qtr9993ch6zlr29j5c22zzax57h62x5gj24wtxk +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +Polkasearch.xyz aims to become a discovery platform where users can discover Grants, Bounties, Jobs, Tools, Educational material for Polkadot/Substrate, all under one roof. + +**Grants:** Various DAOs can place their grant information on this website for free. They will have the CRM given by us or they can point user to external website if they wish for the user to submit grant application on their own end. + +**Bounties:** Bounties are great way to outsource the work. You can list a task as a bounty and let developers apply for it in case it is technical bounty. A bounty is not only scoped to Technical development, it can be UI/UX, writing, etc. They can either use our CRM or can point bounty to external website. + +**Jobs:** Various companies who are building on top of Polkadot ecosystem can place their jobs for free. They can either use our own CRM or they can point job to external portal of their own. + +**Tools:** It's hard to find libraries, tools, packages on top of Substrate ecosystem. We aim to build and integrate directory of tools. User can filter tools according to their specification. User will be able to upload information regarding a tool on the website. + +**Educational Material:** Get articles, educational videos, links of various substrate topics on the website. User will be able to upload tool/library name on the website. + +### Project Details + +#### Tech Stack + + - [Django](https://www.djangoproject.com/): We will be using Django as our Web framework. + - Database: We will be using Postgresql database. + - Wallet: We will be using polkadot{JS} extension wallet so that user can signup/login in the website by signing a message. + +#### API Schema + + - `/`: home page, different for both authenticated and non-authenticated users. + - `/login`: Used to login. + - `/signup`: Used to signup. + - `/signout`: Used to signout. + - `/grants`: Used to see all the grants. + - `/grants/`: Used to look for a grant. + - `/api/v1/grants/apply?grant=grant_slug`: Used to apply for a grant. Only candidate can use this. + - `/grants/new`: Used to create a new grant. + - `/bounties`: Used to view bounties. + - `/bounties/`: Used to view a bounty. + - `/api/v1/bounties/apply?bounty=bounty_slug`: Used to apply for a bounty. Only candidate can use this. + - `/bounties/new`: Used to create a new bounty. + - `/jobs`: Used to look for all the jobs. + - `/jobs/`: Used to look for a specific job. + - `/api/v1/jobs/apply?job=job_slug`: Used to apply for a job. Only candidate can use this. + - `/jobs/new`: Used to create a new job. + - `/tools`: Used to view all the tools, libraries, packages, etc. + - `/tools/`: Used to view a tool. + - `/tools/new`: Used to create a new tool. + - `/learn`: Used to view all the learning resources. + - `/learn/`: Used to view detail about a learning resource. + - `/learn/new`: Used to submit a new educational material. + +There are going to be **19** urls which means **19** HTML templates that would be rendered by Django. +There are going to be atleast **3** APIs which will be called by the frontend. + +#### Primary Entities + +Here we have **6** primary entities. + +1. User: A user can either be a `candidate` or an `employer`. A candidate can apply for a job, bounty, grant. Candidate cannot create job, bounty, grant. Candidate can only submit a tool or educational material. An employer can create Grant, Bounty, Job. She can also submit tool, educational material. An employer cannot apply for job, bounty or grant. +2. Grant: A `grant` can only be created by an employer. A candidate or multiple candidates can apply for a grant. +3. Bounty: A `bounty` can only be created by an employer. A candidate or multiple candidates can apply for a bounty. +4. Job: A `job` can only be created by an employer. A candidate or multiple candidate can apply for a job. +5. Tool: Both candidate and employer can add a `tool`. +6. Learn: Both candidate and employer can add a `learning material`. + +#### Designs + +Designs of few pages. + +1. ![Home Page](https://i.imgur.com/O5nd7q9.png) +2. ![Signup Page](https://i.imgur.com/2Tg5bAc.png) +3. ![Create a Job Page](https://i.imgur.com/2dIRPza.png) + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- Where and how does your project fit into the ecosystem? +We will become the discovery layer of Polkadot ecosystem. +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? +Developers, writers, UI/UX, etc. all will be benifited by the project. +- What need(s) does your project meet? +Our project can provide user with earning opportunities, learning material and tools required to build on top of Substrate ecosystem. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + - If so, how is your project different? + - If not, are there similar projects in related ecosystems? + + There is one project: https://earn.superteam.fun in solana ecosystem. + In polkadot ecosystem, https://polkassembly.io/ and https://polkasearch.xyz have a few things in the intersection but our platform is more about providing opportunities to the end user in this ecosystem. + +## Team :busts_in_silhouette: + +### Team members + +- Aviraj Khare + +### Contact + +- **Contact Name:** Aviraj Khare +- **Contact Email:** avirajkhare00@gmail.com +- **Website:** https://avirajkhare00.com + +### Legal Structure + +- **Registered Legal Entity:** About to get registered + +### Team's experience + +**Aviraj Khare:** Ex Gojek. Into Web3 space since 2016. Completed two grants of Web3 foundation. + +### Team Code Repos + +- https://github.com/avirajkhare00/ink-boxes +- https://github.com/avirajkhare00/ink-wizard + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/avirajkhare00 + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/avirajkhare00 + + +## Development Status :open_book: + +Yet to start the development of the project. + +## Development Roadmap :nut_and_bolt: + +This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/Support%20Docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the functionality we should expect in as much detail as possible_, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. + +Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We _recommend_ that teams structure their roadmap as 1 milestone ≈ 1 month. + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** $10,0000 USD + +### Milestone 1 + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide the documentation on the README of the repository. If needed, we will create `docs` directory that would contain in-depth documentation. | +| **0c.** | Testing and Testing Guide | Models, Views and Forms will be covered by [`django.test`](https://docs.djangoproject.com/en/4.1/topics/testing/) module which is a sub-module of `unittest`. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Authentication | User can be authenticated either via traditional web2 username/password or via polkadot extension wallet, web3 based. | +| 2. | CRM for bounties | We will be creating this CRM using Django. Everyone can view a bounty, candidate can apply for bounty and employer can create bounty(ies). | +| 3. | CRM for jobs | We will be creating this CRM using Django. Everyone can view jobs, candidate can apply for a job or multiple jobs, employer can list a job or multiple jobs. | + +### Milestone 2 + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide the documentation on the README of the repository. If needed, we will create `docs` directory that would contain in-depth documentation. | +| **0c.** | Testing and Testing Guide | Models, Views and Forms will be covered by [`django.test`](https://docs.djangoproject.com/en/4.1/topics/testing/) module which is a sub-module of `unittest`. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | We will be publishing a blog about polkasearch on Medium and Polkadot forum. | +| 1. | CRM for Grant | We will be creating this CRM in Django. Users can view grant. Candidate can apply for a grant. Employer can create a grant. | +| 2. | Tools | A listing page and viewing page for tools. Any user can add a tool inside polkadot ecosystem, user just needs to signup. | +| 3. | Educational material | Any user can add new listing for educational meterial for polkadot ecosystem. Everyone can view the listing. | +| 4. | Add grants manually | Add atleast 5 grants manually to the platform from this list: https://substrate.io/ecosystem/projects/ | +| 5. | Add bounties manually | Explore bounties by contacting companies from this list: https://substrate.io/ecosystem/projects/ | +| 6. | Add Jobs manually | Add atleast 50 jobs | +| 7. | Add Tools manually | Add atleast 50 tools | +| 8. | Add Educational materials manually | Add atleast 50 educational materials | + + + +## Future Plans + +Please include here + +- Creation of Discord Community. +- Creation of the socials for polkasearch. +- Reaching out to builders of Polkadot ecosystem to raise Jobs, Grants, Bounties, etc. +- Reaching out to candidates using various social channels providing them with opportunities. +- Already in talks with **SquareOne** team to push it into substrate builders program once we have some metric to show. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Searched on Google + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +- Work you have already done. +I have completed ink-boxes and ink-wizard grant in the past. They are into active development. +- If there are any other teams who have already contributed (financially) to the project. +No +- Previous grants you may have applied for. +Ink Boxes and Ink Wizard, both are accepted and completed. From 3b1e7fe04080a716ffa9b31007bc4a1365e09689 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 30 Jan 2023 16:37:09 +0100 Subject: [PATCH 016/665] Update index.md Add Polkasearch --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 369eacf6aef..70cd3693669 100644 --- a/applications/index.md +++ b/applications/index.md @@ -595,3 +595,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | From c13cc6755ab49d731e321c5fe9c5701f0732e854 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 31 Jan 2023 09:30:44 -0300 Subject: [PATCH 017/665] Update index.md (#1492) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 70cd3693669..16cd57bfc9a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -538,7 +538,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | | [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | | [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | From 704ade01be3ec5426803c768efd54c4e67d37ef9 Mon Sep 17 00:00:00 2001 From: gmajor <63032554+gmajor-encrypt@users.noreply.github.com> Date: Tue, 31 Jan 2023 22:27:25 +0800 Subject: [PATCH 018/665] Add PHP RPC Lib Follow up (#1488) * Add PHP RPC Lib Follow up * Fix address * Update php-rpc-lib-follow-up.md --- applications/php-rpc-lib-follow-up.md | 123 ++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 applications/php-rpc-lib-follow-up.md diff --git a/applications/php-rpc-lib-follow-up.md b/applications/php-rpc-lib-follow-up.md new file mode 100644 index 00000000000..27e99b6dc60 --- /dev/null +++ b/applications/php-rpc-lib-follow-up.md @@ -0,0 +1,123 @@ +# PHP RPC Lib Follow up + +* **Team Name:** [gmajor](https://github.com/gmajor-encrypt) +* **Payment Address:** 0xC3094f0ddce699a1Ad9Ef2621DF68Cd297a4c44F (Dai) +* **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +As Gavin mentioned in this [CoinDesk article](https://www.coindesk.com/tech/2021/05/25/polkadots-gavin-wood-webassembly-is-the-future-of-smart-contracts-but-legacy-evm-is-right-now/), WebAssembly is the future of smart contracts. + +However, WebAssembly, as the main Smart Contract in the substrate ecosystem, lacks the necessary infrastructure. Except for the lib of contracts provided by polkadot.js, there are no more third parties that can query the contract storage and interact with the package. + +PHP is one of [the most popular development languages in the world](https://www.stackscale.com/blog/most-popular-programming-languages/), PHP is used by 77.8% of all the websites whose server-side programming language(https://w3techs.com/technologies/details/pl-php). + +Traditional PHP Website developers will lack the necessary SDK if they come into contact with the substrate, +However, the lack of support for contracts in the current [php-substrate-api](https://github.com/gmajor-encrypt/php-substrate-api) makes it very difficult to use PHP as a development language to interact with the substrate. + +Therefore, this proposal is an extension of [php-substrate-api](https://github.com/gmajor-encrypt/php-substrate-api) to improve the practicability of this package further and increase support for smart contracts. + +### Project Details + +* Abi encode & decode, support contract metadata **v0,v1,v2,v3,v4**, this will be used to read and write smart contracts + +* Deploy wasm smart contract + +Example + +```php +$api = new SubstrateRpc("websocket_or_http_url"); +$api->rpc->contracts->new("wasm_code", "gas limit","value"); +``` + +* Read contract values + +Example + +```php +$api = new SubstrateRpc("websocket_or_http_url"); +$api->rpc->contracts->balanceOf("from","contract"); +``` + +* Send Contract transaction + +Example +```php +$api = new SubstrateRpc("websocket_or_http_url"); +$signer = new SubstrateRpc\Util\Keyring\Signer("privatekey");// or HD +$api->setSigner($signer); +$tx = $api->tx->contracts->transfer("to_address", 10000); +$tx->signAndSend(); +``` + + +### Ecosystem Fit + +CIt can help PHP language developers easily access the substrate (polkadot) ecology + +## Team :busts_in_silhouette: + +### Team members + +* gmajor + +### Contact + +* **Contact Name:** gmajor +* **Contact Email:** gmajorencrypt@gmail.com +* **Website:** + +### Legal Structure + +individual + +### Team's experience + +I have many years of php development experience and nearly five years of blockchain development experience, familiar +with PHP, GOLANG, PYTHON, Nodejs, Rust + +### Team Code Repos + + + + + + + + + +## Development Status :open_book: + +Not yet + +## Development Roadmap :nut_and_bolt: + +### Overview + +* **Total Estimated Duration:** 1.5 months +* **Total Costs:** 10000 DAI + +### Milestone 1 + +* **Estimated duration:** 1.5 month +* **FTE:** 1 +* **Costs:** 10000 DAI + +| Number | Deliverable | Specification | +|-------:|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT | +| 0b. | Documentation | Documentation on how to use this lib and how to test | +| 1. | ABI | Abi encode & decode, contract [metadata](https://use.ink/metadata/) v0,v1,v2,v3,v4 will be supported | +| 2. | Deploy | [php-substrate-api](https://github.com/gmajor-encrypt/php-substrate-api) implement new method of deploy wasm smart contract | +| 3. | Read contract | Implement method read contract values and decode as human readable, similar to [api-contract-read](https://polkadot.js.org/docs/api-contract/start/contract.read) | +| 4. | Write contract | Implement method send Contract transaction, similar to [api-contract-tx](https://polkadot.js.org/docs/api-contract/start/contract.tx) | +| 5. | Test | Including all the unit tests mentioned above | +| 6. | Example | Provide some simple examples of using this lib | +| 7. | Packagist | Submit to [Packagist](https://packagist.org/) for composer to use | +| 8. | Github action | Auto Test when new commit | + +## Future Plans + +This milestone still lacks support for smart contract verification, there is no better solution at present, and will be supported after research From cb51905cd0ce22c59273978de0d2b0806a7a4c49 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 31 Jan 2023 15:32:04 +0100 Subject: [PATCH 019/665] Update index.md Add PHP RPC Lib Follow up --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 16cd57bfc9a..d60a0999240 100644 --- a/applications/index.md +++ b/applications/index.md @@ -596,3 +596,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | From f1161bcd03050139bc8194db2dc2ced553d665c1 Mon Sep 17 00:00:00 2001 From: valeriacaracciolo <71491710+valeriacaracciolo@users.noreply.github.com> Date: Tue, 31 Jan 2023 15:45:02 +0100 Subject: [PATCH 020/665] Scout CoinFabrik (#1490) * Create ScoutCoinFabrik.md * Update ScoutCoinFabrik.md * Update ScoutCoinFabrik.md * Update ScoutCoinFabrik.md --- applications/ScoutCoinFabrik.md | 107 ++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 applications/ScoutCoinFabrik.md diff --git a/applications/ScoutCoinFabrik.md b/applications/ScoutCoinFabrik.md new file mode 100644 index 00000000000..f4c1c286733 --- /dev/null +++ b/applications/ScoutCoinFabrik.md @@ -0,0 +1,107 @@ +# Scout CoinFabrik +- **Team Name:** CoinFabrik (Nektra S.A) +- **Payment Address:** 0xf488039EDe6B38D7689fDCC6A9FC2dd0EF39D54e (USDT) +- **[Level]:** 2 + +## Project Overview :page_facing_up: + +### Overview + +Scout: Security Analysis Tool + +We are building an extensible open-source tool (or set of tools) to assist Rust Polkadot / Kusama smart contract developers to detect common security issues and deviations from best practices. To improve coverage and precision, we will persist in research efforts on static and dynamic analysis techniques. + +This tool will help developers write secure and more robust smart contracts. + +Our interest in this project comes from our experience in manual auditing and our usage of comparable tools in other blockchains. + + +### Project Details + +We have already conducted research work with the Universidad de Buenos Aires to better comprehend the current status of analysis tools built for Rust, while foreseeing different lines of development. + +We are currently working on tools to assist developers to apply best practices and to identify possible vulnerabilities. + +### Ecosystem Fit + +We believe we can bring value to the Polkadot / Kusama community by offering a tool to detect security bugs from a development perspective. By including this tool in their toolchain, Polkadot / Kusama developers will be assisted to remove bugs in their code, raising the quality and security of their smart contracts. + +## Team :busts_in_silhouette: + +### Team members + +- Ariel Wassbein, Head of Reaseach +- Valeria Caracciolo, Business Develpoment +- CoinFabrik's development and auditing team - when required. + +### Contact + +- **Contact Name:** Valeria Caracciolo +- **Contact Email:** valeria.caracciolo@coinfabrik.com +- **Website:** https://www.coinfabrik.com/ + +### Legal Structure + +- **Registered Address:** Dr. Emilio Ravignani 2394, C1425 CABA, Argentina +- **Registered Legal Entity:** Nektra S.A. + +### Team's experience +We are a research and development company specialized in Web3, with a strong background in cybersecurity. Founded in 2014, we have worked on over 180 blockchain-related projects, EVM based and also for Solana, Algorand, and Polkadot. Beyond development, we offer security audits through a dedicated in-house team of senior cybersecurity, currently working on code in Substrate, Solidity, Clarity, Rust, and TEAL. + +Our team has an academic background in computer science and mathematics, with work experience focused on cybersecurity and software development, including academic publications, patents turned into products, and conference presentations. Furthermore, we have an ongoing collaboration on knowledge transfer and open-source projects with the University of Buenos Aires. + +### Team Code Repos + +- https://gitlab.com/coinfabrik-private/data/frecuencia-de-vulnerabilidades +- https://drive.google.com/drive/u/1/folders/1HoaL6EXX1Wky7e1SHYBY6oIZDGK2sgDD + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/arielwaissbein/ +- https://www.linkedin.com/in/valeriacaracciolo/ + + +## Development Status :open_book: + +We have been working on different aspects of the tool: +- Research on security analysis tools for Rust-based blockchains. +- Listing common vulnerabilities and usability issues in different systems and technologies. +- Tools to assist developers. + +We briefly validated the idea of the development described in this application with David Hawig and Bhargav Bhatt from Web3 Foundation, who encourage us to apply for this grant. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 5 FTE +- **Total Costs:** 15,000 U$D + +### Milestone 1: Proof of Concept + +- **Estimated duration:** 1 month (Day 1 to Day 30) +- **FTE:** 5 +- **Costs:** 15,000 U$D + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | MIT +| 0b. | Documentation | We will provide a report, listing relevant security issues introduced in smart contracts developed with ink!. This will include a summary of findings and how the results were procured, a detailed description of each vulnerability/best practice, and links to the code that exemplifies them. +| 0c. | Testing and Testing Guide | No tests with be produced at this stage. +| 0d. | Docker | Does not apply at this stage. +| 0e. | Article | We will upload to our blog a report summary. + **1** | Research | Producing a curated list of vulnerabilities, best practices, and enhancements related to smart contracts written in ink!, considering the list of [analysis categories](https://blog.coinfabrik.com/analysis-categories/) currently used for our manual smart contract audits. + **2** | Development | Producing code examples and snippets of smart contracts written in ink! for each type of vulnerability from the list mentioned in 1. Research. + **3** | Development | Proof of concept code detecting some (relevant) issues included in the list of vulnerabilities and best practices. + + +## Future Plans + +(Our original plan was to apply for a 3 months grant, to reach a public release of the tool. But we were advised to apply for a shorter objective, so we are presenting only Milestone #1 from our plan) After completing this first milestone, we are planning on applying for 2 additional iterations to reach a tool prototype (Milestones #2) and public release (Milestones #3). Our mission is to continue to work on improving automated and assisted tools for finding security vulnerabilities and writing more secure code. Our objective is to help the Polkadot / Kusama community produce better and more secure code with these tools. + +## Referral Program (optional) :moneybag: + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Richard Casey from Parity brought this program to our attention. Our inquiries were addressed by David Hawig and Bhargav Bhatt, who also gently advised us on this presentation. From 3f8180326a942092b0df63ed1a76f39b9a51c9b6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 31 Jan 2023 15:47:57 +0100 Subject: [PATCH 021/665] Update index.md Add CoinFabrik --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d60a0999240..b4388760ddd 100644 --- a/applications/index.md +++ b/applications/index.md @@ -597,3 +597,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | From 8b52a5c20ab7c8f17e62ce6b82f12a4477051953 Mon Sep 17 00:00:00 2001 From: Luca Eugenio <88165605+Lord-Nymphis@users.noreply.github.com> Date: Tue, 31 Jan 2023 16:22:25 +0000 Subject: [PATCH 022/665] Update Datagen_Project.md (#1491) --- applications/Datagen_Project.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/applications/Datagen_Project.md b/applications/Datagen_Project.md index e3823ed743f..87e014fc167 100644 --- a/applications/Datagen_Project.md +++ b/applications/Datagen_Project.md @@ -94,7 +94,8 @@ In particular is possible to observe that the Solana ecosystem is backing both o - Angela Griggio (CEO) - Luca Eugenio Barlassina (COO) -- Niccolò Baldini (Head of Substrate Division) +- Oliver Lim (Rust and Blockchain developer) +- Niccolò Baldini (Former_Head of Substrate Division) - Ren Okamoto (Head of Solidity Smart-Contracts Development) - Alawiye Olukayode (front end developer) - William Liu (part-time / blockchain developer) @@ -138,6 +139,7 @@ All our devs (and our designers) are professionals and also very committed to le - Alawiye ( https://github.com/oluseyi-frontend?tab=repositories ) - Luca (https://github.com/Lord-Nymphis ) - Niccolò ( https://github.com/viac92 ) +- Oliver (https://github.com/cuteolaf ) - Ren ( https://github.com/fantasy2345 ) - William ( https://github.com/Crypto-One-dev ) @@ -150,6 +152,7 @@ All our devs (and our designers) are professionals and also very committed to le - Giulia (https://www.linkedin.com/in/giulia-cortinovis-98702796/) - Luca (https://www.linkedin.com/in/luca-eugenio-barlassina-293077180/) - Niccolò (https://www.linkedin.com/in/niccol%C3%B3-baldini-0400baa9/) +- Oliver ( https://www.linkedin.com/in/oliver-lim-2215a8235/ ) - Ren (https://www.linkedin.com/in/ren-okamoto-140a97224/) - William (https://www.linkedin.com/in/william-liu-8a4672218/) From 0abd13bfde95bb9316b0468b27543bc7cf060618 Mon Sep 17 00:00:00 2001 From: Dominik | Brushfam <43150707+coreggon11@users.noreply.github.com> Date: Wed, 1 Feb 2023 08:24:17 +0100 Subject: [PATCH 023/665] Update openbrush-follow-up-2.md (#1469) --- applications/openbrush-follow-up-2.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/applications/openbrush-follow-up-2.md b/applications/openbrush-follow-up-2.md index 0f87dfedd23..0af5a98dd5a 100644 --- a/applications/openbrush-follow-up-2.md +++ b/applications/openbrush-follow-up-2.md @@ -308,9 +308,9 @@ PSP37 - #### Milestone 8. `UniquePallet`/`RMRKPallet` chain extension -* **Estimated Duration:** 7 weeks +* **Estimated Duration:** 8 weeks * **FTE:** 2.5 -* **Costs:** 52 500 USD +* **Costs:** 55 300 USD | Number | Deliverable | Specification | |--------|--------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -322,6 +322,7 @@ PSP37 - | 4. | Implement NFT contract via chain extensions | OpenBrush will provide a default implementation of contracts that are implemented via according chains extensions. | | 5. | Refactoring of trait system in the ink! | Refactoring of trait system in the ink! to support default implementation inside of traits. It should improve the developer's experience with traits and simplify its usage. | | 6. | Marketing - Create 4 educational video for OpenBrush/ink! | We are going to work on educational video materials for OpenBrush and ink! Community. We see a huge gap in knowledge, understanding, and vision for the whole community in that sphere. Moreover, 727.ventures team will promote it in Twitter, Medium etc. We will create a lower entry threshold for newcomers by this educational program. | +| 7. | ink! storage docs | There is no documentation with clear description of how the storage works within ink!. As our team was the one doing the refactoring of ink! storage, we will create a comprehensive documentation on how the storage works in ink! 4, as well as detailed comparison on what was changed in comparison to ink! 3 storage, including examples of usage. | #### Milestone 9. Multi token chain extension From 6b6c83fc6e159e4434a9530e32ae98021fcce8a3 Mon Sep 17 00:00:00 2001 From: Dominik | Brushfam <43150707+coreggon11@users.noreply.github.com> Date: Wed, 1 Feb 2023 08:37:35 +0100 Subject: [PATCH 024/665] Follow-up grant for Typechain-Polkadot (#1432) * Create typechain-polkadot-follow-up-2.md * Update typechain-polkadot-follow-up-2.md * Update typechain-polkadot-follow-up-2.md * Apply suggestions from code review Co-authored-by: S E R A Y A * Update typechain-polkadot-follow-up-2.md --------- Co-authored-by: S E R A Y A Co-authored-by: varex83 <35969035+varex83@users.noreply.github.com> --- .../typechain-polkadot-follow-up-2.md | 191 ++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 applications/typechain-polkadot-follow-up-2.md diff --git a/applications/typechain-polkadot-follow-up-2.md b/applications/typechain-polkadot-follow-up-2.md new file mode 100644 index 00000000000..1352a75401b --- /dev/null +++ b/applications/typechain-polkadot-follow-up-2.md @@ -0,0 +1,191 @@ +# Typechain-Polkadot Follow-up-2 + +# [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) + +- **Project Name:** [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) +- **Team Name:** [727.ventures](https://github.com/727-Ventures) +- **Payment Address:** ERC 20 (DAI): +0x352F779203202c99699CdA8cc95adF06CcC8abEf +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview + +Nowadays, when technologies are growing faster and faster, we should think about optimizing different routine processes and making older stuff better. One of these optimizations is to make code typesafe that will be flexible in different situations. + +When a smart contract is being written, the front-end developer receives its file representation in the Application Binary Interface (ABI) format. One ABI per each contract, a new ABI for every contract update. + +Information about how to interact with a contract (methods names, arguments & returns types, etc.) is included in this ABI file. It is not relatively human-readable, so extracting that information becomes a challenge. We need to have correct type definitions for each contract in TypeScript. + +Interaction with blockchain is done with the polkadot.js library, which only has abstract definitions for the contract in use. Thus users' code cannot be typesafe. And Typechain-Polkadot can change it. + +This Grant is a follow-up to the previous grants, [first grant](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot.md) and [second grant](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot-follow-up.md). +In this grant, we aim to integrate event subscription, allow users to create their plugins and expand the tool into more packages so the users can alo use different parts of the application alone if needed. + +### Usage of Typechain-compiler + +``` + npx typechain-compiler --config config.json + +``` + +Also, you can set some additional arguments like `--noCompile`, `--noTypechain`, `--release` + +Config interface will be something like this: + +``` +export interface Config { + projectFiles: string[]; // Path to all project files, everystring in glob format + skipLinting : boolean; // Skip linting of project files + artifactsPath : string; // Path to artifacts folder, where artifacts will be stored it will save both .contract and .json (contract ABI) + typechainGeneratedPath : string; // Path to typechain generated folder +} + +``` + +### Project Details + +Typesafe contracts' descriptions can be generated automatically by a script, taking a list of ABIs as an input, giving usable TS type definitions and even runtime code as its output. + +Given that a front-end developer needs to do this with every contract update, the such tool would save a lot of time and prevent mistakes of misusing smart contracts. It is installed as a package with built-in CLI. + +When contract descriptions come both with ABI and source code (`*.contract` files), our tool will provide means for deployment as well. + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + +There is a whole side to every project in the ecosystem - that is, the front-end side of contract integration - that will find a use for Typechain-Polkadot during the development process. + +- Who is your target audience? + +Our main target audience is front-end and smart-contract developers of Polkadot projects. + +- What need(s) does your project meet? + +Our project speeds up the front-end integration of Polkadot/Substrate/Kusama contracts. As well as brings type safety to developers' code when dealing with contracts. For smart contract developers, it simplifies integration test writing. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + +No, we are the first project of the kind in the ecosystem. However, in the Solidity ecosystem, a similar project already exists, [Typechain](https://www.npmjs.com/package/typechain). + +## Team :busts_in_silhouette: + +### Team members + +- **Markian Ivanichok** (СEO of 727.ventures) +- **Fedor Lebed** (Head of Operations | 727.ventures) +- **Dominik Krížo** (Head of Engineering | 727.ventures) +- **Varex Silver** (Blockchain developer | 727.ventures) +- **Artem Lech** (Blockchain developer | 727.ventures) + +### Contact + +- **Contact Name:** Fedor Lebed +- **Contact Email:** [fedor.lebed@727.ventures](mailto:feder.lebed@727.ventures) +- **Website:** [727.ventures](727.ventures) + +### Legal Structure + +* **Registered Address:** The registered office shall be in Coastal Building, Wickham’s +Cay II, P. O. Box 2221, Road Town, Tortola, VG1110, British Virgin Islands. +* **Registered Legal Entity:** Seven2seven Ventures Ltd + +### Team's experience + +**Markian Ivanichok** +CEO of 727.ventures, Blockchain entrepreneur, Software Engineer. Started my engineering career back when I was 15. Since then, I developed and got a lot of experience in engineering and leadership. Gained entrepreneur experience by founding a couple of startups. Inspired, co-founded and invested in Sector F, one of the top consulting companies in Ukraine that helps entrepreneurs to move faster. + +**Fedor Lebed** +Fedor is the head of operations at Brushfam, a portfolio company of 727. ventures which is developing the ink! Smart contracts tools. +Fedor invested in mining pools from 15 years old. He has a background in product management, working with international software products for Tier-1 markets. + +**Dominik Krížo** +Head of Engineering + +Started programming own games at age of 15 as a hobby, then went to University studying informatics and object oriented programming, becoming an Android developer, eventually switching to work in web3. Dominik played a crucial role in the OpenBrush and Sol2Ink development and is currently developing the ink! smart contracts tools as part of Brushfam. + +**Varex Silver** +Blockchain Developer. + +Student of Computer Science at the Kyiv National University of Taras Shevchenko. Participated in programming competitions of different stages in school since 2017 (C++). +Was a Backend developer(Go), Solidity developer(Solidity, Hardhat, Typescript), and now Blockchain developer(Rust, Typescript). + +**Artem Lech** +Blockchain Developer. + +Student of Applied Mathematics at the Kyiv National University of Taras Shevchenko. Started programming in 2016 and participated in a lot of Ukrainian and international competitions of competitive programming. Worked as a lecturer of algorithms at the school of competitive programming and as Intern Backend Engineer (Rust). Now works as Blockchain Developer on Polkadot Blockchain (Rust, Typescript). + +### Team Code Repos + +- [https://github.com/727-Ventures](https://github.com/727-Ventures) + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- [https://github.com/coreggon11](https://github.com/coreggon11) +- [https://github.com/varex83](https://github.com/varex83) +- [https://github.com/Artemka374](https://github.com/Artemka374) + +### Team LinkedIn Profiles (if available) + +- [https://www.linkedin.com/in/mivanichok/](https://www.linkedin.com/in/mivanichok/) +- [https://www.linkedin.com/in/fedor-lebed-b8520b1a8/](https://www.linkedin.com/in/fedor-lebed-b8520b1a8/) +- [https://www.linkedin.com/in/dominik-krizo/](https://www.linkedin.com/in/dominik-krizo/) +- [https://www.linkedin.com/in/bogdan-ogorodniy/](https://www.linkedin.com/in/bogdan-ogorodniy/) +- [https://www.linkedin.com/in/artem-fomiuk-31249b226/](https://www.linkedin.com/in/artem-fomiuk-31249b226/) + +## Development Status :open_book: + +[The project](https://github.com/727-Ventures/typechain-polkadot) is already a work-in-progress. + +## Development Roadmap :nut_and_bolt: + +### Overview + +We have decided to describe a full roadmap of a Typechain here, with estimates. However, the funding we request at this stage is for milestone 3. + +* **Total Estimated Duration:** 8 weeks +* **Full-Time Equivalent (FTE):** 2.5 +* **Total Costs:** 56,000 USD + +## Previous work + +### [Grant #1](https://github.com/w3f/Grants-Program/pull/992) + +### [Grant #2](https://github.com/w3f/Grants-Program/pull/1368) + +## Current work - Scope of this grant +### Milestone 1 - High-level improvements, flexibility and simplifying of usage + +- **Estimated duration:** 8 weeks +- **FTE:** 2.5 +- **Costs:** 56,000 USD + + +| Number | Deliverable | Specification | +| ------ | ----------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will cover new-added features in documentation and usage examples. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article that explains how to integrate the typechain library into a project and describes the types of connection options (directly or via compiler). | +| 1. | User-defined plugins | We will provide an opportunity for users to make their plugins, for instance, how to use parsed types, adding new fields and so on. | +| 2. | Subscribing to events | We will research and subscribe to events the contract emits, which will be handy for developers. | +| 3. | Typechain-compiler | The tool will be easy for big projects to compile Rust code and generate Typechain definitions. It’ll be helpful for TDD when users can write code and develop everything in one CLI command instead of generating a typechain-code file by file. In plans, we want to make a wrapper for running user scripts (like hardhat run) and also functionality to initialize the environment for typechain usage | +| 4. | Openbrush integration tests | We will test typechain on openbrush integration tests to ensure everything is working correctly and is easy to use. | +| 5. | typechain/types package | We will make a separate package for types that typechain use to reduce the usage of the same code and separate static code from generated code. | + +## Future work + +After this grant, we will maintain the project to keep up with new emerging ecosystem standards, listen to community issues, and update the tool to make the transformation process a more excellent experience for the developers and teams. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Have a number of approved applications: + +- OpenBrush +- Sol2Ink +- Typechain-polkadot (Milestone 1, 2) From fd8f9e085786a268a79d3213983a47e134674556 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 1 Feb 2023 08:52:58 +0100 Subject: [PATCH 025/665] Update index.md Typechain-Polkadot Follow-up-2 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b4388760ddd..513c23a7316 100644 --- a/applications/index.md +++ b/applications/index.md @@ -598,3 +598,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | From a391d2f1866ac14c981f6445c24ec01e8eac2e8e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 1 Feb 2023 13:23:57 +0100 Subject: [PATCH 026/665] Update index.md Update Implementation of the new hash function to BLS12 curves --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 513c23a7316..d84eb5892a0 100644 --- a/applications/index.md +++ b/applications/index.md @@ -427,7 +427,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [@Scale Technologies](https://atscale.xyz) | [Libra - Decentralized Payment Network](./Libra.md) | [GitHub](https://github.com/atscaletech/) | ☐ | ☒ | ☒ | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☐ | | [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | -| [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☐ | +| [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | | [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | | [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☐ | ☐ | | [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | From 825776630fcc246ba8e487687ba4e1abf9bbb04e Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Wed, 1 Feb 2023 15:51:42 +0100 Subject: [PATCH 027/665] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d84eb5892a0..ce341a60d5c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -356,7 +356,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | | [Pawn](https://github.com/pawnz0) | [NuLink](./NuLink.md) | [GitHub](https://github.com/pawnz0/NuLink) | ☐ | ☒ | ☒ | | [Cyril Carlier](https://github.com/CrommVardek) | [Polk-Auction Website](./polk-auction.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☒ | ☒ | -| [Uddug](https://uddug.com/) | [JuniDB - Peer-to-Peer Databases](./JuniDB.md) | [GitHub](http://github.com/uddugteam/) | ☐ | ☐ | ☐ | +| [Uddug](https://uddug.com/) | [JuniDB - Peer-to-Peer Databases](./JuniDB.md) | [GitHub](http://github.com/uddugteam/) | ☒ | ☐ | ☐ | | [Canyon Labs](https://canyon-network.io) | [Permanent decentralized storage Phase 2](./canyon_network.md) | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | | [Skynet Labs](https://siasky.net/) | [Pallet for Decentralized Off-Chain Storage on Skynet](./skynet-substrate-integration.md) | [GitHub](https://gitlab.com/SkynetLabs) | ☐ | ☒ | ☒ | | [Uniwrap/1001 Group](https://uniwrap.io/) | [Project 1001](./project_1001.md) | [GitHub](https://github.com/uniwrap-protocol) | ☐ | ☐ | ☐ | From abc4c132c3565b81d98744802c030f7b07cc3de4 Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Thu, 2 Feb 2023 02:57:09 +1100 Subject: [PATCH 028/665] Grant: Substrate Tokenomics Survey (#1348) * Grant: Substrate Tokenomics Survey Substrate Tokenomics - The state of (rational) play Signed-off-by: Mark Van de Vyver * Remove non-research elements Signed-off-by: Mark Van de Vyver * Response to reviewer feedback Signed-off-by: Mark Van de Vyver * Updated to research template Signed-off-by: Mark Van de Vyver * Align description detail across sections Signed-off-by: Mark Van de Vyver * Changes requested Signed-off-by: Mark Van de Vyver * Changes requested Signed-off-by: Mark Van de Vyver * Changes requested Signed-off-by: Mark Van de Vyver * Changes requested Signed-off-by: Mark Van de Vyver --------- Signed-off-by: Mark Van de Vyver --- applications/tokenomics-survey-2022.md | 323 +++++++++++++++++++++++++ 1 file changed, 323 insertions(+) create mode 100644 applications/tokenomics-survey-2022.md diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md new file mode 100644 index 00000000000..1e5eccd3fe8 --- /dev/null +++ b/applications/tokenomics-survey-2022.md @@ -0,0 +1,323 @@ +# Substrate Tokenomics: + +- **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) +- **Payment Address:** To be provided (e.g. 0x8920... (USD)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +A annotated bibliography of rational expectations equilibrium (a.k.a. no-arbitrage) economic models used to develop blockchain/token economies, as well as the tokenomics of Polkadot Parachains. + +This is a survey, hence limited to topics the existing literature addresses. Within the scope of the deliverables, I am not committing to solving any particular token-economy design question. +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). + +- Description: + The decision making of Substrate developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain. +- This project provides a annotated bibliography to help think through various choices and their trade-offs. It does so by reviewing the current state of play, as it is described in: a) published general-blockchain research, b) Polkadot whitepapers. It does not offer the answer to any particular token-economy design question. +- Substrate integration: + With Substrate Token-Economy networks in mind, I aim to provide a annotated bibliography of existing general-blockchain token-economy research. + Specifically, the central features and concerns across Polkadot Parachain Token-Economy networks will be identified. + Ultimately, the reader should learn something about those features of the token-economies of Polkadot Parachain networks and understand how some of the issues raised by the general-blockchain token-economy research are addressed by Polkadot Parachain token-economy designs, while others are not. + Summary tables will highlight the key differentiating characteristics of different Polkadot Parachain network token-economies. +- Motivation: + A project we are developing envisions the use of Substrate relay and Parachains in such a manner that our (imagined) token use is, apparently, novel. The state of play in Polkadot Parachain token-economics appears to be a debate [around staking and inflation](https://forum.polkadot.network/t/should-parachains-have-staking-inflation/806). A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of Substrate and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. + +## Project Details + +### The problem + +A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of Substrate and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. Inclusion of any of this information in Substrate/Polkadot documentation is out of scope. + +### Research questions/hypothesis + +This project provides a annotated bibliography to identify relevant research, it does not offer the answer to any particular token-economy design question. It does so using: a) published general-blockchain research, b) Polkadot whitepapers. + +### The Methodology + +The annotated bibliography component of this exercise will be closest to a "Scoping Review", see Grant MJ, Booth A. [A typology of reviews: an analysis of 14 review types and associated methodologies](https://doi.org/10.1111/j.1471-1842.2009.00848.x). Health Info Libr J. 2009 Jun; 26(2):91-108. Review. PubMed PMID: 19490148. + +Extract from Table 1 of Grant, M.J. and Booth, A. (2009): + +| Description | Search | Appraisal | Synthesis | Analysis | +| ----------- | ------ | --------- | --------- | -------- | +| Preliminary assessment of potential size and scope of available research literature. Aims to identify nature and extent of research evidence (usually including ongoing research) | Completeness of searching determined by time/scope constraints. May include research in progress | No formal quality assessment | Typically tabular with some narrative commentary | Characterizes quantity and quality of literature, perhaps by study design and other key features. Attempts to specify a viable review | + +Each section of the report/working paper will be developed using some subset of the following iterative process (Tsafnat, G., Glasziou, P., Choong, M.K. et al. [Systematic review automation technologies](https://doi.org/10.1186/2046-4053-3-74), Syst Rev 3, 74 (2014)) + +- Review reporting guidelines, best practice handbooks, and training modules [preparation stage] +- Formulate question and decide on review type [preparation stage] +- Search for previous published literature [preparation stage] +- Develop and test search strategies [preparation stage] +- Review search strategies [preparation stage] +- Execute search [retrieval stage] +- De-duplicate data/information [retrieval stage] +- Screen title and abstracts [screening stage] +- Retrieve full-text articles [retrieval stage] +- Screen articles in full-text [screening stage] +- Search for grey literature (preprints, working papers) [retrieval stage] +- Quality assessment and data/information extraction [synthesis stage] +- Citation chasing [retrieval stage] +- Update database searches [retrieval stage] +- Synthesize data/information [synthesis stage] +- Manuscript development [write-up stage] + +### The data collection and analysis procedures + +#### Published articles + +The initial source of the published research will be the top-10 articles selected by the grantee, using the commercial research databases available from the State Library of New South Wales by operationalizing the following inquiry, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors". This initial source may be adjusted at the grantees discretion based on his expertise. The selection process will be fully described and documented. + +#### Polkadot Parachain whitepapers + +These are from projects that are Polkadot-Parachains as at 19 December 2022. + +### The expected results + +The objective is to arrive at a scoping review of current state of token-economy development. + +One of the elements will be summary tables, using attributes that arise naturally within a Rational Expectations Equilibrium framework, such as the following: + +- Network +- Token +- Token Type +- Model Type +- Economy Type +- Sector Type +- Production Type +- Monetary Type +- Agent Utility +- Economic Sectors +- Rate Curves +- Riskless Rate +- Risk Premium +- Market Rate +- Borrow/Lend +- Lender of Last Resort + +Another component of this research is creating a token-categorization questionnaire or decision tree that will aid/inform the specification of a token-economy. Nonetheless, there are already schemes that are useful even at this early stage. Such as these [Token Types (Burnie, Burnie and Henderson (2018))](https://doi.org/10.5195/ledger.2018.121): + +- fuel-tokens: "underpin generic blockchain applications". I refine this definition as follows: The token yield is defined or modeled such that it provides holders with incentives to act for the purpose of ensuring the blockchain has the desired features/characteristics. +- transaction-tokens: "act as a cash substitute" +- voucher-tokens: "exchanged for a predefined asset". I include goods or services. + +The grants team, and any reader could reproduce the data analysis by applying the token-categorization questionaire to a parachain they are familiar with and compare their classification with the submitted result. + +### Relevant related work + +- [A typology of reviews: an analysis of 14 review types and associated methodologies](https://doi.org/10.1111/j.1471-1842.2009.00848.x) +- [Systematic review automation technologies](https://doi.org/10.1186/2046-4053-3-74) +- [Token Types (Burnie, Burnie and Henderson (2018))](https://doi.org/10.5195/ledger.2018.121) + +### Intended venue for results publication and the timeline for publication + +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). + +### Out of scope + +- Crypto currencies/stable coins. +- What is considered a security and what is not. +- Proof-of-work vs Proof-of-stake considerations, e.g. [Blockchain economics](https://scholar.princeton.edu/sites/default/files/markus/files/blockchain_paper_v7a.pdf). +- Governance considerations, e.g. trust and reputation. +- Game theory, behavioral economics/finance. +- Empirical inference of token-economy attributes from time-series or cross-sectional regression analysis. +- A review of the general economic modeling literature i.e. not related to blockchains. +- Substrate/Polkadot documentation. +- Verifying the network token-economy has been implemented as specified in the network whitepaper. +- Verifying the network whitepaper assumptions are a reasonable/plausible description of the network participants. +- Inclusion of any of this information in Substrate/Polkadot documentation. + +#### Crypto-Currencies + +The prevalence of crypto-currencies means the decision to exclude them warrants some explanation. +Equilibria are generally explicitly constructed (which proves existence) using conjectured properties of the dividends (or an equivalent) from the economic activity. Specifically, a price is the present-value (i.e. discounted for time and non-diversifiable risk), of all future dividends. Since the dividends of fiat currencies are zero this approach does not work. While there are workarounds, they, being particular, are not of interest in the more general setting we wish to bring to light. + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + - Research into the design of a token-economy and survey of Polkadot token-economies. +- Who is your target audience? + - Polkadot/Substrate Relay and Parachain developers. Industry analysts/advisors (media and investors). +- What need(s) does your project meet? + Developers and analysts need to understand the relevant literature available when developing their token-economy. + The literature we canvas both theoretical (refereed articles) and applied (network whitepapers). +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + No + - If not, are there similar projects in related ecosystems? + No + +## Team :busts_in_silhouette: + +### Team members + +- Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) + +### Contact + +- **Contact Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) +- **Contact Email:** mark@taqtiqa.com + +### Legal Structure + +- **Registered Address:** 9681 41st St NE, Saint Michael, MN 55376 +- **Registered Legal Entity:** Begley Brothers Inc. + +### Team's experience + +Research interests + +- Time series analysis of price series and pricing model performance. +- Market Microstructure theory and empirical studies. +- Option pricing and real options/asset pricing. + +The University of Western Australia (1994-2003): +Postgraduate and undergraduate teaching and research supervision. Portfolio Management, Corporate Finance and Derivatives Securities. Co-developed (with Prof R. Maller and Prof A. Szimayer) the University’s joint Undergraduate and Postgraduate Degrees in Mathematics and Finance. + +The University of Sydney (2003-2008): +Postgraduate and undergraduate teaching and research supervision. Advanced Asset Pricing, Corporate Finance, Investments and Advanced Portfolio Management + +#### Publications + +- [Order imbalance period by period](https://www.researchgate.net/publication/228464696_Order_imbalance_period_by_period), 2008, Asli Ascioglu, Thomas H. Mcinish (Wunderlich Chair) and Mark Van de Vyver +- [Testing for reduction to random walk in autoregressive conditional heteroskedasticity models](https://doi.org/10.1111/1368-423X.t01-1-00090), December 2002, Econometrics Journal, Claudia Kluppelberg, Ross Maller, Mark Van de Vyver, Derick Wee +- [How Might Companies Value Esos?](https://doi.org/10.1111/j.1835-2561.2002.tb00191.x), March 2002, Australian Accounting Review, Ross Maller, Rosemary Tan, Mark Van de Vyver + +### Team Code Repos + +Personal + +- https://github.com/taqtiqa-mark +- https://github.com/bbros-dev +- https://github.com/taqtiqa +- https://github.com/BegleyBrothers + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/tatiqa/ + +## Development Status :open_book: + +- links to improvement requests for proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/rfp-proposal): + - [Designing UpChain: a framework for securing Substrate runtime upgrades and Substrate network upgrades](https://github.com/w3f/Grants-Program/pull/1309) +- As requested, I have adjusted the source of the research to eliminate myself as the source of bias in the collection of research papers. +- academic publications relevant to the problem: + One of the products from this research will be such a listing under these categories: + 1. Published articles: As requested, to eliminate bias (and constrain budget) in the collection of research papers, the initial source of the published research will be the top-10 articles provided by the State Library of New South Wales information search service in response to the following query, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors" + 2. Polkadot Parachain whitepapers: These are from projects that are Polkadot-Parachains as at 19 December 2022. +- links to your research diary, blog posts, articles, forum discussions or open GitHub issues: + - [Tokenomics: Grant models](https://forum.polkadot.network/t/tokenomics-grant-models/1266) +- references to conversations you might have had related to this project with anyone from the Web3 Foundation + There have been no conversations related to this project with anyone from the Web3 Foundation. +- previous interface iterations, such as mock-ups and wireframes: + This project is research oriented and as such there are no mock-ups and wireframes to test. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- Total Estimated Duration: 3 months +- Full-Time Equivalent (FTE): 0.2 FTE +- Total Costs: 10,000 USD + +### Milestone 1 — Data gathering & Polkadot Networks + +- **Estimated duration:** 1 month +- **FTE:** 0.2 +- **Costs:** 3,000 USD + +Initial analysis of the Parachain tokenomics. +Initial flow-chart/decision-tree development that will help developers place their token in the following contexts: + +- Token Type +- Model Type +- Economy Type +- Sector Type +- Production Type +- Monetary Type + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | +| **0b.** | Documentation/Tutorial | We will provide both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | +| **0c.** | Methodology | Detailed explanation of how the results were achieved and how to reproduce/verify the results. | +| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0e.** | Article | We create a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation." | +| **0e.1** | - Appendix: Methodology | As described in the methodology section above | +| **0e.2** | - Section: Polkadot Parachains | Initial Parachain summary | +| 1. | List of academic papers | Collect published and network papers, as described in the methodology section above | +| 2. | Data to be extracted from the papers | As described in the methodology section above | +| 3. | Analysis procedures | As described in the methodology section above | + +### Milestone 2 — Outline Article + +- **Estimated duration:** 1 month +- **FTE:** 0.2 +- **Costs:** 3,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | +| **0b.** | Documentation/Tutorial | We will update both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | +| **0c.** | Methodology | Update the detailed explanation of how the results were achieved and how to reproduce/verify the results. | +| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0e.** | Article | We will send a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."| +| **0e.1** | Article | We will publish an **working paper** as indicated above. | +| **0e.2** | - Section: Published models | Initial annotated bibliography | +| **0e.3** | - Section: Polkadot Parachain Economies | Parachain summary updated with references to published models | + +### Milestone 3 — Finalize Article + +- **Estimated Duration:** 1 month +- **FTE:** 0.2 +- **Costs:** 4,000 USD + +Finalize the flow-chart/decision-tree that will help developers place their token in the following contexts: + +- Token Type +- Model Type +- Economy Type +- Sector Type +- Production Type +- Monetary Type + +Finalize the annotated bibliography. +Promote the working paper, incorporate feedback. +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | +| **0b.** | Documentation/Tutorial | We will update both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | +| **0c.** | Methodology | Update the detailed explanation of how the results were achieved and how to reproduce/verify the results. | +| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0e** | Article | We will update a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."| +| **0e.1** | - Section: Introduction | Place the topic in perspective and motivate non-specialist readers. Text and tables where relevant/appropriate. | +| **0e.2** | - Section: Published models | Update annotated bibliography | +| **0e.3** | - Section: Polkadot Parachains | Parachain summary updated with references to published models | +| **0e.4** | - Appendix: Methodology | The research methodology. Text and tables where relevant/appropriate. | +| **0e.5** | - Section: Summary | Where are we and where to next? | +| 1. | Feedback | Collect published, working and network papers, as described in the methodology section above | +| 2. | Publish | The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent) | + +## Future Plans + +Please include here + +- how you intend to use, enhance, promote and support your project in the short term, and + - The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent) and the Polkadot forum. +- the team's long-term plans and intentions in relation to it. + - Engage in a more forward-looking/positive analysis of how to design an aspect of the Substrate/Polkadot token-economy that addresses a current need. + - Create RFP's addressing pallet functionality gaps that are identified in the course of the above. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website + +- Work underway: + - Literature collation + - Type definitions +- If there are any other teams who have already contributed (financially) to the project. + - None +- Previous grants you may have applied for. + - None From 87e7ff4a56c3923b2e1318b952f5c2fada01a01a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 1 Feb 2023 17:00:02 +0100 Subject: [PATCH 029/665] Update index.md Add Substrate Tokenomics Survey --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index ce341a60d5c..3bb5099cf94 100644 --- a/applications/index.md +++ b/applications/index.md @@ -599,3 +599,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | +| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | From 9ac16ec7a3ebe6c9badd5a19e0e8df8d61d096b5 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 1 Feb 2023 08:01:55 -0800 Subject: [PATCH 030/665] Update check_application_document.yml (#1498) Add manual trigger --- .github/workflows/check_application_document.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index e24db790cce..7d82a6619da 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -1,6 +1,7 @@ name: Check application document on: + workflow_dispatch: pull_request: types: [opened] From d19a617fe6724ec35f6f1364b185336f7c8a5111 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 2 Feb 2023 01:58:58 -0800 Subject: [PATCH 031/665] Update index.md (#1501) Faterium -> Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3bb5099cf94..6331c34b73e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -552,7 +552,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | -| [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☐ | +| [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | | [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | | [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | | [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | From 020c354f717bd69b21b1b75185c748edb0301787 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 2 Feb 2023 04:04:43 -0800 Subject: [PATCH 032/665] Update ZK-Snarks tutorial.md (#1502) Fix formatting --- applications/ZK-Snarks tutorial.md | 32 ++++++++++-------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/applications/ZK-Snarks tutorial.md b/applications/ZK-Snarks tutorial.md index a447f39c64f..309c7fcec8f 100644 --- a/applications/ZK-Snarks tutorial.md +++ b/applications/ZK-Snarks tutorial.md @@ -1,6 +1,6 @@ # ZK-Snarks tutorial -* **Team Name:** Bright Inventions -* **Payment Address:** 0xD75dDC4Aa3618e1417c68E5Df79ef9D66E4B1Ed9 +- **Team Name:** Bright Inventions +- **Payment Address:** 0xD75dDC4Aa3618e1417c68E5Df79ef9D66E4B1Ed9 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 @@ -46,33 +46,21 @@ As our implementation will be accompanied by series of blog posts and a youtube - Katarzyna Łukasiewicz - Project Manager ### Contact -* **Katarzyna Łukasiewicz:** +* **Contact Name:** Katarzyna Łukasiewicz * **Contact Email:** katarzyna.lukasiewicz@brightinventions.pl -* **Website** https://brightinventions.pl/ +* **Website:** https://brightinventions.pl/ ### Legal Structure Bright Inventions is a limited liability company based in Gdansk, Poland. Company was founded in 2012 by Daniel Makurat and Michał Łukasiewicz. -Full address details: - - -Bright Inventions Sp. z o. o. - -ul. Jana Matejki 12 - -80-232 Gdańsk, Poland - -info@brightinventions.pl - -www.brightinventions.pl - -Company registration number: 0000687244 - -VAT EU: PL5842761920 - -REGON: 367805647 +- **Registered Address:** ul. Jana Matejki 12, 80-232 Gdańsk, Poland +- **Registered Legal Entity:** Bright Inventions Sp. z o. o. +- **Info:** info@brightinventions.pl, www.brightinventions.pl +- **Company registration number:** 0000687244 +- **VAT EU:** PL5842761920 +- **REGON:** 367805647 Bright Inventions is a team of oveer 70 full-time onsite developers, project managers & UX/UI designers - experts in mobile and web applications, systems integration, IOT devices and Blockchain platforms. From e224ebb05d4635d6cf92cbb0341fa0df21734e54 Mon Sep 17 00:00:00 2001 From: Chris00 <91449322+chrisicen@users.noreply.github.com> Date: Thu, 2 Feb 2023 22:02:08 +0800 Subject: [PATCH 033/665] Update timeline for significant delays (#1500) --- applications/openrollup-mvp-phase-1.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/openrollup-mvp-phase-1.md b/applications/openrollup-mvp-phase-1.md index 8fd622d3ab2..a27724cdc42 100644 --- a/applications/openrollup-mvp-phase-1.md +++ b/applications/openrollup-mvp-phase-1.md @@ -141,14 +141,14 @@ We've been working on techniques for zk-rollup, and verifiable computation for s ### Overview -- **Total Estimated Duration:** 4 months -- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Estimated Duration:** 7.5 months +- **Full-Time Equivalent (FTE):** 1.5 FTE - **Total Costs:** 30,000 USD. ### Milestone 1 — Implement Substrate Modules -- **Estimated duration:** 4 month -- **FTE:** 1 +- **Estimated duration:** 7.5 month +- **FTE:** 1.5 - **Costs:** 30,000 USD | Number | Deliverable | Specification | From 49443f284ef7d536901884e2f61d4ee98b5ab3f2 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 2 Feb 2023 15:21:40 -0300 Subject: [PATCH 034/665] Update application-template-research.md (#1503) --- applications/application-template-research.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/applications/application-template-research.md b/applications/application-template-research.md index 5e43b3654b4..f455aec6ad4 100644 --- a/applications/application-template-research.md +++ b/applications/application-template-research.md @@ -22,6 +22,7 @@ Please provide the following: - A brief description of your project. - An indication of how your project relates to / integrates into Substrate / Polkadot / Kusama. - An indication of why your team is interested in creating this project. +- An indication if your project is academic research, i.e., intended to be published in an academic peer-reviewed venue, or a technical one, to be published as a technical report on the internet. ### Project Details @@ -132,7 +133,7 @@ Below we provide an **example roadmap**. In the descriptions, it should be clear | **0b.** | Documentation/Tutorial | We will provide both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | | **0c.** | Methodology | Detailed explanation of how the results were achieved and how to reproduce/verify the results. | | **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. Ideally, we recommend the usage of LaTeX/Overleaf for article production and Docker files for software execution. | -| **0e.** | Article | We will send an **article** or part of it (with source code) that explains in the English language [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | +| **0e.** | Article | We will send an **article** or part of it (with source code) that explains in the English language [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.). For level 2 and 3 grants, the article must contain the following statement in an acknowledgments section: This work was supported by a research grant from the Web3 Foundation. | | 1. | List of academic papers regarding X | We will systematically search the literature about X and deliver a list of papers to read with web links to them | | 2. | Data to be extracted from the papers | Data fields with the explanation of each that will be extracted from the papers ... | | 3. | Analysis procedures | We gonna describe all the procedures planned for the analysis that will be conducted in the next milestone ... | From b8645d66642639880ee7b5931a2e0f927a54710e Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 3 Feb 2023 02:11:29 -0800 Subject: [PATCH 035/665] Update TREX_Network.md (#1504) Add `Total Costs` --- applications/TREX_Network.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/applications/TREX_Network.md b/applications/TREX_Network.md index 87473d81211..fdda5dba877 100644 --- a/applications/TREX_Network.md +++ b/applications/TREX_Network.md @@ -231,6 +231,10 @@ In the current stage, our first milestone is to deliver an early demonstration u At the next level, our second milestone is integrating the TOCW with our network under our particular consensus and mechanism. We will also implement key splitting as a third milestone to enhance the security and reliability of our system at the next level. Finally, our fourth milestone is the implementation of XCMP for cross-chain applications. +### Overview + +- **Total Costs:** 10,000 USD + ### Milestone 1 — Implement TREX network as a Polkadot para-chain From 9305043f2ee0c51b192a919ee367557821caff14 Mon Sep 17 00:00:00 2001 From: Doordashcon Date: Fri, 3 Feb 2023 13:15:06 +0100 Subject: [PATCH 036/665] Solidity Trie Verifier Implementation (#1486) * grant application * add sub implementations * milestone update * milestone num fix * milestone update * duration update --- applications/solidity-trie-verifier.md | 110 +++++++++++++++++++++++++ 1 file changed, 110 insertions(+) create mode 100644 applications/solidity-trie-verifier.md diff --git a/applications/solidity-trie-verifier.md b/applications/solidity-trie-verifier.md new file mode 100644 index 00000000000..6e058a31bfb --- /dev/null +++ b/applications/solidity-trie-verifier.md @@ -0,0 +1,110 @@ +# solidity-trie-verifier + +- **Team Name:** Polytope Labs +- **Payment Address:** 0xC70ac55B07A070743555C5D12B263733eCae9f92 (Ethereum DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +This project aims to deliver an implementation of the parity trie [verifier](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233) as required by state proof checking algorithms( [read_child_proof_check](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1102), [read_proof_check_on_proving_backend](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1128) ) in the Solidity programming language, which would include various sub implementations( for example [NodeCodec](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81) for both layoutv0 & layoutv1) required to build trustless bridging protocols from the Polkadot ecosystem to the EVM ecosystem. + +Goal: To create a primitive for more generalized bridging protocols like IBC, it is more efficient to verify Parachain state/storage than to use custom implementations which Darwina and Snowfork do. + +### Project Details + +#### APIs +```solidity +function VerifyProof(root bytes32, proof bytes[], keyValues KeyValue[]) public external returns (bool) + +struct KeyValue { + key bytes; + value bytes; +} +``` +#### Technology Stack +- Solidity + +## Team :busts_in_silhouette: + +### Team members + +- Seun Lanlege, +- Sam Omidiora, Femi Bankole + +### Contact + +- **Contact Name:** Jesse Chejieh +- **Contact Email:** jesse@polytope.technology +- **Website:** [research.polytope.technology](https://research.polytope.technology/) + +### Legal Structure +- **Registered Address:** Harneys Fiduciary (Cayman) Limited, 4th Floor, Harbour Place, 103 South Church Street, Cayman Islands +- **Registered Legal Entity:** Polytope Labs Ltd. + +### Team's experience + +Polytope Labs is a collective of core blockchain engineers, researchers & scientists from varying blockchain protocol backgrounds passionate about the proliferation of networks over platforms and enabling this future through blockchain research & education, tooling and core infrastructure development. + +- Seun Lanlege: Previously core developer at Parity Tech, Ethereum and Polkadot with over 4 years of industry experience, core contributor of the code utilized by the ecosystem who recently joined the [Polkadot fellowship program](https://github.com/polkadot-fellows/seeding/pull/33) and Mad Scientist at Polytope Labs. +- Sam Omidiora: Senior Blockchain Engineer with over four years of industry experience, previosly at [Aave](https://aave.com/), [Ambire](https://www.ambire.com/) and [Advanced Blockchain](https://www.advancedblockchain.com/) working with the solidity programming language and Lab Scientist at Polytope Labs. +- Femi Bankole: Blockchain engineer at [Matchx_iot](https://matchx.io/) + [MXC Foundation](https://www.mxc.org/) and Lab Intern at Polytope Labs. + + +### Team Code Repos + +- [Solidity Merkle Trees](https://github.com/polytope-labs/solidity-merkle-trees) +- [Simnode](https://github.com/polytope-labs/sc-simnode) +- [Prisma Client](https://github.com/polytope-labs/prisma-client-rs) + +### Team GitHub Profiles + +- [Seun Lanlege](https://github.com/seunlanlege/) +- [Sam Omidiora](https://github.com/samparsky) +- [Femi Bankole](https://github.com/iTranscend/) + +### Team LinkedIn Profiles + +- [Seun Lanlege](https://www.linkedin.com/in/seunlanlege/) +- [Sam Omidiora](https://www.linkedin.com/in/omidiora-samuel/) +- [Femi Bankole](https://www.linkedin.com/in/femibankole) + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 6 Weeks +- **Full-Time Equivalent (FTE):** 2.5 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 Implementation + +- **Estimated duration:** 6 Weeks +- **FTE:** 2.5 +- **Costs:** 30,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | A documentation on how to use this library in form of a README on the project repository. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that covers what was done/achieved as part of the grant. | +| 1 | Solidity SCALE Codec | This will include support for `enum{option/result}`, `Vec>` decoding and other types required for verifying state proofs as current implementations([Darwinia](https://github.com/darwinia-network/darwinia-messages-sol/blob/master/contracts/utils/contracts/ScaleCodec.sol), [Snowfork](https://github.com/Snowfork/snowbridge/blob/main/core/packages/contracts/contracts/ScaleCodec.sol)) don't support. +| 2. | KeyspacedDB | Provide the solidity implementation of the following; [https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L426](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L426). | +| 3. | MemoryDB | Provide the solidity implementation of the following; [https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L163](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/lib.rs#L163). | +| 4. | NodeCodec | Provide solidity implementation of the following; [https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81). | +| 5. | Node | Provide the solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L184](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L184). | +| 6. | NodePlan | Provide the solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L507](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L507). | +| 7. | NodeHeader | Provide the solidity implementation of the following; [https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_header.rs#L26](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_header.rs#L26). | +| 8. | NibbleSlicePlan | Provide the solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L454](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/node.rs#L454). | +| 9. | NibbleSlice | Provide the solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/nibble/mod.rs#L180](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/nibble/mod.rs#L180). | +| 10. | Layoutv0 | Provide the Solidity implementation of following; [https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L60](https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L60). | +| 11. | Layoutv1 | Provide the Solidity implementation of the following; [https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L63](https://github.com/paritytech/substrate/blob/ece32a72e934f6fe6705a7d418bbf3e71b4931ad/primitives/trie/src/lib.rs#L63) . | +| 12. | Trie Verifier | Provide the Solidity implementation of the following; [https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233). | + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website. From a238552bb9bf764eabd16607b3c7254274a93fa8 Mon Sep 17 00:00:00 2001 From: Ghan Vashishtha <74914749+gnv-zeeve@users.noreply.github.com> Date: Fri, 3 Feb 2023 17:45:35 +0530 Subject: [PATCH 037/665] Zeeve_zoombienet_deployment_testing_automation (#1399) * Create Zeeve_Parachain_deployment_zoombienet_testing_automation.md * Added mockups, technology stack and refine the deliverables as requested * url update for images * updated the milestones and grant scope * updated the milestones and grant scope * updated the milestones and grant scope * removing artical from 1st milestone --------- Co-authored-by: arjun.chamyal --- ...eployment_zoombienet_testing_automation.md | 273 ++++++++++++++++++ 1 file changed, 273 insertions(+) create mode 100644 applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md diff --git a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md new file mode 100644 index 00000000000..482003617f4 --- /dev/null +++ b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md @@ -0,0 +1,273 @@ + +# larch - Zombie-net Automation + +- **Team Name:** [Zeeve](https://www.zeeve.io) + +- **Payment Address:** Ethereum (USDT/USDC) 0x5E1257E928aa42E3D0cd9E2A7537E37D108D811B + +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +### Overview + +Blockchain adoption is happening at a very rapid rate, with a lot many use cases being implemented and seeing the light of the day. The concept of the parachain enables the possibilities further. While we focus on building the use cases, code them and implement the business logic of it, including the creation of Parachain and then further logic running upon it, we majorly underestimate the DevOps activity to deploy, maintain, scale and manage the parachain itself. This includes initial launch of the parachain, its thorough testing using Zombie-net and scaling it further by providing support for users to create and deploy validator, full and archive nodes with ease as well as to have secure RPC endpoints. The most deficit we see is around advanced analytics and proactive monitoring to ensure a production grade incident management of networks and nodes. + +### Project Details + +Zeeve will provide a GUI tool to setup the new Substrate zombie-net network with in-depth and flexible configurations in few clicks supporting K8 and native VMs whichever fits the parachains better. + +A GUI will be built to allow a quick setup of the relaychain, parachain with zombie-net with the desired capabilities to test multiple configurations. This in turn will allow the developers and parachain teams to try multiple chain configurations while setting up the parachains with Zombie-net, as well as to choose different nodes to try and test for the best possibilities on the parachain. + +This not only will allow configurations on the parachain side but will also allow you to pick from a set of predefined DSL templates on Zombie-net as well as upload the new templates without needing to write the code. The graphical control panel will support all the other configurations or operations required to enable the developer or parachain team to test with as much flexibility as required. These operations include: + +- Restart - after x seconds, will stop the `process` and start again after the `x`amount of seconds or immediately. +- Stop - will pause (SIGSTOP) the process) +- Resume - will pause (SIGCONT) the process) +- Sleep - will allow config to sleep the test-runner for `x` ammount of seconds) + +**Test result and logs** + +The interface will allow the developer to test and see live logs of the test run, post run results and logs on the aforementioned interface. Furthermore, a stack of Prometheus and Grafana will allow easy monitoring of the Zombie-net. + +**Templating** + +The control panel will also allow the developer or the parachain team to one-click replicate one of the existing zombie-net configurations, save as template or pick from previously saved template and re-create a new test with some rapid tweaks to it. + + + +## Team :busts_in_silhouette: + +### Team members + +- Ghan Vashishtha + +- Sankalp Sharma + +- Arjun Chamyal + +- Rahul Meena + + + +### Contact + + + +- **Contact Name:** Ghan Vashishtha + +- **Contact Email:** ghan@zeeve.io + +- **Website:** www.zeeve.io + + + +### Legal Structure + + + +- **Registered Address:** 1603 Capitol Ave Ste 310, Cheyenne 82001, WY + +- **Registered Legal Entity:** Zeeve Inc. + + + +### Team's experience + + + +Founded by a team of experienced professionals and enterprenuers from industry, Zeeve's cofounders collectively have over 45+ years of experience in technology, product development, and various business verticals. Zeeve has built an enterprise-grade no-code Blockchain Infrastructure Automation platform that enables Enterprises, Blockchain Startups, Blockchain Consulting Companies and Web3 Developers to deploy Blockchain nodes and Decentralised Apps within minutes, and manage them with advanced analytics and real-time alerts. In June 2022, the Startup raised $2.65 Million in a Seed Round from Leo Capital and Blu Ventures. It plans to deploy the funds towards product development, augmenting the technology team and enhancing its reach among DApp developers and global corporations, please consider visiting our prior [work](https://www.zeeve.io/platform). + + + +### Team Code Repos + +- https://github.com/Zeeve-App + +- https://github.com/Zeeve-App/sawtooth-artifacts + +- https://github.com/Zeeve-App/Zeeve-read-the-docs + + + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + + + +- https://www.zeeve.io/about-us + + + +### Team LinkedIn Profiles (if available) + + + +- https://www.linkedin.com/in/ghan-vashishtha/ + +- https://www.linkedin.com/in/sankalp-sharma-502008139/ + +- https://www.linkedin.com/in/arjun-chamyal-a4466086/ + +- https://www.linkedin.com/in/rahul-m-0ba16487/ + + + +## Development Status :open_book: + + + +Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps automation for Polkadot and other substrate chains, also created substrates based relay chains: + + + +- Automated Polkadot deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-polkadot-node/) + +- Automated Kusama deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-kusama-node/) + +- Created a relay chain on substrate with some customisations done at the core to accomodate the tokenomics and custom reward mechanism [here](https://axscan.axiacoin.network/#/explorer) + +- Published a [blog post](https://www.zeeve.io/blog/how-to-use-substrate-to-create-parachains-in-polkadot/) about the usage and omlememtation of praachains + +- The focus for Zeeve will be automating the parachain deployments, dedicated node setups and help with faster testing with zombie-net. + +- Spoke with David Hawig, Richard Casey and Gautam Dhameja from the Parity team regarding the development of Zeeve and the Web3 Grant application + + + +## Development Roadmap :nut_and_bolt: + + + +### Overview + + + +- **Total Estimated Duration:** 2 months + +- **Full-Time Equivalent (FTE):** 4 FTE + +- **Total Costs:** 30,000 USD. + + + +### Milestone 1 — Implement Core Zombie-net Automation + + + +- **Estimated duration:** 40 days + +- **FTE:** 4 + +- **Costs:** 20,000 USD + + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) create a new Substrate based Zombie-net nodes and initiate testing, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker/Cluster | We will provide a Dockerfile(s)/Cluster Yaml(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Initial Automation | We will build the core GUI driven automation to create and deploy the substrate based Zombie-net configurations including relaychain and parachain configurations. | +| 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start wtih parachain setup for the desired Zombie-net | +| 3. | Node type support | Implement setup of all node types including Full node, Validator node and Collator node for the respective relay chain and parachain within the configured Zombie-net. | +| 4. | Cloud agnostic setup | The larch setup will be cloud agnostic and it can be installed on the choice of cloud, instructions and documentation will be provided for the same. | +| 5. | User management | The larch will allow to setup different users with desired permissions and access controls such as add, delete zombie-net, view, delete logs and save, delete templates. | + + + + + +### Milestone 2 — Monitoring + + + +- **Estimated Duration:** 20 days + +- **FTE:** 2 + +- **Costs:** 10,000 USD + + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) create a new Zombie-net, test and setup monitoring for it, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker/Cluster | We will provide a Dockerfile(s)/Cluster Yaml(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | Using our PR channels, we will publish an **article** that explains the high-level overview of automation as part of the grant, followed by a set of extensive examples. | +| 1. | Design monitoring strategy | The Zombie-net doesn't provide any embedded monitoring tool, we will with the zombie-net setup automation, automatically setup prometheus and Grafana while configuring the zombie-net. | +| 2. | Setup Dashboard | The deployment done for Prometheus and Grafana will show standard Dashboard having system resource and zombie-net specific details shown on the aforementioned Grafana GUI Dashboard. | +| 3. | Activity | The system will log all the activities and operations perform by the different users. | + +## Application Mockup + + + +Following are the mockups for high-level application operations, these are subject to change during development basis the requirement and behaviour. + + + +### Dashboard + +![Dashboard](https://larch.zeeve.net/images/Dashboard.png) + +### Zombie-net network list +![List all created Zombie networks](https://larch.zeeve.net/images/My-Networks.png) + +### Create a new Zombie-net + +![Zombie-net Settings](https://larch.zeeve.net/images/Create-Networks-Settings.png) + +![Zombie-net Relaychain Configuration](https://larch.zeeve.net/images/Create-Networks-Relaychain-Configuration.png) + +![Zombie-net Parachain configuration](https://larch.zeeve.net/images/Create-Networks-Parachain-Configuration.png) + +![Zombie-net Collator configuration](https://larch.zeeve.net/images/Create-Networks-Collator-Configuration.png) + +![Zombie-net HRMP configuration](https://larch.zeeve.net/images/Create-Networks-HRMP-Channels.png) + +### Relaychain, Parachain, specfile and WASM templates + +![Zombie-net Configuration templates](https://larch.zeeve.net/images/Templates-Configuration.png) + + + +![Zombie-net WASM image templates](https://larch.zeeve.net/images/Templates-Managment.png) + + + +### User activity and operation history + +![User activity and operation history](https://larch.zeeve.net/images/Activity.png) + +## Technology Stack + +- ReactJS + +- NodeJS + +- Apache/Nginx + +- TailwindCSS + +- System Scripts + +- Kubernetes/Podman/Docker + +- Prometheus, Grafana, Telegraph + +## Future Plans + +- We will promote the project by giving talks in the community, writing tutorials and videos. + +- We will spread the project in Zeeve's developer and client community of 15K+ + +- We will also work closely with the developers and clients of the Parity ecosystem for getting feedback and refine our project. + +- Our long-term plan is to make the tool become one of the default Parachain tools for the Parity ecosystem. + +- We will also add more followup, integration with the Zeeve enterprise platform allowing more flexibility for enterprises to built and deploy use case or application specific parachains. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Parity team / a conversation with Richard Casey. From 311a9c966f2d58631b8e48c5fb07cc336b49ef10 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 3 Feb 2023 13:19:04 +0100 Subject: [PATCH 038/665] Update index.md Add Zeeve --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 6331c34b73e..e648505ad55 100644 --- a/applications/index.md +++ b/applications/index.md @@ -600,3 +600,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | From d78db2c056b8829dcd4652ad85c2437661d6b930 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 3 Feb 2023 13:22:13 +0100 Subject: [PATCH 039/665] Update index.md Trie Verifier Implementation --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index e648505ad55..b4f81c109c1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -601,3 +601,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | From c2b7a2cb15a722fe53fa9e64902aa0b43b0279a3 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 4 Feb 2023 09:06:55 -0500 Subject: [PATCH 040/665] Update index.md (#1505) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b4f81c109c1..7f8b392a8c1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -563,7 +563,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | -| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☐ | ☐ | +| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☐ | ☐ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | From 0ec9afa8ba0374b7c17e28397f48a2786b6dc9d3 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 6 Feb 2023 01:55:18 -0800 Subject: [PATCH 041/665] Update sol2ink-follow-up.md (#1510) Fix format (see https://github.com/w3f/Grant-Milestone-Delivery/pull/729) --- applications/sol2ink-follow-up.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/applications/sol2ink-follow-up.md b/applications/sol2ink-follow-up.md index 6b7dad5da55..8546ed43c3f 100644 --- a/applications/sol2ink-follow-up.md +++ b/applications/sol2ink-follow-up.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Sol2Ink -- **Project Name:** Sol2Ink - **Team Name:** [727.ventures](https://github.com/727-Ventures) - **Payment Address:** ERC 20 ADDRESS (DAI): 0x352F779203202c99699CdA8cc95adF06CcC8abEf From 050dc5c26fdd9e08d3db939102604f6044e4065d Mon Sep 17 00:00:00 2001 From: Matej yangwao <5887929+yangwao@users.noreply.github.com> Date: Mon, 6 Feb 2023 14:29:47 +0100 Subject: [PATCH 042/665] Fixed Case sensitive links (#1513) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d96228080be..84a7e7eea9e 100644 --- a/README.md +++ b/README.md @@ -191,7 +191,7 @@ If you have an idea for a project or would like to highlight an area in which yo Ideas generally have better chances of being implemented if they're presented in a project outline format that can be picked up straight away by a team, so if you have a good concept of the milestones required to bring your project to life, you can follow the process below and directly submit an RFP: 1. [Fork](https://github.com/w3f/Grants-Program/fork) this repository. -2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/rfps) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ +2. In the newly created fork, create a copy of the suggestion template ([`RFPs/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/RFPs/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. From 00d30df9df596c860c62306771a63f05376343d9 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 6 Feb 2023 10:30:25 -0300 Subject: [PATCH 043/665] Update index.md (#1512) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7f8b392a8c1..d198453a116 100644 --- a/applications/index.md +++ b/applications/index.md @@ -548,7 +548,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | -| [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | From 620d1106d5a2381ee36312d752d21dec19a83b20 Mon Sep 17 00:00:00 2001 From: Bhargav Bhatt <40268131+bhargavbh@users.noreply.github.com> Date: Mon, 6 Feb 2023 15:31:18 +0100 Subject: [PATCH 044/665] RFP: Static Analysis of Runtime Pallets (#1511) * describe vulnerabilities and add deliverables * updated deliverables * Update Static-Analysis-for-Runtime-Pallets.md fix links --------- Co-authored-by: David Hawig --- .../Static-Analysis-for-Runtime-Pallets.md | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md diff --git a/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md b/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md new file mode 100644 index 00000000000..f3412e9dfc4 --- /dev/null +++ b/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md @@ -0,0 +1,28 @@ +# Static Analysis of Runtime Pallets +* **Status:** Open +* **Proposer:** [Bhargav Bhatt](https://github.com/bhargavbh), [David Hawig](https://github.com/Noc2) + +## Project Description :page_facing_up: + +[Runtime Pallets](https://docs.substrate.io/fundamentals/runtime-development/) are modules for writing the business logic of blockchains in [Substrate](https://github.com/paritytech/substrate) (a Rust framework fo rbuilding blockchians). These are usually concise pieces of standalone code with relatively few dependencies and clear specifications, hence tractable targets for performing static analysis and verification. We would like to develop tools and techniques to perform static analysis with reasonable soundness guarantees. In particular, we would like to target vunerability classes that are detectable using dataflow analysis techniques like *tag analysis* and *taint analysis*. Just to give a flavor, relevant might vulnerabilities include: +* [incorrect origin](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/incorrect-origin/description.md) of dispatchable functions. +* [unsigned transaction](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/unsigned-transaction/description.md) validation. +* tracking bad randomness: ensure bad randomness does not leak into sensitive functions. +* detect panics statically to avoid potential DoS attacks: these include [unsafe arithmetic operations](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/arithmetic-overflow/description.md), access outside bounds, assertion failures, etc. +* tracking unsanitised input leakage for sensitive functions. + +We seek applications that either extend existing static analysers for rust like [MIRAI](https://github.com/facebookexperimental/MIRAI/), [Prusti](https://www.pm.inf.ethz.ch/research/prusti.html), or build Rust front-ends to static analysis engines. Our preliminary feasibility study shows that MIRAI would be a good starting point as it includes a tag analysis framework, however, we are open to other tools and techniques. + +## Deliverables + +The deliverables listed are an innitial draft and can be modified taking into consideration the interests of the applicant. + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 0a. | License | Apache 2.0 / MIT / Unlicense | +| 0b. | Documentation | A document describing the design decisions for the tool and modeling of vulnerabilities. Clear usage guideline along with the trade-off of different modes if any.| +| 0c. | Testing Guide | Test-suite which exercises various features. | +| 0d. | Article | A brief outreach article describing the high-level technique used and outcomes of the grant, including asample of minimal examples. | +| 1 | Tool | A robust static analysis tool that works on Subsstrate runtime pallets and analyses vulnerabilities classes described above. | +| 2 | Engaegment | Engage with teams at Web3 Foundation and Parity to prioritise targeting vulnerability classes.| + From 846fface670acfc56e80a4cb96e55245890a7311 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 6 Feb 2023 15:33:56 +0100 Subject: [PATCH 045/665] Update rfps.md Add Static-Analysis-for-Runtime-Pallets.md --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index c2deeec56e8..b70f6f44f60 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -56,6 +56,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | | [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🟡 | 05.07.2021 | | [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | From a4c5f1169288963602a097871533a0005dea624f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 6 Feb 2023 15:34:44 +0100 Subject: [PATCH 046/665] Update rfps.md Fix link --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index b70f6f44f60..5c676404a5a 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -56,7 +56,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | | [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🟡 | 05.07.2021 | | [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | -| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | From 775ba86e90e84137f48adc1a2af3cf005e5e93b5 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Mon, 6 Feb 2023 12:51:35 -0500 Subject: [PATCH 047/665] Update suggesting.md (#1515) --- docs/suggesting.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/suggesting.md b/docs/suggesting.md index 27c6606e585..f5fa3c0d74b 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -16,9 +16,9 @@ If you have an idea for a project or would like to highlight an area in which yo Ideas generally have better chances of being implemented if they're presented in a project outline format that can be picked up straight away by a team, so if you have a good concept of the milestones required to bring your project to life, you can follow the process below and directly submit an RFP: 1. [Fork](https://github.com/w3f/Grants-Program/fork) this repository. -2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/web-test-branch/docs/rfps/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/blob/web-test-branch/docs/rfps/) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/web-test-branch/docs/rfps/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ +2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md)) inside the [`rfps`](https://github.com/keeganquigley/Grants-Program/tree/master/docs/RFPs) folder. Make sure you create a new file and copy the [contents](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. -6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/web-test-branch/.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). +6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](./Introduction/team.md#w3f-grants-committee) members. From bb2408ea1d82e15cd706cdc854a1e64281de6bc1 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Mon, 6 Feb 2023 13:01:14 -0500 Subject: [PATCH 048/665] Update suggesting.md (#1516) --- docs/suggesting.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/suggesting.md b/docs/suggesting.md index f5fa3c0d74b..90a4f0c934d 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -20,5 +20,5 @@ Ideas generally have better chances of being implemented if they're presented in 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. -6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md). +6. You will see the same template as for creating an application. Please replace it with [the RFP PR template](https://github.com/w3f/Grants-Program/blob/master/.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](./Introduction/team.md#w3f-grants-committee) members. From 63a225b45ca1c87b24012208c2a5b8252f1a836e Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Tue, 7 Feb 2023 03:29:43 -0500 Subject: [PATCH 049/665] Anagolay Project Idinayale Completed (#1514) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d198453a116..c463c896b6a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -544,7 +544,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | -| [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☐ | +| [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | From 9ff6073d6cc991b20e1663e7067149890621eb13 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 7 Feb 2023 09:56:10 +0100 Subject: [PATCH 050/665] Update rfps.md Add treasury funding as an option for RFPs --- docs/rfps.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index 5c676404a5a..7a947c1b4ae 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -12,9 +12,9 @@ title: Requests for Proposals ## :grey_question: What is an RFP? -An RFP (Request for Proposals) is a declaration of interest for others to submit a grant application regarding a specific project. They usually revolve around issues that the author (often someone from our team, but [anyone can suggest one](suggesting.md)) deems useful and missing or unsolved in our ecosystem. +An RFP (Request for Proposals) is a declaration of interest for others to submit a grant or a treasury application regarding a specific project. They usually revolve around issues that the author (often someone from our team, but [anyone can suggest one](suggesting.md)) deems useful and missing or unsolved in our ecosystem. -If you find an open RFP here that you think you can address, feel free to [submit a grant application](process.md). There is a [section in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md#project-overview-page_facing_up) where you can reference the RFP you are addressing. +If you find an open RFP here that you think you can address, feel free to [submit a grant application](process.md). There is a [section in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md#project-overview-page_facing_up) where you can reference the RFP you are addressing. Alternatively, you can always submit an on-chain treasury application for an RFP. ## 📜 List of RFPs From a0bf6bef92104a1272b5800294ab9f9c618978dd Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 7 Feb 2023 06:06:34 -0800 Subject: [PATCH 051/665] Update check_application_document.yml (#1518) Minor fix --- .github/workflows/check_application_document.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index 7d82a6619da..155b519d6ea 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -3,7 +3,7 @@ name: Check application document on: workflow_dispatch: pull_request: - types: [opened] + types: [opened, edited] jobs: get_filename: From 334dc613e05d910cdef70f9a0cc2426c4731e454 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 8 Feb 2023 06:34:26 -0800 Subject: [PATCH 052/665] Update ArtZero_InkWhale.md (#1520) Fix formatting --- applications/ArtZero_InkWhale.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/applications/ArtZero_InkWhale.md b/applications/ArtZero_InkWhale.md index d69a849fe9a..7bcd22fc528 100644 --- a/applications/ArtZero_InkWhale.md +++ b/applications/ArtZero_InkWhale.md @@ -1,9 +1,8 @@ -# W3F Grant Proposal +# ArtZero & InkWhale -- **Project Name:** ArtZero & InkWhale - **Team Name:** ArtZero - **Payment Address:** 1scixS3ofLuBN8XEQQdSjMQaLtvvbcJiQAqpnaov8xopX78 -- **[Level]:** 2 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From 7499f801ab80651215ed4c623a082f12b5950c99 Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Wed, 8 Feb 2023 09:35:07 -0500 Subject: [PATCH 053/665] Tuxedo application (#1517) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * start the tuxedo application Correct reference to dag chains ecosystem fit Development status First draft milestones future plans No referrer Additional info Andrews background bio Not competing with frame spelling introduce concept of peeking Mention Shawn's support Shorten the timeline (we have more availability than previously expected Settle on Apache license restructure milestones based on informal feedback Follow-up to b8a7df51 grammar switch to dai * Update applications/tuxedo.md Co-authored-by: Sebastian Müller * Details about CLI wallet tech stack * Update applications/tuxedo.md Co-authored-by: Matteo Casonato --------- Co-authored-by: Sebastian Müller Co-authored-by: Matteo Casonato --- applications/tuxedo.md | 185 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 185 insertions(+) create mode 100644 applications/tuxedo.md diff --git a/applications/tuxedo.md b/applications/tuxedo.md new file mode 100644 index 00000000000..bc0664d8950 --- /dev/null +++ b/applications/tuxedo.md @@ -0,0 +1,185 @@ +# Tuxedo + +- **Team Name:** Off-Narrative Labs +- **Payment Address:** 0x5a335908df9D2C47304338E3b744579Ed7C6a64d (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 :baby_chick: + +## Project Overview :page_facing_up: + +Develop Substrate runtimes based on the UTXO model. + +### Overview + +Tuxedo is a framework for developing Substrate runtimes based on the Unspent Transaction Output (UTXO) model. The letters utxo are contained in the word tuxedo, hence the name. + +In the broader blockchain space, there are essentially two models for creating state machines, or runtimes, as they are known in the Substrate ecosystem. Those two models are the **Account System** as seen in Ethereum, Polkadot, and others, and the **UTXO System** as seen in Bitcoin, Monero, Cardano, and others. Currently the defacto way to write Substrate runtimes is with FRAME, which is based on the account system, and any project wishing to build on the utxo system is left to write a runtime from scratch or find a home in another ecosystem. Tuxedo would be a couterpart to FRAME based on UTXOs rather than accounts. + +Tuxedo would make the UTXO model more visible and accessible in the Substrate ecosystem and begin to create a diversity of runtime frameworks in addition to FRAME, a trend that we hope will continue beyond Tuxedo itself. + +### Project Details + +The primary advantage of UTXOs is that they are highly parallelizable. This fits well in Polkadot's multichain ecosystem where parachains execute and communicate asynchronously, and will be an even bigger advantage if (hopefully when) DAG based chains become popular, a trend that is already kicked off with projects like Aleph Zero, and many others outside the Polkadot ecosystem, including Hedera Hashgraph, Nano, and Casper Labs. + +The UTXO data model is relatively well established by Bitcoin as well as research from IOHK in their [Abstract Model](https://eprint.iacr.org/2018/469.pdf) and [Extended UTXO Model](https://files.zotero.net/eyJleHBpcmVzIjoxNjc1MjAwMTAwLCJoYXNoIjoiYTVhYmY4NjdiY2E2YzdkNTNjODkwNWNmZDZhYmM5MjAiLCJjb250ZW50VHlwZSI6ImFwcGxpY2F0aW9uXC9wZGYiLCJjaGFyc2V0IjoiIiwiZmlsZW5hbWUiOiJDaGFrcmF2YXJ0eSBldCBhbC4gLSAyMDIwIC0gVGhlIEV4dGVuZGVkIFVUWE8gTW9kZWwucGRmIn0%3D/ddc74b205ca4890fe1d87770bee15dd5a82bfed1ad8f84217cbf407686958498/Chakravarty%20et%20al.%20-%202020%20-%20The%20Extended%20UTXO%20Model.pdf). Our primary tasks would be to implement this in Rust and expose a standard API for chain developers to build on. This is analogous to the API exposed by FRAME System and the Pallets built on top. + +Our core data types follow similarly, to the IOHK research cited above. The primary differences are that we do not assume a native cryptocurrency and rely on Tuxedo **Pieces** (analogous to FRAME Pallets) to provide the validation logic, rather than the UTXOs themselves. + +```rust +/// A UTXO transaction specifies some inputs to be consumed, and some new outputs to be created. +struct Transaction { + /// The inputs refer to currently existing unspent outputs that will be consumed by this transaction + inputs: BTreeSet, + /// Similar to inputs, Peeks refer to currently existing utxos, but they will be read only, and not consumed + peeks: BTreeSet, + /// The new outputs to be created by this transaction. + outputs: Vec, +} + +/// A single output of a transaction which has an owner and some associated data +struct Output { + /// The address that owns this output. Based on either a public key or a Tuxedo Piece + owner: Address, + /// The data associated with this output. In the simplest case, this will be a token balance, but could be arbitrarily rich state. + data: Vec, +} + +/// A single input references the output to be consumed or peeked at and provides some witness data, possibly a signature. +struct Input { + /// A previously created output that will be consumed by the transaction containing this input. + output: OutputId, + /// A witness proving that the output can be consumed by this input. In many cases including that of a basic cryptocurrency, this will be a digital signature. + redeemer: Vec, +} +``` + +The core of the API exposed developers who create Tuxedo Pieces, will roughly follow this trait. We expect this will have to get more specific as our development shows us what we haven;t yet considered. + +```rust +/// The API of a Tuxedo Piece +trait TuxedoPiece { + + /// The type of data stored in Outputs associated with this Piece + type Data; + + /// The validation function to determine whether a given input can be consumed. + fn validate(transaction: Transaction, input: Input) -> bool; +} +``` + +This grant does not strive to create the entire rich ecosystem of Tuxedo pieces that we hope to eventually be developed on top of Tuxedo. Rather it strives to create the core of the Tuxedo system and a few of the most important and exemplary pieces. Specifically, we strive to develop the analogs to FRAME Executive, FRAME System, Pallet Balances, and Pallet Transaction Payment. + +### Ecosystem Fit + +Tuxedo is a framework for writing Substrate runtimes. Substrate is the toolkit for building virtually all parachain nodes as well as many standalone blockchains. As such, Tuxedo provides a richer set of options to runtime developers, and hopes to attract teams to the Substrate / Polkadot ecosystem who may have otherwise gone elsewhere. + +The primary users of Tuxedo will be parachain and runtime developers who will use Tuxedo directly to structure their runtimes. Of course, the user base will trickle downstream as well to users of those parachains that choose to build with Tuxedo. However, chain users will use Tuxedo only indirectly. + +There are no projects like this in the Substrate ecosystem, although they do exist in the broader blockchain space; Cardano being the most notable example. + +While it fulfills a similar role, Tuxedo is not intended to compete with FRAME, but rather to compliment it, by welcoming projects that fit naturally with the utxo model into the Substrate ecosystem, as FRAME does for projects that fit the accounts model. + +## Team :busts_in_silhouette: + +### Team members + +- Joshy Orndorff https://github.com/JoshOrndorff +- Andrew Burger https://github.com/coax1d + +### Contact + +- **Contact Name:** Joshy Orndorff +- **Contact Email:** joshyorndorff at proton dot me +- **Registered Address:** The address you'll use in the invoices + +### Team's experience + +Joshy entered the Substrate ecosystem in 2019 as part of the Substrate Developer Hub team. There he created and hosted the weekly Substrate Seminar, and contributed significantly to the Substrate Recipes. In 2020, he moved to the Moonbeam team where he was a core developer. While at Moonbeam, Joshy wrote the [Nimbus consensus engine](https://github.com/PureStake/nimbus/) which is used in several production parachains, and helped pioneer the technique whereby EVM contracts can interact with native Substrate pallets. In 2022, Joshy began contributing to the Polkadot Blockchain Academy, teaching in both Cambridge and Buenos Aires. + +Andrew entered the Substrate ecosystem from a curiosity point of view back in June 2021. From there he learned blockchain and Substrate via documents and tinkering in his off time after work. In December 2021 received a fulltime job for a venture builder to build a parachain to eventually connect to Polkadot. Andrew graduated from the first Polkadot Blockchain Academy cohort in 2022 in Cambridge. After Cambridge Andrew moved on from the venture builder to dive into education in the Polkadot Ecosystem by instructing and developing course curriculum for the Polkadot Devcamp #2 online. For Andrew's current work he is contracting as an instructor at the Polkadot Blockchain Academy for Parity Technologies lecturing and creating educational content for Blockchain Fundamentals(Specifically lecturing on UTXO vs Accounts models), Substrate, and XCM modules. Also Andrew is doing Rust Core development work for the Integritee Parachain. Andrew shares a passion for allowing blockchain developers the ability to build upon the UTXO model in Substrate. + + +Joshy and Andrew met in Cambridge in 2022 at the first Polkadot Blockchain Academy. There Andrew chose the Frameless UTXO Project cited above as his final project. + + +## Development Status :open_book: + +The team has done previous work on this topic: +* Joshy [maintained](https://github.com/JoshOrndorff/utxo-workshop/tree/joshy-update-deps-may-2022) the Substrate UTXO Workshop code as part of the Substrate Developer Hub team, and has continued to maintain it out of personal interest even years after leaving that team. +* Andrew [ported](https://github.com/coax1d/utxo-frameless/) this code to work _without FRAME_ as part of the Polkadot Blockchain Academy. + +The development so far has focused specifically on the crypto_currency_ use case, whereas this grant proposes to generalize the code to be a framework for broader runtime logic development. + +As teaching staff at the Polkadot Blockchain Academy in Buenos Aires, Joshy and Andrew found themselves, on two occasions, in conversations with other teaching staff in which it was noted that a diversity of runtime development frameworks would make the Substrate ecosystem stronger and attractive to a broader development base. This idea was supported by Kian Paimani and Shawn Tabrizi among others. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 9 weeks +- **Full-Time Equivalent (FTE):** 1.5 FTE (Joshy and Andrew will both work roughly three quarters time on this) +- **Total Costs:** $30,000 (USD) + +### Milestone 1 — Tuxedo Core and Cryptocurrency Piece + +- **Estimated duration:** 3 weeks +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Split the existing FRAMEless UTXO project into the generic Tuxedo core, and the first Tuxedo piece which represents a cryptocurrency. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the example node and transfer tokens | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 1. | Tuxedo Core | We will create the core of the Tuxedo System, analogous to FRAME Executive and FRAME System | +| 2. | Token Piece | We will create the first Tuxedo piece that serves as a cryptocurrency, analogous to Pallet Balances | +| 3. | Tuxedo Node Template | We will create a Substrate node with the runtime built with Tuxedo and including the Token piece. Together this will represent a bitcoin-like token (not PoW though, only the token logic is bitcoin-like) | + +### Milestone 2 — Wallet and Multisig + +- **Estimated Duration:** 3 weeks +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Create the second Tuxedo piece, and a user-facing wallet + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the example node and transfer tokens | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 1. | User Wallet | We will create a CLI wallet that users can use to track their tokens in a Tuxedo-based cryptocurrency. This makes the example node actually useable by common users who are curious to explore but not yet ready to dig into the code. The wallet will be written in Rust and communicate with Substrates jsonrpsee endpoint. | +| 2. | Multisig Piece | We will expand the ecosystem of Tuxedo pieces by creating a multisig wallet. In addition to making the Tuxedo ecosystem a bit more complete, this also demonstrates to future piece developers how to couple pieces. | + +### Milestone 3 — Full Docs and Tutorial + +- **Estimated Duration:** 3 weeks +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Fully document the Tuxedo paradigm, existing pieces, CLI wallet, and provide a tutorial for runtime developers + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the example node and transfer tokens | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Full written and Video Tutorial | With a node template, piece template, and user-facing wallet now complete, we can get serious about user and developer documentation. We will create a full written tutorial and video walkthough that covers how to build and run the Tuxedo Node Template, and send tokens around with the wallet. We will then dive into how to add the multisig piece to your runtime, and how to develop your own simple piece starting from the piece template. | +| 1. | Piece Template | We will create the template Tuxedo Piece analogous to the FRAME pallet template. This will allow runtime developers to have a concrete starting place when building their own utxo based Substrate runtimes. | + + +## Future Plans + +Being a framework for runtime development, we plan to continue developing the ecosystem of Tuxedo Pieces including Pieces for NFTs, Governance Mechanisms, Proof of Stake, and even smart contracts. + +Joshy has long had a vision of a UTXO based smart contract language based on the pi calculus. With Tuxedo core complete, it will be possible to develop such a contracting platform. + +The UTXO model allows concurrent processing of unrelated transactions (those that do not compete to consume any inputs). It would be exciting to extend Substrate itself to support a DAG structure rather than a linear chain to take advantage of this ability, although the feasibility of this extension has not yet been studied. + +## Additional Information :heavy_plus_sign: + +The team has been in the Substrate ecosystem for a long time, so we have heard of the grants program in many ways. From colleagues, grant recipients speaking highly the program, and grant recipients looking for help understanding Substrate. From 6963e04b3b95bc99ce34e28e1bdd928cb20ce16f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 8 Feb 2023 15:38:29 +0100 Subject: [PATCH 054/665] Update index.md Tuxedo --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index c463c896b6a..6997c63bc8c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -602,3 +602,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | From 088ec0a853f2dc5825a74ea704e930c01854da82 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 9 Feb 2023 02:15:57 -0500 Subject: [PATCH 055/665] Update index.md (#1521) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 6997c63bc8c..fc215ab95b6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -569,7 +569,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | -| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☐ | ☐ | +| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☐ | ☐ | From 60e00eecb84673af73938e012facdbe88917fbed Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 9 Feb 2023 02:26:03 -0800 Subject: [PATCH 056/665] Fix maintenance format (#1522) - edit template (added Level) - fix formatting of existent applications --- maintenance/Substratesnap_Maintenance.md | 7 +------ maintenance/maintenance-template.md | 4 ++-- maintenance/wasm-opt-for-rust.md | 4 ++-- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/maintenance/Substratesnap_Maintenance.md b/maintenance/Substratesnap_Maintenance.md index a2dfcb001d5..2757bd78e29 100644 --- a/maintenance/Substratesnap_Maintenance.md +++ b/maintenance/Substratesnap_Maintenance.md @@ -1,12 +1,7 @@ # SubstrateSnap Maintainance Grant Proposal - - -- **Project Name:** SubstrateSnap - **Team Name:** ChainSafe Systems -- **Payment Details:** DAI (ERC20) - **Address**: 0x85D81Ab61Fe16CDcaeF2Ca556ED4577A51b9b07C (DAI) -- Network +- **Payment Address:** 0x85D81Ab61Fe16CDcaeF2Ca556ED4577A51b9b07C (DAI ERC20) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 diff --git a/maintenance/maintenance-template.md b/maintenance/maintenance-template.md index feeec25304c..742bfd8b913 100644 --- a/maintenance/maintenance-template.md +++ b/maintenance/maintenance-template.md @@ -1,12 +1,12 @@ -# W3F Maintenance Grant Proposal +# Project Code Name (e.g. JsonRPC Tools Maintenance) > This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a `>` (such as this one) can be removed. > > See the [Maintenance Grants Process](https://github.com/w3f/Grants-Program#hammer_and_wrench-maintenance-grants) on how to submit a proposal. -- **Project Code Name:** Code name of the project (e.g. JsonRPC Tools Maintenance) - **Team Name:** Legal name of your team (e.g. JsonCorp) - **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (aUSD/USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* diff --git a/maintenance/wasm-opt-for-rust.md b/maintenance/wasm-opt-for-rust.md index 4998df353bf..2e85b3a7b77 100644 --- a/maintenance/wasm-opt-for-rust.md +++ b/maintenance/wasm-opt-for-rust.md @@ -1,8 +1,8 @@ -# W3F Maintenance Grant Proposal +# `wasm-opt` for Rust Maintenance -- **Project Code Name:** `wasm-opt` for Rust Maintenance - **Team Name:** Common Orbit LLC - **Payment Address:** (Ethereum DAI) 0x2de31E52E24Df0588C64B27657D4F75e5462adEf +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 ## Project Overview :page_facing_up: From 62b0fb481f28d72a1bab505e6e71af18969a6713 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 9 Feb 2023 02:31:40 -0800 Subject: [PATCH 057/665] Fix applications format (#1523) (remove **Project Name**) --- applications/Maki.md | 6 ------ applications/MangoSale_Protocol.md | 6 +----- applications/MeProtocol.md | 3 +-- applications/Zombienet-Explorer.md | 3 +-- applications/decentralized_invoice.md | 3 +-- applications/ink-pallet-benchmarking.md | 4 ++-- applications/ipfs_utilities.md | 3 +-- applications/typechain-polkadot-follow-up-2.md | 5 +---- applications/typechain-polkadot-follow-up.md | 7 ++----- 9 files changed, 10 insertions(+), 30 deletions(-) diff --git a/applications/Maki.md b/applications/Maki.md index 0ef7094a179..97771db5e8f 100644 --- a/applications/Maki.md +++ b/applications/Maki.md @@ -1,11 +1,5 @@ -<<<<<<< HEAD -# W3F Grant Proposal - -- **Project Name:** Maki -======= # Maki ->>>>>>> origin/master - **Team Name:** Cyril Carlier (Individual) - **Payment Address:** 0x7e575d2140aa4b723ac2014d5627330a7ed514d4 (ERC-20 USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 diff --git a/applications/MangoSale_Protocol.md b/applications/MangoSale_Protocol.md index 62c0fae7466..6619478bfe4 100644 --- a/applications/MangoSale_Protocol.md +++ b/applications/MangoSale_Protocol.md @@ -1,14 +1,10 @@ -# W3F Grant Proposal +# MangoSale Protocol - - -- **Project Name:** MangoSale Protocol - **Team Name:** MangoBOX labs - **Payment Address:** 0x33e69715988126eB3653bFAfd338320BE9A10cd0(USDC)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - ## Project Overview :page_facing_up: https://github.com/w3f/Grant-Milestone-Delivery/pull/612 diff --git a/applications/MeProtocol.md b/applications/MeProtocol.md index 34238704627..d171ade6ce0 100644 --- a/applications/MeProtocol.md +++ b/applications/MeProtocol.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Me Protocol -- **Project Name:** Me Protocol - **Team Name:** My AI - **Payment Address:** Ethereum: 0xB35da2E7380a2580Acdc0ca5DEa9e2B152155e84 (USDC) - **Level:** 2 diff --git a/applications/Zombienet-Explorer.md b/applications/Zombienet-Explorer.md index c9033a3b3e4..e36e4cb279b 100644 --- a/applications/Zombienet-Explorer.md +++ b/applications/Zombienet-Explorer.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Zombienet Explorer: Multi-Chain Substrate Block Explorer (based on Polkaholic.io) -- **Project Name:** Zombienet Explorer: Multi-Chain Substrate Block Explorer (based on Polkaholic.io) - **Team Name:** Colorful Notion - **Payment Address:** Polkadot 5D58imQFuMXDTknQS2D14gDU2duiUC18MGxDnTKajjJS9F3g [USDT] - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 diff --git a/applications/decentralized_invoice.md b/applications/decentralized_invoice.md index 0c6a44a2ecb..7c0ee56b783 100644 --- a/applications/decentralized_invoice.md +++ b/applications/decentralized_invoice.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Decentralized Invoice -- **Project Name:** Decentralized Invoice - **Team Name:** TwinP - **Payment Address:** 0xd042e53e22e9f941ceba02f4adb9d1b32ef43675 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 diff --git a/applications/ink-pallet-benchmarking.md b/applications/ink-pallet-benchmarking.md index f7581816f99..363d13b1aea 100644 --- a/applications/ink-pallet-benchmarking.md +++ b/applications/ink-pallet-benchmarking.md @@ -1,5 +1,5 @@ -# W3F Grant Proposal -- **Project Name:** ink!/pallet/solidity performance benchmarking +# ink!/pallet/solidity performance benchmarking + - **Team Name:** Talentica Software - **Payment Address:** - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 diff --git a/applications/ipfs_utilities.md b/applications/ipfs_utilities.md index 695c943a15e..e92f18c73ef 100644 --- a/applications/ipfs_utilities.md +++ b/applications/ipfs_utilities.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Substrate IPFS Utilities -- **Project Name:** Substrate IPFS Utilities - **Team Name:** [TDSoftware](https://www.tdsoftware.de/) - **Payment Address:** 0x8Db0972d9F40357526B879A002d60CCf6B4a8882 - **Level:** 3 diff --git a/applications/typechain-polkadot-follow-up-2.md b/applications/typechain-polkadot-follow-up-2.md index 1352a75401b..a363183eb77 100644 --- a/applications/typechain-polkadot-follow-up-2.md +++ b/applications/typechain-polkadot-follow-up-2.md @@ -1,8 +1,5 @@ # Typechain-Polkadot Follow-up-2 -# [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) - -- **Project Name:** [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) - **Team Name:** [727.ventures](https://github.com/727-Ventures) - **Payment Address:** ERC 20 (DAI): 0x352F779203202c99699CdA8cc95adF06CcC8abEf @@ -20,7 +17,7 @@ Information about how to interact with a contract (methods names, arguments & re Interaction with blockchain is done with the polkadot.js library, which only has abstract definitions for the contract in use. Thus users' code cannot be typesafe. And Typechain-Polkadot can change it. -This Grant is a follow-up to the previous grants, [first grant](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot.md) and [second grant](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot-follow-up.md). +This Grant is a follow-up to the previous grants, [Typechain-Polkadot](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot.md) and [Typechain-Polkadot Follow-up](https://github.com/w3f/Grants-Program/blob/master/applications/typechain-polkadot-follow-up.md). In this grant, we aim to integrate event subscription, allow users to create their plugins and expand the tool into more packages so the users can alo use different parts of the application alone if needed. ### Usage of Typechain-compiler diff --git a/applications/typechain-polkadot-follow-up.md b/applications/typechain-polkadot-follow-up.md index f18544941d9..61e0e6f7cc5 100644 --- a/applications/typechain-polkadot-follow-up.md +++ b/applications/typechain-polkadot-follow-up.md @@ -1,8 +1,5 @@ -# Typechain grant #2 +# Typechain-Polkadot Follow-up -# [Typechain-Polkadot](https://github.com/Supercolony-net/typechain-polkadot) - -- **Project Name:** [Typechain-Polkadot](https://github.com/727-Ventures/typechain-polkadot) - **Team Name:** [727.ventures](https://github.com/727-Ventures) - **Payment Address:** ERC 20 (DAI): 0x352F779203202c99699CdA8cc95adF06CcC8abEf @@ -20,7 +17,7 @@ Information about how to interact with a contract (methods names, arguments & re Interaction with blockchain is done with the polkadot.js library, which only has abstract definitions for the contract in use. Thus users' code cannot be typesafe. And Typechain-Polkadot can change it. -This Grant is a follow-up to the previous grant, [W3F Grant Proposal](https://github.com/w3f/Grants-Program/pull/992).. +This Grant is a follow-up to the previous grant, [Typechain-Polkadot](https://github.com/w3f/Grants-Program/pull/992).. We have decided to add a new tool that will help developers easily integrate typechain to their projects. It will also be compatible with Redspot (if redspot was used for compiler projects, you could just leave most of the things). We have some updates on our team, so check them out. And also, we did more work on Milestone 1 than we thought, so now it'll be easier to add new features to the project, so we considered to reestimate our time. From 5ca21bc605fe365fdc22dfdf82f86b00a443f189 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 9 Feb 2023 14:57:59 +0100 Subject: [PATCH 058/665] Update index.md Aband PoS template completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index fc215ab95b6..0445ff2799b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -572,7 +572,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | -| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☐ | ☐ | +| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 17 - First Quarter 2023 From f7b8bb8ece152e35832c884405f9bec6ff3ca193 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 9 Feb 2023 11:47:00 -0500 Subject: [PATCH 059/665] Update Web3Box.md (#1527) --- applications/Web3Box.md | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/applications/Web3Box.md b/applications/Web3Box.md index cb1ade9911a..234cf589d18 100644 --- a/applications/Web3Box.md +++ b/applications/Web3Box.md @@ -39,9 +39,9 @@ Web3Box Dashboad Preview ### Contact -- Contact Name: Andrew -- Contact Email: andrew@web3box.cc -- Website: https://web3box.cc +- **Contact Name:** Andrew +- **Contact Email:** andrew@web3box.cc +- **Website:** https://web3box.cc ### Legal Structure @@ -67,6 +67,12 @@ Web3Box has confirmed the overall architecture. And now, Web3Box is confirming t ## Development Roadmap +### Overview + +- **Total Estimated Duration:** 6 weeks +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 10,000 USD + ### Milestone 1 - Dashboard / Multi-chain Wallet - **Estimated duration:** 6 weeks @@ -100,4 +106,4 @@ Web3Box has confirmed the overall architecture. And now, Web3Box is confirming t ## Additional Information -**How did you hear about the Grants Program?** Twitter \ No newline at end of file +**How did you hear about the Grants Program?** Twitter From 131f99cc4bf2f47b90f3fba798767dfa00682e62 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 9 Feb 2023 08:47:31 -0800 Subject: [PATCH 060/665] Edit applications/index.md (#1526) * Add maintenance symlink for website * Update index.md Reorder Waves (desc) * Update index.md - Reordered waves - Added navigation menu --- applications/index.md | 1034 +++++++++++++++++++++-------------------- docs/maintenance | 1 + 2 files changed, 531 insertions(+), 504 deletions(-) create mode 120000 docs/maintenance diff --git a/applications/index.md b/applications/index.md index 0445ff2799b..370471641b5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -11,259 +11,315 @@ Use this page for an overview of all public grants and their status. Use the sid > > Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). -## 2019 +## Menu +- [2023](#2023): [17](#🏄‍♀️-wave-17---first-quarter-2023) +- [2022](#2022): [16](#🏄‍♀️-wave-16---fourth-quarter-2022), [15](#🏄‍♀️-wave-15---third-quarter-2022), [14](#🏄‍♀️-wave-14---second-quarter-2022), [13](#🏄‍♀️-wave-13---first-quarter-2022) +- [2021](#2021): [12](#🏄‍♀️-wave-12---fourth-quarter-2021), [11](#🏄‍♀️-wave-11---third-quarter-2021), [10](#🏄‍♀️-wave-10---second-quarter-2021), [9](#🏄‍♀️-wave-9---first-quarter-2021) +- [2020](#2020): [8](#🏄‍♀️-wave-8---fourth-quarter-2020), [7](#🏄‍♀️-wave-7---third-quarter-2020), [6](#🏄‍♀️-wave-6---second-quarter-2020), [5](#🏄‍♀️-wave-5---first-quarter-2020) +- [2019](#2019): [4](#🏄‍♀️-wave-4---fourth-quarter-2019), [3](#🏄‍♀️-wave-3---third-quarter-2019), [2](#🏄‍♀️-wave-2---second-quarter-2019), [1](#🏄‍♀️-wave-1---first-quarter-2019) -### 🏄‍♀️ Wave 1 - First Quarter 2019 +## 2023 -| Team | Project | Link | Terminated | First Delivery | Completed | -| :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [ChainSafe](https://chainsafe.io/) | Polkadot Runtime Environment in Go (via an RFP) | [GitHub](https://github.com/ChainSafeSystems/gossamer) | ☐ | ☒ | ☒ | -| [Soramitsu](https://soramitsu.co.jp/) | Polkadot Runtime Environment in C++ (via an RFP) | [GitHub](https://github.com/soramitsu/kagome) | ☐ | ☒ | ☒ | -| [WEB3SCAN](https://www.web3scan.com/) | Polkascan: Open Source Block Explorer | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | -| [Polkawallet](https://polkawallet.io/) | [Mobile Wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Polkawallet%20Team.md) | [GitHub](https://github.com/polkawallet-io/polkawallet-RN) | ☐ | ☒ | ☐ | -| [Validators](http://validators.com/) | Open Source Scalable Cluster | [GitHub](https://github.com/Validators) | ☐ | ☒ | ☒ | -| [BlockX Labs](http://blockxlabs.com/) | [Enzyme Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Enzyme.md) | [GitHub](https://github.com/blockxlabs/enzyme) | ☐ | ☒ | ☒ | -| [Speckle OS](https://www.speckleos.io/) | [Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/speckleos.md) | [GitHub](https://github.com/SpeckleOS/speckle-browser-extension) | ☐ | ☒ | ☒ | -| [Noise Explorer](https://symbolic.software/) | Rust code generator for formally verified (Noise/ cryptographic) handshakes | [Source Code](https://source.symbolic.software/noiseexplorer/noiseexplorer) | ☐ | ☒ | ☒ | -| [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | -| [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 17 - First Quarter 2023 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 2 - Second Quarter 2019 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | +| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | +| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | +| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | +| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | +| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | +| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | +| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :--------- | :------------: | :-------: | -| [Cap9](https://cap9.io/) | A low-level security protocol and framework for smart contracts | [GitHub](https://github.com/Daohub-io/cap9) | ☐ | ☒ | ☒ | -| Substrate Java API | Java version of our JS API | [GitHub](https://github.com/polkadot-java) | ☐ | ☒ | ☒ | -| [Starlog](https://pact.care/) | [A metadata chain for IPFS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/starlog.md) | [GitHub](https://github.com/PACTCare/Starlog) | ☐ | ☒ | ☐ | -| [MixBytes](https://mixbytes.io/) | [Benchmarking tool for Substrate and Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/MixBytes_Tank.md) | [GitHub](https://github.com/mixbytes/tank) | ☐ | ☒ | ☒ | -| [Gunclear](https://gunclear.io/) | [Private secure data storage solution using Plasma Cash in Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/GunClear.md) | [GitHub](https://github.com/GunClear) | ☒ | ☒ | ☐ | -| [ZeroChain](https://layerx.co.jp/) | [Zero knowledge transactions in Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/zerochain.md) | [GitHub](https://github.com/LayerXcom/zero-chain) | ☐ | ☒ | ☒ | -| [Robonomics](https://robonomics.network/) | [Substrate modules for controlling robots](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/robotics_in_polkadot.md) | [GitHub](https://github.com/airalab/substrate-node-robonomics) | ☐ | ☒ | ☐ | -| [Avado](https://ava.do/) | Polkadot node deployment with consumer hardware | [GitHub](https://github.com/AvadoDServer/AVADO-DNP-Polkadot-custom) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [Plasma modules for Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/plasm.md) | [GitHub](https://github.com/staketechnologies/Plasm) | ☐ | ☒ | ☒ | -| [HOPR](https://hopr.network/) | [Substrate integration with this P2P messaging protocol](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/messaging.md) | [GitHub](https://github.com/validitylabs/HOPR-PL-Substrate) | ☐ | ☒ | ☒ | -| [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | -| [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | +## 2022 -### 🏄‍♀️ Wave 3 - Third Quarter 2019 +### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Supercomputing systems](http://scs.ch/) | [Substrate Rust API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate-api-client.md) | [GitHub](https://github.com/scs/substrate-api-client) | ☐ | ☒ | ☒ | -| [NGRAVE](https://ngrave.io/) | [Substrate Hardware Wallet Integration](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ngrave_substrate_1.md) | | ☐ | ☒ | ☐ | -| [Caelum Labs](https://caelumlabs.com/) | [Decentralised identity modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Self%20Sovereign%20Identity%20layer%20as%20a%20Polkadot%20runtime.md) | | ☐ | ☒ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | Build executable K specifications of the SRML | [GitHub](https://github.com/runtimeverification/polkadot-verification) | ☐ | ☒ | ☒ | -| [Attic Lab](https://atticlab.net/) | [VS Code and Atom plugins](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/vscode_plugin.md) | [GitHub](https://github.com/everstake/VSCode-Atom-Plugin) | ☐ | ☒ | ☒ | -| [Dock](http://dock.io/) | Verifiable Claims | | ☐ | ☒ | ☐ | -| [Blockdaemon](https://blockdaemon.com/) | Polkadot Package Manager | [GitHub](https://github.com/Blockdaemon/bpm-sdk) | ☐ | ☒ | ☒ | -| [Zondax](http://zondax.ch/) | Ledger app for Polkadot | [GitHub](https://github.com/ZondaX/ledger-polkadot) | ☐ | ☒ | ☒ | -| [Geefu](https://www.geefu.net/) | [Vue JS components for Polkadot JS apps](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Vuejs_ui-components.md) | [GitHub](https://github.com/vue-polkadot) | ☐ | ☒ | ☒ | -| [Centrifuge](https://centrifuge.io/) | [Substrate Go API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/centrifuge_go_substrate_rpc_client.md) | [GitHub](http://github.com/centrifuge) | ☐ | ☒ | ☒ | -| [Litentry](https://www.litentry.com/) | [Identity modules and corresponding UIs](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/litentry.md) | [GitHub](https://github.com/litentry/litentry-runtime) | ☐ | ☒ | ☒ | -| [DappForce](http://dappforce.io) | [SubSocial - Substrate module and web UI for decentralized communities](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | -| [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | -| [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | +| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | +| [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | +| [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | +| [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | +| [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | +| [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | +| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | +| [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | +| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | +| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | +| [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | +| [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | +| [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | +| [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | +| [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | +| [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | +| [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | +| [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | +| [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | +| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | +| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | +| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | +| [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | +| [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☐ | ☐ | +| [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | +| [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | +| [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | +| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | +| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | +| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | +| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | -### 🏄‍♀️ Wave 4 - Fourth Quarter 2019 +### 🏄‍♀️ Wave 15 - Third Quarter 2022 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Genesis Lab](https://genesislab.net/) | Validator Tracker | [GitHub](https://github.com/genesis-lab-team) | ☐ | ☒ | ☒ | -| [Usetech](http://usetech.com/blockchain.html) | [Substrate API in .NET](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/dotnet_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_dotnet) | ☐ | ☒ | ☒ | -| [BlockX Labs](http://blockxlabs.com/) | [Enzyme Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Enzyme.md) | [GitHub](https://github.com/blockxlabs/enzyme) | ☐ | ☒ | ☒ | -| [WEB3SCAN](https://www.web3scan.com/) | [Python API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/python_substrate_api.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | -| [Galactic Council](https://github.com/galacticcouncil) | [Polkalert: Validator Monitoring](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PolkAlert.md) | [GitHub](https://github.com/galacticcouncil/polkalert) | ☐ | ☒ | ☒ | -| [Bandot](http://bandot.io/) | Stablecoin | [GitHub](https://github.com/bandotorg/Bandot) | ☒ | ☒ | ☐ | -| [Laminar One](https://laminar.one/) | LaminarChain: High performance Flow Protocols powering synthetic asset and margin trading | [GitHub](https://github.com/laminar-protocol/laminar-chain) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [Ink! Playground](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ink_playground.md) | [GitHub](https://github.com/staketechnologies/ink-playground) | ☐ | ☒ | ☒ | -| [B-Harvest](https://bharvest.io/) | [Node Monitoring Tool](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate%20x%20(prometheus%20%2B%20grafana)%20by%20B-Harvest.md) | [GitHub](https://github.com/b-harvest) | ☐ | ☒ | ☐ | -| [Simply VC](https://simply-vc.com.mt/) | [P.A.N.I.C. Validator alerting solution](./panic.md) | [GitHub](https://github.com/SimplyVC/panic_polkadot) | ☐ | ☒ | ☒ | -| [Ethworks](https://ethworks.io/) | [Polkadot{.js} extension improvements](./polkadot-desktop-app.md) | [GitHub](https://github.com/ethWorks) | ☐ | ☒ | ☒ | -| [Lyken Software Solutions](https://lyken.rs/) | Investigation of runtime compilation | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☒ | -| [Blockchain IT](https://blockchain-it.hr) | [Ink! Remix Plugin](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ink-remix-plugin.md) | [GitHub](https://github.com/blockchain-it-hr/ink-remix-plugin) | ☐ | ☒ | ☒ | -| [Kadena](https://www.kadena.io/) | Pact feasibility study | [GitHub](https://github.com/kadena-io/) | ☐ | ☐ | ☐ | -| [STAFI Protocol](http://www.stafi.io/) | Stafi is a protocol to provide liquidity for staking assets | [GitHub](https://github.com/stafiprotocol/stafi-node) | ☐ | ☒ | ☒ | -| [Vision Baker](https://playproject.io/) | [DatDot — Dat protocol for Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/datdot.md) | [GitHub](https://github.com/playproject-io/datdot) | ☐ | ☒ | ☐ | -| [Speckle OS](https://www.speckleos.io/) | [Integrating additional features into Speckle OS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Speckle%20Application.md) | [GitHub](https://github.com/SpeckleOS/speckle-browser-extension) | ☐ | ☐ | ☐ | -| [Archipel](https://archipel.id/) | [Solution to resolve high availability problem of Validator nodes in PoS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/archipel.md) | [GitHub](https://github.com/luguslabs/archipel) | ☐ | ☒ | ☒ | -| [Zondax](https://zondax.ch/) | Flexible TrustZone-based HSM stack | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | -| [Usetech](http://usetech.com/blockchain.html) | SR25519 library in pure C and C# | [GitHub](https://github.com/usetech-llc/) | ☐ | ☒ | ☒ | -| [Akropolis](https://akropolis.io/) | [PolkaHub — Heroku-like infrastructure for node deployment](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PolkaHub.md) | [GitHub](https://github.com/akropolisio) | ☐ | ☒ | ☒ | -| [Pixura](https://pixura.io/) | [Substrate API client in Haskell](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkadot_substrate_haskell_api.md) | [GitHub](https://github.com/Pixura) | ☐ | ☐ | ☐ | -| [HashQuark](https://www.hashquark.io/) | Validator Dashboard | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | -| [Stacktical](https://stacktical.com/) | [Performance Management Runtime Modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/predictive_performance_management_runtime_module.md) | [GitHub](https://github.com/Stacktical) | ☐ | ☒ | ☐ | -| [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | -| [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | +| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | +| [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | +| [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | +| [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | +| [B-Datagray](https://www.b-datagray.com/) | [Datagen Project](./Datagen_Project.md) | [GitHub](https://github.com/Datagen-Project) | ☐ | ☒ | ☐ | +| [Colorful Notion](https://polkaholic.io/#chains) | [Polkaholic.io's Multi-Chain Substrate Block Explorer](./Polkaholic.md) | [GitHub](https://github.com/colorfulnotion/polkaholic/) | ☐ | ☐ | ☐ | +| [Common Orbit LLC](https://brson.github.io) | [`wasm-opt` for Rust](./wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☒ | +| [Blockcoders](https://blockcoders.io/) | [Ink Explorer](./ink-explorer.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | +| [Equilibrium](https://equilibrium.co/) | [Polkadot Light Client in C++](./c++polkadot-light-client.md) | [GitHub](https://github.com/eqlabs) | ☐ | ☒ | ☒ | +| [Open rollup](https://github.com/openrollup-zk) | [Open rollup - MVP - Phase 1](./openrollup-mvp-phase-1.md) | [GitHub](https://github.com/openrollup-zk) | ☐ | ☐ | ☐ | +| [Veridise](https://veridise.com/) | [Vanguard](./vanguard.md) | [GitHub](https://github.com/Veridise/Vanguard) | ☐ | ☐ | ☐ | +| [Karolis Ramanauskas](https://krl.is/) | [Generic Sybil-Resistant Faucet](./Faucet.md) | [GitHub](https://github.com/karooolis) | ☐ | ☒ | ☒ | +| [LimeChain](https://limechain.tech/) | [Research feasibility for a Go Runtime](./research-feasibility-go-runtime.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | +| [Jim Yam](https://github.com/JimYam) | [daos](./daos.md) | [GitHub](https://github.com/daos-org/daos.git) | ☐ | ☒ | ☒ | +| [Green Lemon](https://github.com/GreenLemonProtocol) | [Green Lemon Protocol](./GreenLemon.md) | [GitHub](https://github.com/GreenLemonProtocol) | ☐ | ☒ | ☒ | +| [Stardust Labs Inc.](https://stardust.finance/) | [Integrating ISO-8583](./Integrating-ISO8583.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | +| [TwinP](https://www.linkedin.com/in/elioprifti/) | [Escrow Pallet](./escrow_pallet.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | +| [Meta Defender Team](https://github.com/Meta-Defender/) | [Meta Defender](./Meta_Defender.md) | [GitHub](https://github.com/Meta-Defender/) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell](./ParaSpell.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | +| [Primis Labs](https://github.com/Primis-Labs) | [Primis](./Primis.md) | [GitHub](https://github.com/Primis-Labs/client) | ☐ | ☒ | ☒ | +| [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | +| [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | +| [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | +| [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | +| [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | +| [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | +| [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | +| [TopMonks](https://www.topmonks.com/) | [Calamar](./Calamar.md) | [GitHub](https://github.com/topmonks/calamar) | ☐ | ☒ | ☐ | +| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper](./RubeusKeeper.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | +| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☐ | +| [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | +| [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | +| [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | +| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☐ | +| [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | +| ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | +| [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | +| [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | -## 2020 +### 🏄‍♀️ Wave 14 - Second Quarter 2022 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 5 - First Quarter 2020 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [TDSoftware](https://www.tdsoftware.de/) | [SubIdentity](./SubIdentity.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | +| [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | +| [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☐ | ☐ | +| [Perun Network](https://perun.network/) | [Perun App Channels](./perun_app_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | +| [ChainSafe Systems](https://chainsafe.io/) | [Privacy enhancement for Polkadot-js extension](./polkadot-js-extension-per-account-auth.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | +| [BQP](https://qbitcoin.tech/) | [Quantum Lock for QBITCOIN](./quantumLock.md) | [GitHub](https://github.com/bqpquantum/) | ☐ | ☐ | ☐ | +| [Simply VC](https://simply-vc.com.mt/) | [PANIC Monitoring and Alerting For Blockchains](./panic.md) | [GitHub](https://github.com/SimplyVC/panic) | ☐ | ☒ | ☒ | +| [Artree LLC](https://artree.co.jp/) | [Zero Network](./zero-network.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | +| [sigma prime](https://sigmaprime.io/) | Differential Fuzzer | [GitHub](https://github.com/sigp) | ☐ | ☐ | ☐ | +| [t3rn](https://www.t3rn.io/) | [XBI - xcm-based high-level standard and interface (ABI) for smart contracts](./xbi-format-psp-t3rn.md) | [GitHub](https://github.com/t3rn/t3rn) | ☐ | ☒ | ☒ | +| [Dante Network](https://www.dantechain.com/) | [Dante Network](./Dante_Network.md) | [GitHub](https://github.com/dantenetwork) | ☐ | ☒ | ☒ | +| [Verida](https://www.verida.io/) | [Single Sign-On for Apps](./verida_network.md) | [GitHub](https://github.com/verida) | ☐ | ☐ | ☐ | +| [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | +| [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | +| [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | +| [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | +| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | +| [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | +| [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | +| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | +| [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | +| [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☐ | +| [Ideal Labs](https://www.idealabs.network/) | [Iris: Phase 2](./iris_followup.md) | [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | +| [NeoPower](https://www.neopower.digital/) | [Roloi: Stream money from one wallet to another](./Roloi.md) | [GitHub](https://github.com/RoloiMoney) | ☐ | ☒ | ☒ | +| [Tribal Protocol Labs](https://www.tribal.fyi/) | [Tribal Protocol Smart Contract Development](./tribal_protocol.md) | [GitHub](https://github.com/tribal-protocol) | ☐ | ☒ | ☐ | +| [Yahuang Wu](https://github.com/wuyahuang) | [Dual-Key Stealth Address Protocol](./DKSAP.md) | [GitHub](https://github.com/wuyahuang) | ☐ | ☒ | ☒ | +| [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [Universaldot.me Phase 2](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☒ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 1](./Societal.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | +| [Faceless Protocol](https://github.com/HeisenbergLin22) | [Faceless Protocol](./faceless.md) | [GitHub](https://github.com/HeisenbergLin22) | ☐ | ☒ | ☒ | +| [727.ventures](https://727.ventures/) | [Typechain](./typechain-polkadot.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | +| [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | +| [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☐ | +| [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :---------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Bifrost](https://bifrost.finance/) | [EOS interoperable bridge](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/bifrost_network.md) | [GitHub](https://github.com/bifrost-finance) | ☐ | ☒ | ☒ | -| [Entropy Labs](https://entropylabs.hk) | A toolkit for building and deploying applications with substrate | | ☐ | ☒ | ☐ | -| [Papers GmbH](https://airgap.it) | AirGap - Desktop (+mobile) wallet for Polkadot | [GitHub](https://github.com/airgap-it) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [Plasm Chain + OVM Implementation](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PlasmChian.md) | [GitHub](https://github.com/staketechnologies/) | ☐ | ☒ | ☐ | -| [Usetech](http://usetech.com/blockchain.html) | [PostgreSQL Indexer and Consensus Insurer](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/postgre_indexer_consensus_ensurer.md) | [GitHub](https://github.com/usetech-llc/) | ☐ | ☒ | ☒ | -| [Acala](https://acala.network/) | [A decentralized stablecoin platform](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/stablecoin_acala.md) | [GitHub](https://github.com/AcalaNetwork) | ☐ | ☒ | ☒ | -| [ETCDEV](https://emeraldpay.io/) | [Polkadot Network Crawler](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/crawler.md) | [GitHub](https://github.com/emeraldpay) | ☐ | ☒ | ☒ | -| [Xaya](https://xaya.io/) | Decentralised Complex Gaming | [GitHub](https://github.com/xaya) | ☐ | ☒ | ☒ | -| [Celer](https://www.celer.network/) | Layer 2 Scaling Infrastructure | [GitHub](https://github.com/celer-network) | ☐ | ☒ | ☐ | -| [Cryptoeconomics Lab](https://www.cryptoeconomicslab.com/) | Substrate adapter of Plasma child chain | [GitHub](https://github.com/cryptoeconomicslab) | ☐ | ☐ | ☐ | -| [Centrifuge / ChainSafe](https://centrifuge.io/) | Substrate / Ethereum Bridge | [GitHub 1](https://github.com/centrifuge/), [Github 2](https://github.com/ChainSafe/ChainBridge) | ☐ | ☒ | ☒ | -| [Advanca](https://www.advanca.network/) | Privacy-preserving general-purpose compute/storage layer | [GitHub](https://github.com/advanca) | ☐ | ☒ | ☒ | -| [Nodle](https://nodle.io) | Securely identify, certify and verify IoT devices | [GitHub](http://github.com/NodleCode/) | ☐ | ☒ | ☒ | -| [Figment](https://figment.network/) | DotHub: Information Hub for validators and delegators | [GitHub](https://github.com/figment-networks/dothub) | ☐ | ☒ | ☒ | -| [Lunie](http://lunie.io/) | [Web and mobile wallet](./lunie.md) | [GitHub](https://github.com/luniehq/lunie) | ☐ | ☒ | ☒ | -| [Web3 Gardens](https://web3.garden) | [Runtime modules and UI for creating stable, well-governed communities on Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/sunshine.md) | [GitHub](https://github.com/web3garden/sunshine) | ☐ | ☒ | ☐ | -| [Itering](https://itering.com/) | [Ruby Substrate API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ruby_substrate_api.md) | [GitHub](https://github.com/itering) | ☐ | ☒ | ☒ | -| [WEB3SCAN](https://www.web3scan.com/) | [Identity Pallet for Polkascan](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkascan_account_module.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | -| [Swisscom Blockchain AG](https://www.blockchain.swisscom.com/) | [Kubernetes Operator for Sentry nodes or Validators deployment](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/aPois.md) | [GitHub](https://github.com/swisscom-blockchain) | ☐ | ☒ | ☒ | -| [Polkastats](https://polkastats.io/) | [Polkadot/Kusama network statistics](./polkastats.md) | [GitHub](https://github.com/Colm3na/polkastats-v3) | ☐ | ☒ | ☒ | -| [Supercomputing Systems](https://www.scs.ch/) | [SubstraTEE extension pack](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/SubstraTEE-extension-pack1.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | -| [Encointer](https://encointer.org/) | [An Ecological, Egalitarian and Private Cryptocurrency and Self-Sovereign Identity System](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/encointer-testnet.md) | [GitHub](https://github.com/encointer) | ☐ | ☒ | ☒ | -| [FlexDapps](https://flexdapps.com/) | Gantree is a full-service node infrastructure toolkit for Substrate-based blockchains | [GitHub](https://github.com/flex-dapps) | ☐ | ☒ | ☒ | -| [Matter Labs](https://matter-labs.io) | Zinc/RedShift ZK programming framework | [GitHub](https://github.com/matter-labs) | ☐ | ☐ | ☐ | -| [Second State](https://www.secondstate.io/) | [Bridging Ethereum Tools and Smart Contracts into Substrate Ecosystem](./wasmedge_substrate.md) | [GitHub](https://github.com/second-state) | ☐ | ☒ | ☒ | -| [Sensio.Group](https://ipfs.io/ipfs/bafybeihoqt3gvmd5wbqkxt52lojuvbvgoydan3aadxhvf37qdyvpgl762e/index.html) | [Substrate modules + UI that focus on photo copyright and privacy](./sensio_network.md) | [GitLab](https://gitlab.com/sensio_group) | ☐ | ☒ | ☐ | -| [KILT](https://kilt.io/) | [Substrate Anonymous Credentials](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/KILT_AnonymousCredentials.md) | [GitHub](https://github.com/KILTprotocol) | ☐ | ☒ | ☒ | -| [Node Factory](https://www.nodefactory.io/) | [Metamask plugin for Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/metamask-plugin-polkadot.md) | [GitHub](https://github.com/nodefactoryIo) | ☐ | ☒ | ☒ | -| [Interlay](https://www.interlay.io/) | Polkadot/BTC bridge specification (RFP) | [GitLab](https://gitlab.com/interlay/polkabtc-spec) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [ECDSA for Polkadot JS](https://github.com/w3f/Grants-Program/blob/master/applications/polkadotjs-ecdsa.md) | [GitHub](https://github.com/staketechnologies/apps) | ☐ | ☒ | ☒ | -| [Obsidian Labs](https://www.obsidians.io/) | Substrate IDE | [GitHub](https://github.com/ObsidianLabs) | ☐ | ☒ | ☒ | -| [Definex](https://definex.io/) | A financial market protocol | [GitHub](https://github.com/definex/definex-libs) | ☐ | ☒ | ☒ | -| [Attic Lab](https://atticlab.net/) | Multisignature Wallet Standardization/PSP | [GitHub](https://github.com/w3f/PSPs) | ☐ | ☒ | ☒ | -| [ImToken](https://token.im/) | Multi-chain non-custodial mobile and hardware wallet for iOS & Android | [GitHub](https://github.com/consenlabs/) | ☐ | ☒ | ☒ | -| [SelfKey](https://selfkey.org/) | SelfKey DIDs & Claims as Ink! Smart Contracts | [GitHub](https://github.com/SelfKeyFoundation) | ☐ | ☐ | ☐ | -| [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | -| [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 13 - First Quarter 2022 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 6 - Second Quarter 2020 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :---------------------------------------------------- | :-------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Chainify](https://github.com/chainify) | [Nolik](./Nolik.md) | [GitHub](https://github.com/chainify) | ☐ | ☒ | ☒ | +| [Pennsylvania State University](https://www.psu.edu/) | Avoiding Rust Deadlocks via Lifetime Visualization | [GitHub](https://songlh.github.io/) | ☐ | ☒ | ☒ | +| [Anagolay](https://anagolay.network/) | [Project Idiyanale](./anagolay-project-idiyanale-phase-1.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | +| [Fennel Labs](https://fennellabs.com/) | [Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | +| [Valletech AB](https://valletech.eu/) | [Polkawatch](./Polkawatch.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☒ | ☒ | +| [EzCode](https://ezcode.co/) | [Polkadot.js NoCode Plugin](./polkadotjs_no_code.md) | [GitHub](https://github.com/inartin) | ☐ | ☒ | ☒ | +| [Virto Network](https://virto.network/) | [LIP payments pallet](./lip_payments.md) | [GitHub](https://github.com/virto-network/) | ☐ | ☒ | ☒ | +| [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot.js Plus Extension](./Plus.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | +| [Dora Factory](https://dorafactory.org/) | [Multisig UI](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☒ | +| [Blackprint](https://github.com/Blackprint) | [Integrating Polkadot.js with Blackprint](./blackprint-js.md) | [GitHub](https://github.com/Blackprint) | ☐ | ☒ | ☒ | +| [OpenSquare Network](https://www.opensquare.network/) | [OpenSquare Paid QA protocol](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | +| [@Scale Technologies](https://atscale.xyz) | [Libra - Decentralized Payment Network](./Libra.md) | [GitHub](https://github.com/atscaletech/) | ☐ | ☒ | ☒ | +| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☐ | +| [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | +| [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | +| [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | +| [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☐ | ☐ | +| [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | +| [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☐ | ☐ | ☐ | +| [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | +| [Asylum](https://asylum.space/) | [Metaverse for next generation gaming](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☒ | +| [CESS LAB](https://www.cess.cloud/) | [Data Store Pallet](./ces_data_store.md) | [GitHub](https://github.com/CESSProject/cess) | ☐ | ☒ | ☒ | +| [ChainSafe](https://chainsafe.io/) | [Substrate Core Polywrapper](./substrate_core_polywrapper.md) | [GitHub](https://github.com/polywrap) | ☐ | ☐ | ☐ | +| [Bela Supernova](https://bsn.si/en/home/) | [On-chain cash exchange (OCEX)](./on-chain-cash.md) | | ☐ | ☒ | ☒ | +| [Second State](https://www.secondstate.io/) | [WasmEdge for Substrate](./wasmedge_substrate.md) | [GitHub](https://github.com/wasmedge) | ☐ | ☒ | ☐ | +| [Wow Labz](https://www.wowlabz.com/) | [Dot Marketplace Phase 2](./dot_marketplace-phase2.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | +| [Stardust Labs Inc.](https://stardust.finance/) | [Uncollateralized Stablecoin Research and Design](./stardust.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | +| [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | +| [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | +| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☐ | ☐ | +| [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./stable-asset.md) | [GitHub](https://github.com/nutsfinance/) | ☐ | ☒ | ☒ | +| [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Protofire](https://protofire.io/) | Failover mechanism for validators | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☒ | -| [HashQuark](https://www.hashquark.io/) | Validator Dashboard Phase 2 | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | -| [BUIDL Labs](https://buidllabs.io/) | [YieldScan Staking Dashboard](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/YieldScan.md) | [GitHub](https://github.com/buidl-labs) | ☐ | ☒ | ☒ | -| BoBao Technologies | [PolkaKey an electron app to generate Polkadot addresses + tutorials](./PolkaKey.md) | [GitHub](https://github.com/w3finance/PolkaKey) | ☐ | ☒ | ☐ | -| [Webassembly Security](https://webassembly-security.com/) | [Improving security and resilience of WebAssembly runtimes](./wasm_runtimes_fuzzing.md) | [GitHub](https://github.com/pventuzelo/wasm_runtimes_fuzzing) | ☐ | ☒ | ☒ | -| [Finoa](https://finoa.io/) | C library for Substrate | [GitHub](https://github.com/finoabanking/substrate-c-tool) | ☐ | ☒ | ☒ | -| [Crust Network](https://crust.network/) | Incentive layer protocol for decentralized storage | [GitHub](https://github.com/crustio) | ☐ | ☒ | ☒ | -| [ETCDEV](https://emeraldpay.io/) | Polkadot Java Client | [GitHub](https://github.com/emeraldpay) | ☐ | ☒ | ☒ | -| [Zondax](http://zondax.ch/) | Ledger app for Polkadot/Kusama Phase 2 | [GitHub](https://github.com/ZondaX/ledger-polkadot) | ☐ | ☒ | ☒ | -| [Soramitsu](https://soramitsu.co.jp/) | Hyperledger Iroha Bridge | [GitHub](https://github.com/sora-xor/polkaswap-web) | ☐ | ☒ | ☒ | -| [LimeChain](https://github.com/LimeChain) | [AssemblyScript SCALE Codec](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain/as-scale-codec) | ☐ | ☒ | ☒ | -| [Insight](https://insightfellows.com/) | [Load Balanced Endpoints](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/load_balanced_endpoints_operations.md) | [GitHub](https://github.com/insight-w3f/terragrunt-polkadot) | ☐ | ☒ | ☒ | -| [Ethworks](https://ethworks.io/) | [Polkadot.{js} Desktop Application](./polkadot-desktop-app.md) | [GitHub](https://github.com/EthWorks/) | ☐ | ☒ | ☒ | -| [Usetech](http://usetech.com/blockchain.html) | NFT Tracking Module | [GitHub](https://github.com/usetech-llc/nft_parachain) | ☐ | ☒ | ☒ | -| [Chevdor](https://www.chevdor.com/) | Polkabot | [GitHub](https://github.com/chevdor) | ☐ | ☒ | ☒ | -| [Aleksandr Krupenkin](https://github.com/akru) | [Haskell Web3 library](./hs-web3.md) | [GitHub](https://github.com/airalab/hs-web3) | ☐ | ☒ | ☒ | -| [WEB3SCAN](https://www.web3scan.com/) | [Polkascan Signer Interfaces](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkascan_signer_interfaces.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | -| [Fortmatic](https://fortmatic.com/) | SDK + Burner Wallet to implement Web 2.0 login for dapps | [GitHub](https://github.com/fortmatic) | ☐ | ☐ | ☐ | -| [PureStake](https://www.purestake.com/) | [Web3 Compatible API](./web3-compatible-api.md) | [GitHub](https://github.com/PureStake) | ☐ | ☒ | ☒ | -| [Phala.Network](https://phala.network/) | [Web3 Analytics](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/web3_analytics.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☐ | ☐ | -| [TerenceGe](https://github.com/TerenceGe) | [C implementation of Schnorrkel](./sr25519_donna.md) | [GitHub](https://github.com/TerenceGe/sr25519-donna) | ☐ | ☒ | ☒ | -| [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | -| [Laminar One](https://laminar.one/) | Reusable Libraries: Runtime Modules + Monitoring Framework | [GitHub](https://github.com/open-web3-stack) | ☐ | ☒ | ☒ | -| [Faber](https://github.com/yxf) | [Subwallet: CLI wallet for Polkadot/Substrate](./subwallet.md) | [GitHub](https://github.com/yxf/subwallet) | ☐ | ☒ | ☒ | -| [Equilibrium.co](https://equilibrium.co/) | [offchain::ipfs](./c++polkadot-light-client.md) | [GitHub](https://github.com/eqlabs) | ☐ | ☒ | ☒ | -| [Snowfork](http://www.snowfork.com/) | Ethereum Bridge | [GitHub](https://github.com/snowfork) | ☐ | ☒ | ☒ | -| [Lunie](http://lunie.io/) | [Lunie Governance integration](./lunie.md) | [GitHub](https://github.com/luniehq/lunie) | ☐ | ☒ | ☒ | -| [LimeChain](https://github.com/LimeChain) | [AssemblyScript Runtime](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | -| [MVP Workshop](https://mvpworkshop.co/) | [Substrate startkit GUI (marketplace for substrate pallets)](./substrate_startkit_GUI.md) | [GitHub](https://github.com/MVPWorkshop) | ☐ | ☒ | ☒ | -| [P2P](https://p2p.org/) | [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md) | [GitHub](https://github.com/p2p-org/polkadot-profit-transformer) | ☐ | ☒ | ☒ | -| [FlexDapps](https://flexdapps.com/) | Gantree Phase 4 | [GitHub](https://github.com/flex-dapps) | ☐ | ☐ | ☐ | -| [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | -| [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | +## 2021 -### 🏄‍♀️ Wave 7 - Third Quarter 2020 +### 🏄‍♀️ Wave 12 - Fourth Quarter 2021 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Halva](https://github.com/halva-suite) | [A toolchain for improving the experience of developing Decentralized Applications based on Substrate](./halva_framework.md) | [GitHub](https://github.com/halva-suite) | ☐ | ☒ | ☒ | -| [Subscan](https://subscan.io) | [Substrate explorer](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/subscan_grant_application.md) | [GitHub](https://github.com/subscan-explorer/subscan-essentials) | ☐ | ☒ | ☒ | -| [t3rn](https://github.com/t3rn/t3rn) | [A protocol for blockchain interoperability](./xbi-format-psp-t3rn.md) | [GitHub](https://github.com/t3rn/t3rn) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [Hardware ECDSA for Polkadot JS](https://github.com/w3f/Grants-Program/blob/master/applications/polkadotjs-hardware.md) | [GitHub](https://github.com/polkadot-js) | ☐ | ☒ | ☒ | -| [Protofire](https://protofire.io/) | Failover mechanism for validators upgrade | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☐ | -| [DappForce](http://dappforce.io) | [SubSocial Chapter 2](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial-2.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | -| [OpenSquare Network](https://www.opensquare.network/) | [A blockchain based crowdsourcing and reputation platform](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/open_square_network.md) | [GitHub](https://github.com/opensquare-network) | ☐ | ☒ | ☒ | -| [Cardinals](https://cardinals.cc/) | [Threshold BLS Randomness Beacon for Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Threshold%20BLS%20Randomness%20Beacon%20for%20Substrate.md) | [GitLab](https://gitlab.com/cardinals1/threshold-ecdsa) | ☐ | ☒ | ☒ | -| [KILT](https://kilt.io/) | Polimec: A Fundraising Mechanism for Projects within the Polkadot Ecosystem | [GitHub](https://github.com/KILTprotocol) | ☐ | ☐ | ☐ | -| [Simply VC](https://simply-vc.com.mt/) | [P.A.N.I.C. Phase 2](./panic.md) | [GitHub](https://github.com/SimplyVC/panic_polkadot) | ☐ | ☐ | ☐ | -| [Interlay](https://www.interlay.io/) | Trustless BTC-Polkadot Bridge | [GitLab](https://gitlab.com/interlay) | ☐ | ☒ | ☐ | -| [DodoRare](https://github.com/enfipy) | [Crossbow: Mobile Game Framework for Substrate](./crossbow.md) | [GitHub](https://github.com/dodorare/crossbow) | ☐ | ☒ | ☒ | -| [Halva](https://github.com/halva-suite) | [Halva: Bootstrapping and Scaffolding](./halva_bootstrapping.md) | [GitHub](https://github.com/halva-suite) | ☐ | ☒ | ☒ | -| [Sunshine Systems](https://sunshine.foundation) | [Sunshine Keybase](./sunshine-keybase.md) | [GitHub](https://github.com/sunshine-protocol) | ☐ | ☒ | ☒ | -| [Subscan](https://subscan.io) | [Multi-signature Management Tool](./multisignature_management_tool.md) | [GitHub](https://github.com/subscan-explorer/subscan-multisig-react) | ☐ | ☒ | ☒ | -| [Evercity](https://evercity.io/) | Smart Sustainable Bond Protocol (SSB-P) | [GitHub](https://github.com/EvercityEcosystem/Smart-Sustainable-Bond) | ☐ | ☒ | ☒ | -| [Permiurly](http://permiurly.in) | [Polkassembly](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkassembly_grant_application.md) | [GitHub](https://github.com/premiurly/polkassembly) | ☐ | ☒ | ☒ | -| [Zeropool](https://zeropool.network/) | [Private transactions on Polkadot](./ZeroPool.md) | [GitHub](https://github.com/zeropoolnetwork) | ☐ | ☒ | ☐ | -| [Polkadex](https://github.com/Polkadex-Substrate) | [A decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate](./polkadex.md) | [GitHub](https://github.com/Polkadex-Substrate/Polkadex) | ☒ | ☒ | ☐ | -| [Fractapp](https://fractapp.com) | [Messenger with crypto wallet](./fractapp.md) | [GitHub](https://github.com/fractapp) | ☐ | ☒ | ☒ | -| [Equilibrium.io](https://equilibrium.io/en) | [All-in-one Interoperable DeFi hub.](./curve_amm.md) | [GitHub](https://github.com/equilibrium-eosdt) | ☐ | ☒ | ☒ | -| [Glacier Blockchain Technology](http://www.gbctech.cn/#/) | [Starks Network](./starks_network.md) | [GitHub](https://github.com/gbctech) | ☐ | ☒ | ☒ | -| [SubDEX](http://subdex.io.s3.eu-west-2.amazonaws.com/index.html) | [A decentralized cross-chain exchange based on AMM](./subdex.md) | [GitHub](https://github.com/subdarkdex) | ☐ | ☒ | ☒ | -| [Zenlink](https://zenlink.pro/) | [A cross-chain DEX network](./zenlink.md) | [GitHub](https://github.com/zenlinkpro/zenlink_dex_module) | ☐ | ☒ | ☒ | -| [Subscript](https://github.com/slickup) | [Substrate smart contract api and sdk in AssemblyScript](./subscript_lang.md) | [GitHub](https://github.com/slickup/subscript) | ☐ | ☒ | ☒ | -| [Tesseract](https://tesseract.one/) | Swift API | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | -| [Cobo](https://cobo.com/) | Cobo Vault | [GitHub](https://github.com/CoboVault) | ☐ | ☒ | ☒ | -| [NodeFactory](https://nodefactory.io/) | [Vedar: Auto-funded public P2P infrastructure (APPI)](https://github.com/w3f/General-Grants-Program/blob/master/grants/rfp-responses/appi.md) | [GitHub](https://github.com/NodeFactoryIo/Vedran) | ☐ | ☒ | ☒ | -| [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit Phase 2 | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | -| [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | -| [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| Matthew Darnell | [cScale](./cScale.md) | [GitHub](https://github.com/MatthewDarnell/cScale) | ☐ | ☒ | ☐ | +| [Web3go](https://web3go.xyz/) | [Web3go](./Web3Go.md) | [GitHub](https://github.com/web3go-xyz) | ☐ | ☒ | ☐ | +| [Prosopo Limited](https://prosopo.io) | [Prosopo: Human Verification Marketplace](./prosopo.md) | [GitHub](https://github.com/prosopo-io) | ☐ | ☒ | ☒ | +| [Litentry](https://www.litentry.com) | [Polka SignIn](./PolkaSignIn.md) | [GitHub](https://github.com/litentry) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib](./php-rpc-lib.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☒ | +| [logion](https://logion.network/) | [Logion wallet](./logion_wallet.md) | [GitHub](https://github.com/logion-network) | ☐ | ☒ | ☒ | +| [727.ventures](https://727.ventures/) | [OpenBrush - Secure smart-contract development on ink! Phase 2](./openbrush-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | +| [Nitor Infotech](https://www.nitorinfotech.com/) | [Php substrate api](./php-substrate-api.md) | [GitHub](https://github.com/nitor-infotech-oss) | ☐ | ☒ | ☒ | +| [@agryaznov](https://github.com/agryaznov) | [Candle Auctions on Ink!](./candle_auction_ink.md) | [GitHub](https://github.com/agryaznov/candle-auction-ink) | ☐ | ☒ | ☒ | +| [Iridium Industries](http://www.iridium.industries) | [Iris: Decentralized storage network for substrate-based chains](./iris.md) | [GitHub](https://github.com/iridium-labs/iris) | ☐ | ☒ | ☒ | +| [DICO Team](https://dico.io/) | [DICO: Decentralized and governable ICO platform](./DICO.md) | [GitHub](https://github.com/DICO-TEAM/dico-chain) | ☐ | ☐ | ☐ | +| [DodoRare, Inc.](https://dodorare.com) | [Crossbow - Cross-Platform Rust Toolkit for Games](./faterium.md) | [GitHub](https://github.com/dodorare) | ☐ | ☒ | ☒ | +| [Rainbowcity Foundation](http://www.rainbowcity.io/) | [RainbowDAO Protocol ink! Phase 1](./RainbowDAO%20Protocol%20ink%20Phase%201.md) | [GitHub](https://github.com/RainbowcityFoundation/RainbowcityDAO) | ☐ | ☒ | ☒ | +| [Web Registry DAO](https://www.wika.network) | [Wika Network](./wika_network.md) | [GitHub](https://github.com/randombishop/wika_node) | ☐ | ☒ | ☐ | +| [Helikon Labs](http://www.helikon.tech/) | [SubVT Telegram Bot for Kusama and Polkadot](./subvt-telegram-bot.md) | [GitHub](https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot) | ☐ | ☒ | ☒ | +| [Elamin LTD](http://imbue.network/) | [Imbue Network](./imbue_network.md) | [GitHub](https://github.com/ImbueNetwork) | ☐ | ☒ | ☒ | +| [Koi Metaverse](https://koi.io/) | [Building the Digital Collectibles Platform for Virtual GameFi NFTs](./Koiverse.md) | [GitHub](https://github.com/KoiMetaverse) | ☐ | ☐ | ☐ | +| [Health Hero](https://www.gohealthhero.com/) | [Decentralized Well-being Game API](./decentralized_well-being_game_api.md) | [GitHub](https://github.com/iumairazhar) | ☐ | ☐ | ☐ | +| [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | +| [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | +| Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | -### 🏄‍♀️ Wave 8 - Fourth Quarter 2020 +### 🏄‍♀️ Wave 11 - Third Quarter 2021 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Sean Young](https://www.mess.org/) | Solidity to WASM compiler Phase 2 | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | -| [Nuclei Studio](https://nuclei.studio/) | [Governance OS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/nuclei_governance_os.md) | [GitHub](https://github.com/NucleiStudio) | ☐ | ☒ | ☒ | -| [NBLTrust](https://www.nbltrust.com/#/en/home) | [Dart SCALE Codec](./dart-scale-codec.md) | [GitHub](https://github.com/nbltrust/dart-scale-codec) | ☐ | ☒ | ☒ | -| [Nsure.Network](https://nsure.network/) | [Open Insurance Platform for Open Finance](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/nsure_network.md) | [GitHub](https://github.com/nsure-tech) | ☐ | ☒ | ☐ | -| [Kylin Network](https://kylin.network/) | [Cross-chain Platform for the Data Economy](./kylin_network.md) | [GitHub](https://github.com/Kylin-Network) | ☐ | ☒ | ☒ | -| [Bit.Country](http://bit.country/) | [A decentralized world](./bit_country.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | -| [MIDL.dev](https://MIDL.dev) | [Polkashots.io: Snapshot website for Polkadot and Kusama](./polkashots.md) | [GitHub](https://github.com/midl-dev) | ☐ | ☒ | ☒ | -| [Ares Protocol](https://www.aresprotocol.com/) | [Decentralized Oracle Protocol](./ares_protocol.md) | [GitHub](https://github.com/aresprotocols/ares) | ☐ | ☒ | ☒ | -| [Saito](https://saito.io/) | [Polkadot Gaming Protocol and Library](./saito-game-protocol-and-engine.md) | [GitHub](https://github.com/SaitoTech) | ☐ | ☒ | ☐ | -| [LimeChain](https://github.com/LimeChain) | [Subsembly: Framework for building AssemblyScript Runtimes](./research-feasibility-go-runtime.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☐ | -| [Wificoin](https://wificoin.com/) | [PESA: On-ramp/off-ramp to crypto/local currencies for Polkadot](./pesa_pallet.md) | | ☐ | ☐ | ☐ | -| [WalletConnect](https://walletconnect.org/) | Open protocol for connecting Wallets to Dapps | [GitHub](https://github.com/walletconnect) | ☐ | ☒ | ☐ | -| [Citadel.one](https://citadel.one/) | Non-custodial Proof-of-Stake platform | | ☐ | ☒ | ☒ | -| [Geometry Labs](https://geometrylabs.io/) | [Load Balanced Endpoints Phase 2](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/load_balanced_endpoints_operations.md) | [GitHub](https://github.com/geometry-labs) | ☐ | ☒ | ☒ | -| [MAP labs](https://www.maplabs.io/) | [Map Bridge: Connect Polkadot and other PoW chains](./MAP-Bridge.md) | [GitHub](https://github.com/Philasande-map/mapbridge) | ☒ | ☐ | ☐ | -| [RareLink](http://rarelink.network/) | [Dynamic non-fungible token (NFT) Protocol](./RareLink.md) | [GitHub](https://github.com/RareLink) | ☐ | ☐ | ☐ | -| [Cere Network](http://cere.network/) | [Turnkey Private Blockchain Network](./Cere_Turnkey_Private_Blockchain_Network.md) | [GitHub](https://github.com/Cerebellum-Network) | ☐ | ☒ | ☒ | -| [SubDAO Labs](https://www.subdao.network/) | [SubDAO is a Cross-chain Platform to link DAO and DApp on Polkadot](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | -| [Idavoll Network](https://idavoll.network/) | [Decentralized organization platform](./Idavoll%20Network.md) | [GitHub](https://github.com/idavollnetwork) | ☐ | ☒ | ☒ | -| [Zenlink](https://zenlink.pro/) | [DEX Ink! smart contract](./zenlink-smart-contract.md) | [GitHub](https://github.com/zenlinkpro/zenlink_dex_module) | ☐ | ☐ | ☐ | -| [Setheum](https://setheum.xyz/) | [Setheum Elastic Reserve Protocol](./setheum.md) | [GitHub](https://github.com/Setheum-Labs/Setheum) | ☒ | ☐ | ☐ | -| [Everstake](https://everstake.one/) | [DKG msig wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Rabin_DKG_Library.md) | [GitHub](https://github.com/everstake) | ☐ | ☐ | ☐ | -| [Coinversation](http://coinversation.cn/) | [Decentralized exchange for trading synthetic assets](./Coinversation.md) | [GitHub](https://github.com/Coinversation) | ☒ | ☐ | ☐ | -| [Manta Network](https://www.manta.network/) | [A Privacy Preserving Decentralized Exchange](./manta_network.md) | [GitHub](https://github.com/Manta-Network) | ☐ | ☒ | ☐ | -| [Stake Technologies](https://stake.co.jp/en/) | [ZK Rollups Pallet](./zk-rollups.md) | [GitHub](https://github.com/staketechnologies) | ☐ | ☒ | ☐ | -| [Apron Network](https://apron.network/) | [Decentralized infrastructure provider](./Apron_Network.md) | [GitHub](https://github.com/apron-network) | ☐ | ☒ | ☒ | -| [Pocket 4D](https://pocket4d.io) | [Substrate Dart API client](./Polkadot-Dart.md) | [GitHub](https://github.com/Pocket4D) | ☐ | ☒ | ☐ | -| [Listen](https://listen.io/) | [Decentralized social network focusing on sound](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Listen.md) | [GitHub](https://github.com/ListenTeam) | ☒ | ☐ | ☐ | -| [Protofire](https://protofire.io/) | Polkadot Mempool Explorer | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☒ | -| [Fuzhou Wakanda Information Technology](https://www.heizuan.com/) | Black Diamond Wallet | [GitHub](https://github.com/bdwallet) | ☐ | ☐ | ☐ | -| [Konomi](http://konomi.network/) | [Pool Lending Module](./konomi.md) | [GitHub](https://github.com/konomi-network) | ☐ | ☒ | ☒ | -| [Acala](https://acala.network/) | [Bodhi:Composable & Innovative Stack for EVM](./project_bodhi.md) | [GitHub](https://github.com/AcalaNetwork/bodhi.js) | ☐ | ☒ | ☒ | -| [Pontem Network](https://pontem.network/) | [Move smart contract pallet](./pontem.md) | [GitHub](https://github.com/dfinance) | ☐ | ☒ | ☒ | -| [SpiderDAO](https://spiderdao.io) | [Hardware-based DAO governance](./SpiderDAO.md) | [GitHub](https://github.com/SpiderDAO) | ☐ | ☐ | ☐ | -| [onfinality](https://onfinality.io) | [Subquery: Open-source tool to process and query data](./subquery.md) | [GitHub](https://github.com/onfinality-io) | ☐ | ☒ | ☒ | -| FOS Foundation LTD | [Pacific store: OpenSea.js on polkadot](./pacific_store.md) | [GitHub](https://github.com/vlbos) | ☐ | ☒ | ☐ | -| [Polkadot Technology Alliance](https://polkachina.org) | [Shadows Network: synthetic assets](./shadows-network.md) | [GitHub](https://github.com/ShadowsNetwork) | ☒ | ☒ | ☐ | -| [BLDG BLOX](https://bldg.app/) | [ESG (Environmental, Social, and Corporate Governance) ratings dashboard](./bldg_app.md) | [GitHub](https://github.com/BLDG-BLOX/) | ☐ | ☐ | ☐ | -| [DEIPWORLD](https://deip.world/) | [IP Management/Governance Module](./deip.md) | [GitHub](https://github.com/DEIPworld) | ☐ | ☒ | ☐ | -| [Deeper.Network](https://deeper.network/) | [Micropayments pallet](./deeper_network.md) | [GitHub](https://github.com/e2chain-dev/deeper-chain) | ☐ | ☒ | ☒ | -| [Evanesco](https://evanesco.org/) | [Private network protocol](./evanesco_networks.md) | [GitHub](https://github.com/Evanesco-Labs) | ☐ | ☒ | ☒ | -| [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | -| [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | +| [Pawn](https://github.com/pawnz0) | [NuLink](./NuLink.md) | [GitHub](https://github.com/pawnz0/NuLink) | ☐ | ☒ | ☒ | +| [Cyril Carlier](https://github.com/CrommVardek) | [Polk-Auction Website](./polk-auction.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☒ | ☒ | +| [Uddug](https://uddug.com/) | [JuniDB - Peer-to-Peer Databases](./JuniDB.md) | [GitHub](http://github.com/uddugteam/) | ☒ | ☐ | ☐ | +| [Canyon Labs](https://canyon-network.io) | [Permanent decentralized storage Phase 2](./canyon_network.md) | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | +| [Skynet Labs](https://siasky.net/) | [Pallet for Decentralized Off-Chain Storage on Skynet](./skynet-substrate-integration.md) | [GitHub](https://gitlab.com/SkynetLabs) | ☐ | ☒ | ☒ | +| [Uniwrap/1001 Group](https://uniwrap.io/) | [Project 1001](./project_1001.md) | [GitHub](https://github.com/uniwrap-protocol) | ☐ | ☐ | ☐ | +| [YibanChen](https://yibanchen.com) | [Notes DApp & Site-Pallet](./yiban_chen1.md) | [GitHub](https://github.com/YibanChen/) | ☐ | ☒ | ☐ | +| [727.ventures](https://727.ventures/) | [OpenBrush - Secure smart-contract development on ink!](./openbrush.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | +| [Banksy Finance](http://www.banksy.finance/) | [NFT Pool-Based Lending Hub](./Banksy_Finance.md) | [GitHub](https://github.com/Banksy-Finance) | ☐ | ☐ | ☐ | +| [SubDAO Labs](https://www.subdao.network/) | [PolkaSign - Web3.0 app for electronic agreements](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | +| [Valibre](https://valibre.org) | [People Local Interactions Protocol (PLIP)](./plip.md) | [GitHub](https://github.com/valibre-org/) | ☐ | ☐ | ☐ | +| [Reaudito](https://shivarthu.reaudito.com/#/) | [Shivarthu: A blockchain-based decentralized governance system](./Shivarthu.md) | [GitHub](https://github.com/amiyatulu/shivarthu) | ☐ | ☒ | ☐ | +| Uniscan | [NFT Explorer](./nft_explorer.md) | [GitHub](https://github.com/wuminzhe) | ☐ | ☒ | ☒ | +| [LimeChain](https://limechain.tech) | [Subsembly - Support for GRANDPA](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | +| [OpenSquare](https://www.opensquare.network) | [Off-chain voting platform](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | +| [Health Hero](https://www.gohealthhero.com/) | [NFT Product Analytics Suite](./nft_product_analytics_suite.md) | | ☐ | ☐ | ☐ | +| [Tesseract](https://tesseract.one/) | Mobile dApps/Wallet Connection | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | +| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace](./dot_marketplace.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | +| [Perun Network](https://perun.network/) | [Perun Channels - Integration with go-perun](./perun_channels-integration.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | +| [InvArchitects](https://www.invarch.io/) | [InvArch - IP Infrastructure for Substrate](./InvArch.md) | [GitHub](https://github.com/InvArch) | ☐ | ☒ | ☒ | +| [SubGame Network](https://subgame.org) | [A decentralized game platform Phase 2](./SubGame_Network_m2.md) | [GitHub](https://github.com/SubGame-Network) | ☐ | ☒ | ☒ | +| [CESS LAB](https://www.cess.cloud/) | [Cumulus Encrypted Storage System (CESS)](./CESS.md) | [GitHub](https://github.com/Cumulus2021/Whitepaper) | ☐ | ☒ | ☒ | +| [CheersLand Labs](https://cheersland.org/) | [Multi-game Platform for Polkadot & Kusama](./cheersland.md) | [GitHub](https://github.com/cheersland) | ☐ | ☐ | ☐ | +| [UNI-ARTS](https://app.uniarts.network/) | [Ruby Substate Client](./rb_substrate_client.md) | [GitHub](https://github.com/uni-arts-chain/sr25519) | ☐ | ☒ | ☐ | +| [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | +| [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | -## 2021 +### 🏄‍♀️ Wave 10 - Second Quarter 2021 +[Menu🔝](#menu) + +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [GamePower](https://gamepower.network) | [NFT Collectibles Wallet](./nft_collectibles_wallet.md) | [GitHub](https://github.com/GamePowerNetwork) | ☐ | ☒ | ☐ | +| [Subspace Labs](https://www.subspace.network/) | [Proof-of-Capacity Consensus for Substrate](./spartan_poc_consensus_module.md) | [GitHub](https://github.com/subspace) | ☐ | ☒ | ☒ | +| [ChainSafe](https://chainsafe.io/) | Go implementation of Cumulus | [GitHub](https://github.com/ChainSafeSystems) | ☐ | ☐ | ☐ | +| [Polkadotters](https://polkadotters.medium.com/) | [Subauction](./subauction.md) | [GitHub](https://github.com/polkadotters/SubAuction) | ☐ | ☒ | ☒ | +| [Phala Network](https://phala.network/) | [Open Node Framework](./open-node-framework.md) | [GitHub](https://github.com/Tenet-X) | ☐ | ☐ | ☐ | +| [Ruby Protocol](http://rubyprotocol.com/) | [Cryptographic Infrastructure for Data Monetization](./RubyProtocol.md) | [GitHub](https://github.com/Ruby-Protocol) | ☐ | ☒ | ☒ | +| [Find Signal Studio PTE. LTD.](https://yieldscan.app/) | [YieldScan Phase 2](./yieldscan_phase_2.md) | [GitHub](https://github.com/yieldscan) | ☐ | ☒ | ☒ | +| [PolkaMusic](https://polkamusic.io/) | [Operating decentralized music businesses on blockchain](./polkamusic.md) | [GitHub](https://github.com/polkamusic/PolkaMusic) | ☐ | ☒ | ☐ | +| [element36](https://element36.io) | [FIAT on-off-ramp](./FIAT-on-off-ramp.md) | [GitHub](https://github.com/element36-io) | ☐ | ☒ | ☐ | +| [Zondax](https://zondax.ch/) | Ledger Asset App | [GitHub](https://github.com/Zondax) | ☐ | ☒ | ☒ | +| [Moonbeam Network](https://moonbeam.network/) | [Pallet-dPoS for Parachain Staking](./parachain-staking.md) | [GitHub](https://github.com/PureStake/moonbeam) | ☐ | ☒ | ☒ | +| [Dora Factory](https://dorafactory.org/) | [MolochDAO substrate pallets v1 and v2](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☐ | +| BCANN | [Blockchain system for Assigned Names And Numbers](./BCANN.md) | [GitHub](https://github.com/weitaolee) | ☐ | ☐ | ☐ | +| [MyBank Labs](https://mybank.network/) | [Platform Bank, Social Network Bank, MyDeX and Credit Scoring System](./mybank.md) | [GitHub](https://github.com/mybank-network/mybank-network) | ☐ | ☐ | ☐ | +| [ChainBridge Network](https://github.com/ChainBridgeNetworkTeam) | [Doter: A browser extension wallet for Polkadot](./Doter.md) | [GitHub](https://github.com/ChainBridgeNetworkTeam) | ☐ | ☒ | ☒ | +| [SubDAO Labs](https://www.subdao.network/) | [SubDAO Chrome Extension](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | +| [Sukhavati Labs](https://sukhavati.io/) | [Sukhavati PoC Module](./sukhavati_poc_module.md) | [GitHub](https://github.com/Sukhavati-Labs) | ☐ | ☐ | ☐ | +| [HypeLabs Inc.](https://hypelabs.io) | [UpLink - Decentralized and infrastructure-free approach to peer-to-peer connectivity](./uplink.md) | [GitHub](https://github.com/Hype-Labs) | ☐ | ☐ | ☐ | +| Jackson Harris III | [Staking Rewards Viewer](./staking-rewards-collector-front-end.md) | [GitHub](https://github.com/jackson-harris-iii/staking-rewards-viewer) | ☐ | ☐ | ☐ | +| [Klevoya](https://klevoya.com/) | [WASM Smart Contract Fuzzer](./klevoya_fuzzer.md) | [GitHub](https://github.com/klevoya/) | ☐ | ☐ | ☐ | +| [Perun Network](https://perun.network/) | [Perun Channels](./perun_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | +| [NewOmega](https://github.com/WiktorStarczewski/newomega.trinity ) | [A blockchain game that cannot be shut down (Milestone 3 and 4)](./newomega-m3m4.md) | [GitHub](https://github.com/WiktorStarczewski/newomega.trinity ) | ☐ | ☒ | ☒ | +| [Webb Tech](https://www.webb.tools/) | [Webb Mixer Extended](./MIXERv2.md) | [GitHub](https://github.com/webb-tools) | ☐ | ☒ | ☒ | +| [Ajuna](https://ajuna.io/) | [UnitySDK for Substrate](./ajuna_network_follow_up.md) | [GitHub](https://github.com/JetonNetwork) | ☐ | ☒ | ☐ | +| [Canyon Labs](https://canyon-network.io) | Permanent decentralized storage | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | +| [ZeroDAO Network](https://zerodao.net/) | [Decentralised reputation systems and social networks](./ZeroDAO_Network.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | +| [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | +| [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 9 - First Quarter 2021 +[Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -316,290 +372,260 @@ Use this page for an overview of all public grants and their status. Use the sid | [Vera](https://veraprotocol.org/) | [NFT Lending + Exchange](./vera_defi.md) | [GitHub](https://github.com/veraprotocol) | ☐ | ☒ | ☒ | | [Parallel Finance](https://parallel.fi/#/) | [Decentralized lending/borrowing and staking protocol](./Parallel.md) | [GitHub](https://github.com/parallel-finance/parallel) | ☐ | ☒ | ☒ | -### 🏄‍♀️ Wave 10 - Second Quarter 2021 +## 2020 -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [GamePower](https://gamepower.network) | [NFT Collectibles Wallet](./nft_collectibles_wallet.md) | [GitHub](https://github.com/GamePowerNetwork) | ☐ | ☒ | ☐ | -| [Subspace Labs](https://www.subspace.network/) | [Proof-of-Capacity Consensus for Substrate](./spartan_poc_consensus_module.md) | [GitHub](https://github.com/subspace) | ☐ | ☒ | ☒ | -| [ChainSafe](https://chainsafe.io/) | Go implementation of Cumulus | [GitHub](https://github.com/ChainSafeSystems) | ☐ | ☐ | ☐ | -| [Polkadotters](https://polkadotters.medium.com/) | [Subauction](./subauction.md) | [GitHub](https://github.com/polkadotters/SubAuction) | ☐ | ☒ | ☒ | -| [Phala Network](https://phala.network/) | [Open Node Framework](./open-node-framework.md) | [GitHub](https://github.com/Tenet-X) | ☐ | ☐ | ☐ | -| [Ruby Protocol](http://rubyprotocol.com/) | [Cryptographic Infrastructure for Data Monetization](./RubyProtocol.md) | [GitHub](https://github.com/Ruby-Protocol) | ☐ | ☒ | ☒ | -| [Find Signal Studio PTE. LTD.](https://yieldscan.app/) | [YieldScan Phase 2](./yieldscan_phase_2.md) | [GitHub](https://github.com/yieldscan) | ☐ | ☒ | ☒ | -| [PolkaMusic](https://polkamusic.io/) | [Operating decentralized music businesses on blockchain](./polkamusic.md) | [GitHub](https://github.com/polkamusic/PolkaMusic) | ☐ | ☒ | ☐ | -| [element36](https://element36.io) | [FIAT on-off-ramp](./FIAT-on-off-ramp.md) | [GitHub](https://github.com/element36-io) | ☐ | ☒ | ☐ | -| [Zondax](https://zondax.ch/) | Ledger Asset App | [GitHub](https://github.com/Zondax) | ☐ | ☒ | ☒ | -| [Moonbeam Network](https://moonbeam.network/) | [Pallet-dPoS for Parachain Staking](./parachain-staking.md) | [GitHub](https://github.com/PureStake/moonbeam) | ☐ | ☒ | ☒ | -| [Dora Factory](https://dorafactory.org/) | [MolochDAO substrate pallets v1 and v2](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☐ | -| BCANN | [Blockchain system for Assigned Names And Numbers](./BCANN.md) | [GitHub](https://github.com/weitaolee) | ☐ | ☐ | ☐ | -| [MyBank Labs](https://mybank.network/) | [Platform Bank, Social Network Bank, MyDeX and Credit Scoring System](./mybank.md) | [GitHub](https://github.com/mybank-network/mybank-network) | ☐ | ☐ | ☐ | -| [ChainBridge Network](https://github.com/ChainBridgeNetworkTeam) | [Doter: A browser extension wallet for Polkadot](./Doter.md) | [GitHub](https://github.com/ChainBridgeNetworkTeam) | ☐ | ☒ | ☒ | -| [SubDAO Labs](https://www.subdao.network/) | [SubDAO Chrome Extension](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | -| [Sukhavati Labs](https://sukhavati.io/) | [Sukhavati PoC Module](./sukhavati_poc_module.md) | [GitHub](https://github.com/Sukhavati-Labs) | ☐ | ☐ | ☐ | -| [HypeLabs Inc.](https://hypelabs.io) | [UpLink - Decentralized and infrastructure-free approach to peer-to-peer connectivity](./uplink.md) | [GitHub](https://github.com/Hype-Labs) | ☐ | ☐ | ☐ | -| Jackson Harris III | [Staking Rewards Viewer](./staking-rewards-collector-front-end.md) | [GitHub](https://github.com/jackson-harris-iii/staking-rewards-viewer) | ☐ | ☐ | ☐ | -| [Klevoya](https://klevoya.com/) | [WASM Smart Contract Fuzzer](./klevoya_fuzzer.md) | [GitHub](https://github.com/klevoya/) | ☐ | ☐ | ☐ | -| [Perun Network](https://perun.network/) | [Perun Channels](./perun_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | -| [NewOmega](https://github.com/WiktorStarczewski/newomega.trinity ) | [A blockchain game that cannot be shut down (Milestone 3 and 4)](./newomega-m3m4.md) | [GitHub](https://github.com/WiktorStarczewski/newomega.trinity ) | ☐ | ☒ | ☒ | -| [Webb Tech](https://www.webb.tools/) | [Webb Mixer Extended](./MIXERv2.md) | [GitHub](https://github.com/webb-tools) | ☐ | ☒ | ☒ | -| [Ajuna](https://ajuna.io/) | [UnitySDK for Substrate](./ajuna_network_follow_up.md) | [GitHub](https://github.com/JetonNetwork) | ☐ | ☒ | ☐ | -| [Canyon Labs](https://canyon-network.io) | Permanent decentralized storage | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | -| [ZeroDAO Network](https://zerodao.net/) | [Decentralised reputation systems and social networks](./ZeroDAO_Network.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☒ | ☒ | -| [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | -| [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | -| [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 8 - Fourth Quarter 2020 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 11 - Third Quarter 2021 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Sean Young](https://www.mess.org/) | Solidity to WASM compiler Phase 2 | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | +| [Nuclei Studio](https://nuclei.studio/) | [Governance OS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/nuclei_governance_os.md) | [GitHub](https://github.com/NucleiStudio) | ☐ | ☒ | ☒ | +| [NBLTrust](https://www.nbltrust.com/#/en/home) | [Dart SCALE Codec](./dart-scale-codec.md) | [GitHub](https://github.com/nbltrust/dart-scale-codec) | ☐ | ☒ | ☒ | +| [Nsure.Network](https://nsure.network/) | [Open Insurance Platform for Open Finance](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/nsure_network.md) | [GitHub](https://github.com/nsure-tech) | ☐ | ☒ | ☐ | +| [Kylin Network](https://kylin.network/) | [Cross-chain Platform for the Data Economy](./kylin_network.md) | [GitHub](https://github.com/Kylin-Network) | ☐ | ☒ | ☒ | +| [Bit.Country](http://bit.country/) | [A decentralized world](./bit_country.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | +| [MIDL.dev](https://MIDL.dev) | [Polkashots.io: Snapshot website for Polkadot and Kusama](./polkashots.md) | [GitHub](https://github.com/midl-dev) | ☐ | ☒ | ☒ | +| [Ares Protocol](https://www.aresprotocol.com/) | [Decentralized Oracle Protocol](./ares_protocol.md) | [GitHub](https://github.com/aresprotocols/ares) | ☐ | ☒ | ☒ | +| [Saito](https://saito.io/) | [Polkadot Gaming Protocol and Library](./saito-game-protocol-and-engine.md) | [GitHub](https://github.com/SaitoTech) | ☐ | ☒ | ☐ | +| [LimeChain](https://github.com/LimeChain) | [Subsembly: Framework for building AssemblyScript Runtimes](./research-feasibility-go-runtime.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☐ | +| [Wificoin](https://wificoin.com/) | [PESA: On-ramp/off-ramp to crypto/local currencies for Polkadot](./pesa_pallet.md) | | ☐ | ☐ | ☐ | +| [WalletConnect](https://walletconnect.org/) | Open protocol for connecting Wallets to Dapps | [GitHub](https://github.com/walletconnect) | ☐ | ☒ | ☐ | +| [Citadel.one](https://citadel.one/) | Non-custodial Proof-of-Stake platform | | ☐ | ☒ | ☒ | +| [Geometry Labs](https://geometrylabs.io/) | [Load Balanced Endpoints Phase 2](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/load_balanced_endpoints_operations.md) | [GitHub](https://github.com/geometry-labs) | ☐ | ☒ | ☒ | +| [MAP labs](https://www.maplabs.io/) | [Map Bridge: Connect Polkadot and other PoW chains](./MAP-Bridge.md) | [GitHub](https://github.com/Philasande-map/mapbridge) | ☒ | ☐ | ☐ | +| [RareLink](http://rarelink.network/) | [Dynamic non-fungible token (NFT) Protocol](./RareLink.md) | [GitHub](https://github.com/RareLink) | ☐ | ☐ | ☐ | +| [Cere Network](http://cere.network/) | [Turnkey Private Blockchain Network](./Cere_Turnkey_Private_Blockchain_Network.md) | [GitHub](https://github.com/Cerebellum-Network) | ☐ | ☒ | ☒ | +| [SubDAO Labs](https://www.subdao.network/) | [SubDAO is a Cross-chain Platform to link DAO and DApp on Polkadot](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | +| [Idavoll Network](https://idavoll.network/) | [Decentralized organization platform](./Idavoll%20Network.md) | [GitHub](https://github.com/idavollnetwork) | ☐ | ☒ | ☒ | +| [Zenlink](https://zenlink.pro/) | [DEX Ink! smart contract](./zenlink-smart-contract.md) | [GitHub](https://github.com/zenlinkpro/zenlink_dex_module) | ☐ | ☐ | ☐ | +| [Setheum](https://setheum.xyz/) | [Setheum Elastic Reserve Protocol](./setheum.md) | [GitHub](https://github.com/Setheum-Labs/Setheum) | ☒ | ☐ | ☐ | +| [Everstake](https://everstake.one/) | [DKG msig wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Rabin_DKG_Library.md) | [GitHub](https://github.com/everstake) | ☐ | ☐ | ☐ | +| [Coinversation](http://coinversation.cn/) | [Decentralized exchange for trading synthetic assets](./Coinversation.md) | [GitHub](https://github.com/Coinversation) | ☒ | ☐ | ☐ | +| [Manta Network](https://www.manta.network/) | [A Privacy Preserving Decentralized Exchange](./manta_network.md) | [GitHub](https://github.com/Manta-Network) | ☐ | ☒ | ☐ | +| [Stake Technologies](https://stake.co.jp/en/) | [ZK Rollups Pallet](./zk-rollups.md) | [GitHub](https://github.com/staketechnologies) | ☐ | ☒ | ☐ | +| [Apron Network](https://apron.network/) | [Decentralized infrastructure provider](./Apron_Network.md) | [GitHub](https://github.com/apron-network) | ☐ | ☒ | ☒ | +| [Pocket 4D](https://pocket4d.io) | [Substrate Dart API client](./Polkadot-Dart.md) | [GitHub](https://github.com/Pocket4D) | ☐ | ☒ | ☐ | +| [Listen](https://listen.io/) | [Decentralized social network focusing on sound](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Listen.md) | [GitHub](https://github.com/ListenTeam) | ☒ | ☐ | ☐ | +| [Protofire](https://protofire.io/) | Polkadot Mempool Explorer | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☒ | +| [Fuzhou Wakanda Information Technology](https://www.heizuan.com/) | Black Diamond Wallet | [GitHub](https://github.com/bdwallet) | ☐ | ☐ | ☐ | +| [Konomi](http://konomi.network/) | [Pool Lending Module](./konomi.md) | [GitHub](https://github.com/konomi-network) | ☐ | ☒ | ☒ | +| [Acala](https://acala.network/) | [Bodhi:Composable & Innovative Stack for EVM](./project_bodhi.md) | [GitHub](https://github.com/AcalaNetwork/bodhi.js) | ☐ | ☒ | ☒ | +| [Pontem Network](https://pontem.network/) | [Move smart contract pallet](./pontem.md) | [GitHub](https://github.com/dfinance) | ☐ | ☒ | ☒ | +| [SpiderDAO](https://spiderdao.io) | [Hardware-based DAO governance](./SpiderDAO.md) | [GitHub](https://github.com/SpiderDAO) | ☐ | ☐ | ☐ | +| [onfinality](https://onfinality.io) | [Subquery: Open-source tool to process and query data](./subquery.md) | [GitHub](https://github.com/onfinality-io) | ☐ | ☒ | ☒ | +| FOS Foundation LTD | [Pacific store: OpenSea.js on polkadot](./pacific_store.md) | [GitHub](https://github.com/vlbos) | ☐ | ☒ | ☐ | +| [Polkadot Technology Alliance](https://polkachina.org) | [Shadows Network: synthetic assets](./shadows-network.md) | [GitHub](https://github.com/ShadowsNetwork) | ☒ | ☒ | ☐ | +| [BLDG BLOX](https://bldg.app/) | [ESG (Environmental, Social, and Corporate Governance) ratings dashboard](./bldg_app.md) | [GitHub](https://github.com/BLDG-BLOX/) | ☐ | ☐ | ☐ | +| [DEIPWORLD](https://deip.world/) | [IP Management/Governance Module](./deip.md) | [GitHub](https://github.com/DEIPworld) | ☐ | ☒ | ☐ | +| [Deeper.Network](https://deeper.network/) | [Micropayments pallet](./deeper_network.md) | [GitHub](https://github.com/e2chain-dev/deeper-chain) | ☐ | ☒ | ☒ | +| [Evanesco](https://evanesco.org/) | [Private network protocol](./evanesco_networks.md) | [GitHub](https://github.com/Evanesco-Labs) | ☐ | ☒ | ☒ | +| [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | +| [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | -| [Pawn](https://github.com/pawnz0) | [NuLink](./NuLink.md) | [GitHub](https://github.com/pawnz0/NuLink) | ☐ | ☒ | ☒ | -| [Cyril Carlier](https://github.com/CrommVardek) | [Polk-Auction Website](./polk-auction.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☒ | ☒ | -| [Uddug](https://uddug.com/) | [JuniDB - Peer-to-Peer Databases](./JuniDB.md) | [GitHub](http://github.com/uddugteam/) | ☒ | ☐ | ☐ | -| [Canyon Labs](https://canyon-network.io) | [Permanent decentralized storage Phase 2](./canyon_network.md) | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | -| [Skynet Labs](https://siasky.net/) | [Pallet for Decentralized Off-Chain Storage on Skynet](./skynet-substrate-integration.md) | [GitHub](https://gitlab.com/SkynetLabs) | ☐ | ☒ | ☒ | -| [Uniwrap/1001 Group](https://uniwrap.io/) | [Project 1001](./project_1001.md) | [GitHub](https://github.com/uniwrap-protocol) | ☐ | ☐ | ☐ | -| [YibanChen](https://yibanchen.com) | [Notes DApp & Site-Pallet](./yiban_chen1.md) | [GitHub](https://github.com/YibanChen/) | ☐ | ☒ | ☐ | -| [727.ventures](https://727.ventures/) | [OpenBrush - Secure smart-contract development on ink!](./openbrush.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | -| [Banksy Finance](http://www.banksy.finance/) | [NFT Pool-Based Lending Hub](./Banksy_Finance.md) | [GitHub](https://github.com/Banksy-Finance) | ☐ | ☐ | ☐ | -| [SubDAO Labs](https://www.subdao.network/) | [PolkaSign - Web3.0 app for electronic agreements](./SubDAO-Chrome-Extension.md) | [GitHub](https://github.com/subdao-network) | ☐ | ☒ | ☒ | -| [Valibre](https://valibre.org) | [People Local Interactions Protocol (PLIP)](./plip.md) | [GitHub](https://github.com/valibre-org/) | ☐ | ☐ | ☐ | -| [Reaudito](https://shivarthu.reaudito.com/#/) | [Shivarthu: A blockchain-based decentralized governance system](./Shivarthu.md) | [GitHub](https://github.com/amiyatulu/shivarthu) | ☐ | ☒ | ☐ | -| Uniscan | [NFT Explorer](./nft_explorer.md) | [GitHub](https://github.com/wuminzhe) | ☐ | ☒ | ☒ | -| [LimeChain](https://limechain.tech) | [Subsembly - Support for GRANDPA](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | -| [OpenSquare](https://www.opensquare.network) | [Off-chain voting platform](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | -| [Health Hero](https://www.gohealthhero.com/) | [NFT Product Analytics Suite](./nft_product_analytics_suite.md) | | ☐ | ☐ | ☐ | -| [Tesseract](https://tesseract.one/) | Mobile dApps/Wallet Connection | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | -| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace](./dot_marketplace.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | -| [Perun Network](https://perun.network/) | [Perun Channels - Integration with go-perun](./perun_channels-integration.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | -| [InvArchitects](https://www.invarch.io/) | [InvArch - IP Infrastructure for Substrate](./InvArch.md) | [GitHub](https://github.com/InvArch) | ☐ | ☒ | ☒ | -| [SubGame Network](https://subgame.org) | [A decentralized game platform Phase 2](./SubGame_Network_m2.md) | [GitHub](https://github.com/SubGame-Network) | ☐ | ☒ | ☒ | -| [CESS LAB](https://www.cess.cloud/) | [Cumulus Encrypted Storage System (CESS)](./CESS.md) | [GitHub](https://github.com/Cumulus2021/Whitepaper) | ☐ | ☒ | ☒ | -| [CheersLand Labs](https://cheersland.org/) | [Multi-game Platform for Polkadot & Kusama](./cheersland.md) | [GitHub](https://github.com/cheersland) | ☐ | ☐ | ☐ | -| [UNI-ARTS](https://app.uniarts.network/) | [Ruby Substate Client](./rb_substrate_client.md) | [GitHub](https://github.com/uni-arts-chain/sr25519) | ☐ | ☒ | ☐ | -| [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | -| [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 7 - Third Quarter 2020 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 12 - Fourth Quarter 2021 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Halva](https://github.com/halva-suite) | [A toolchain for improving the experience of developing Decentralized Applications based on Substrate](./halva_framework.md) | [GitHub](https://github.com/halva-suite) | ☐ | ☒ | ☒ | +| [Subscan](https://subscan.io) | [Substrate explorer](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/subscan_grant_application.md) | [GitHub](https://github.com/subscan-explorer/subscan-essentials) | ☐ | ☒ | ☒ | +| [t3rn](https://github.com/t3rn/t3rn) | [A protocol for blockchain interoperability](./xbi-format-psp-t3rn.md) | [GitHub](https://github.com/t3rn/t3rn) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [Hardware ECDSA for Polkadot JS](https://github.com/w3f/Grants-Program/blob/master/applications/polkadotjs-hardware.md) | [GitHub](https://github.com/polkadot-js) | ☐ | ☒ | ☒ | +| [Protofire](https://protofire.io/) | Failover mechanism for validators upgrade | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☐ | +| [DappForce](http://dappforce.io) | [SubSocial Chapter 2](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial-2.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | +| [OpenSquare Network](https://www.opensquare.network/) | [A blockchain based crowdsourcing and reputation platform](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/open_square_network.md) | [GitHub](https://github.com/opensquare-network) | ☐ | ☒ | ☒ | +| [Cardinals](https://cardinals.cc/) | [Threshold BLS Randomness Beacon for Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Threshold%20BLS%20Randomness%20Beacon%20for%20Substrate.md) | [GitLab](https://gitlab.com/cardinals1/threshold-ecdsa) | ☐ | ☒ | ☒ | +| [KILT](https://kilt.io/) | Polimec: A Fundraising Mechanism for Projects within the Polkadot Ecosystem | [GitHub](https://github.com/KILTprotocol) | ☐ | ☐ | ☐ | +| [Simply VC](https://simply-vc.com.mt/) | [P.A.N.I.C. Phase 2](./panic.md) | [GitHub](https://github.com/SimplyVC/panic_polkadot) | ☐ | ☐ | ☐ | +| [Interlay](https://www.interlay.io/) | Trustless BTC-Polkadot Bridge | [GitLab](https://gitlab.com/interlay) | ☐ | ☒ | ☐ | +| [DodoRare](https://github.com/enfipy) | [Crossbow: Mobile Game Framework for Substrate](./crossbow.md) | [GitHub](https://github.com/dodorare/crossbow) | ☐ | ☒ | ☒ | +| [Halva](https://github.com/halva-suite) | [Halva: Bootstrapping and Scaffolding](./halva_bootstrapping.md) | [GitHub](https://github.com/halva-suite) | ☐ | ☒ | ☒ | +| [Sunshine Systems](https://sunshine.foundation) | [Sunshine Keybase](./sunshine-keybase.md) | [GitHub](https://github.com/sunshine-protocol) | ☐ | ☒ | ☒ | +| [Subscan](https://subscan.io) | [Multi-signature Management Tool](./multisignature_management_tool.md) | [GitHub](https://github.com/subscan-explorer/subscan-multisig-react) | ☐ | ☒ | ☒ | +| [Evercity](https://evercity.io/) | Smart Sustainable Bond Protocol (SSB-P) | [GitHub](https://github.com/EvercityEcosystem/Smart-Sustainable-Bond) | ☐ | ☒ | ☒ | +| [Permiurly](http://permiurly.in) | [Polkassembly](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkassembly_grant_application.md) | [GitHub](https://github.com/premiurly/polkassembly) | ☐ | ☒ | ☒ | +| [Zeropool](https://zeropool.network/) | [Private transactions on Polkadot](./ZeroPool.md) | [GitHub](https://github.com/zeropoolnetwork) | ☐ | ☒ | ☐ | +| [Polkadex](https://github.com/Polkadex-Substrate) | [A decentralized, peer-peer, cryptocurrency exchange for DeFi ecosystem in Substrate](./polkadex.md) | [GitHub](https://github.com/Polkadex-Substrate/Polkadex) | ☒ | ☒ | ☐ | +| [Fractapp](https://fractapp.com) | [Messenger with crypto wallet](./fractapp.md) | [GitHub](https://github.com/fractapp) | ☐ | ☒ | ☒ | +| [Equilibrium.io](https://equilibrium.io/en) | [All-in-one Interoperable DeFi hub.](./curve_amm.md) | [GitHub](https://github.com/equilibrium-eosdt) | ☐ | ☒ | ☒ | +| [Glacier Blockchain Technology](http://www.gbctech.cn/#/) | [Starks Network](./starks_network.md) | [GitHub](https://github.com/gbctech) | ☐ | ☒ | ☒ | +| [SubDEX](http://subdex.io.s3.eu-west-2.amazonaws.com/index.html) | [A decentralized cross-chain exchange based on AMM](./subdex.md) | [GitHub](https://github.com/subdarkdex) | ☐ | ☒ | ☒ | +| [Zenlink](https://zenlink.pro/) | [A cross-chain DEX network](./zenlink.md) | [GitHub](https://github.com/zenlinkpro/zenlink_dex_module) | ☐ | ☒ | ☒ | +| [Subscript](https://github.com/slickup) | [Substrate smart contract api and sdk in AssemblyScript](./subscript_lang.md) | [GitHub](https://github.com/slickup/subscript) | ☐ | ☒ | ☒ | +| [Tesseract](https://tesseract.one/) | Swift API | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | +| [Cobo](https://cobo.com/) | Cobo Vault | [GitHub](https://github.com/CoboVault) | ☐ | ☒ | ☒ | +| [NodeFactory](https://nodefactory.io/) | [Vedar: Auto-funded public P2P infrastructure (APPI)](https://github.com/w3f/General-Grants-Program/blob/master/grants/rfp-responses/appi.md) | [GitHub](https://github.com/NodeFactoryIo/Vedran) | ☐ | ☒ | ☒ | +| [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit Phase 2 | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | +| [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | +| [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| Matthew Darnell | [cScale](./cScale.md) | [GitHub](https://github.com/MatthewDarnell/cScale) | ☐ | ☒ | ☐ | -| [Web3go](https://web3go.xyz/) | [Web3go](./Web3Go.md) | [GitHub](https://github.com/web3go-xyz) | ☐ | ☒ | ☐ | -| [Prosopo Limited](https://prosopo.io) | [Prosopo: Human Verification Marketplace](./prosopo.md) | [GitHub](https://github.com/prosopo-io) | ☐ | ☒ | ☒ | -| [Litentry](https://www.litentry.com) | [Polka SignIn](./PolkaSignIn.md) | [GitHub](https://github.com/litentry) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib](./php-rpc-lib.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☒ | -| [logion](https://logion.network/) | [Logion wallet](./logion_wallet.md) | [GitHub](https://github.com/logion-network) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [OpenBrush - Secure smart-contract development on ink! Phase 2](./openbrush-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | -| [Nitor Infotech](https://www.nitorinfotech.com/) | [Php substrate api](./php-substrate-api.md) | [GitHub](https://github.com/nitor-infotech-oss) | ☐ | ☒ | ☒ | -| [@agryaznov](https://github.com/agryaznov) | [Candle Auctions on Ink!](./candle_auction_ink.md) | [GitHub](https://github.com/agryaznov/candle-auction-ink) | ☐ | ☒ | ☒ | -| [Iridium Industries](http://www.iridium.industries) | [Iris: Decentralized storage network for substrate-based chains](./iris.md) | [GitHub](https://github.com/iridium-labs/iris) | ☐ | ☒ | ☒ | -| [DICO Team](https://dico.io/) | [DICO: Decentralized and governable ICO platform](./DICO.md) | [GitHub](https://github.com/DICO-TEAM/dico-chain) | ☐ | ☐ | ☐ | -| [DodoRare, Inc.](https://dodorare.com) | [Crossbow - Cross-Platform Rust Toolkit for Games](./faterium.md) | [GitHub](https://github.com/dodorare) | ☐ | ☒ | ☒ | -| [Rainbowcity Foundation](http://www.rainbowcity.io/) | [RainbowDAO Protocol ink! Phase 1](./RainbowDAO%20Protocol%20ink%20Phase%201.md) | [GitHub](https://github.com/RainbowcityFoundation/RainbowcityDAO) | ☐ | ☒ | ☒ | -| [Web Registry DAO](https://www.wika.network) | [Wika Network](./wika_network.md) | [GitHub](https://github.com/randombishop/wika_node) | ☐ | ☒ | ☐ | -| [Helikon Labs](http://www.helikon.tech/) | [SubVT Telegram Bot for Kusama and Polkadot](./subvt-telegram-bot.md) | [GitHub](https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot) | ☐ | ☒ | ☒ | -| [Elamin LTD](http://imbue.network/) | [Imbue Network](./imbue_network.md) | [GitHub](https://github.com/ImbueNetwork) | ☐ | ☒ | ☒ | -| [Koi Metaverse](https://koi.io/) | [Building the Digital Collectibles Platform for Virtual GameFi NFTs](./Koiverse.md) | [GitHub](https://github.com/KoiMetaverse) | ☐ | ☐ | ☐ | -| [Health Hero](https://www.gohealthhero.com/) | [Decentralized Well-being Game API](./decentralized_well-being_game_api.md) | [GitHub](https://github.com/iumairazhar) | ☐ | ☐ | ☐ | -| [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | -| [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | -| Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | +### 🏄‍♀️ Wave 6 - Second Quarter 2020 +[Menu🔝](#menu) -## 2022 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Protofire](https://protofire.io/) | Failover mechanism for validators | [GitHub](https://github.com/protofire) | ☐ | ☒ | ☒ | +| [HashQuark](https://www.hashquark.io/) | Validator Dashboard Phase 2 | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | +| [BUIDL Labs](https://buidllabs.io/) | [YieldScan Staking Dashboard](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/YieldScan.md) | [GitHub](https://github.com/buidl-labs) | ☐ | ☒ | ☒ | +| BoBao Technologies | [PolkaKey an electron app to generate Polkadot addresses + tutorials](./PolkaKey.md) | [GitHub](https://github.com/w3finance/PolkaKey) | ☐ | ☒ | ☐ | +| [Webassembly Security](https://webassembly-security.com/) | [Improving security and resilience of WebAssembly runtimes](./wasm_runtimes_fuzzing.md) | [GitHub](https://github.com/pventuzelo/wasm_runtimes_fuzzing) | ☐ | ☒ | ☒ | +| [Finoa](https://finoa.io/) | C library for Substrate | [GitHub](https://github.com/finoabanking/substrate-c-tool) | ☐ | ☒ | ☒ | +| [Crust Network](https://crust.network/) | Incentive layer protocol for decentralized storage | [GitHub](https://github.com/crustio) | ☐ | ☒ | ☒ | +| [ETCDEV](https://emeraldpay.io/) | Polkadot Java Client | [GitHub](https://github.com/emeraldpay) | ☐ | ☒ | ☒ | +| [Zondax](http://zondax.ch/) | Ledger app for Polkadot/Kusama Phase 2 | [GitHub](https://github.com/ZondaX/ledger-polkadot) | ☐ | ☒ | ☒ | +| [Soramitsu](https://soramitsu.co.jp/) | Hyperledger Iroha Bridge | [GitHub](https://github.com/sora-xor/polkaswap-web) | ☐ | ☒ | ☒ | +| [LimeChain](https://github.com/LimeChain) | [AssemblyScript SCALE Codec](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain/as-scale-codec) | ☐ | ☒ | ☒ | +| [Insight](https://insightfellows.com/) | [Load Balanced Endpoints](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/load_balanced_endpoints_operations.md) | [GitHub](https://github.com/insight-w3f/terragrunt-polkadot) | ☐ | ☒ | ☒ | +| [Ethworks](https://ethworks.io/) | [Polkadot.{js} Desktop Application](./polkadot-desktop-app.md) | [GitHub](https://github.com/EthWorks/) | ☐ | ☒ | ☒ | +| [Usetech](http://usetech.com/blockchain.html) | NFT Tracking Module | [GitHub](https://github.com/usetech-llc/nft_parachain) | ☐ | ☒ | ☒ | +| [Chevdor](https://www.chevdor.com/) | Polkabot | [GitHub](https://github.com/chevdor) | ☐ | ☒ | ☒ | +| [Aleksandr Krupenkin](https://github.com/akru) | [Haskell Web3 library](./hs-web3.md) | [GitHub](https://github.com/airalab/hs-web3) | ☐ | ☒ | ☒ | +| [WEB3SCAN](https://www.web3scan.com/) | [Polkascan Signer Interfaces](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkascan_signer_interfaces.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | +| [Fortmatic](https://fortmatic.com/) | SDK + Burner Wallet to implement Web 2.0 login for dapps | [GitHub](https://github.com/fortmatic) | ☐ | ☐ | ☐ | +| [PureStake](https://www.purestake.com/) | [Web3 Compatible API](./web3-compatible-api.md) | [GitHub](https://github.com/PureStake) | ☐ | ☒ | ☒ | +| [Phala.Network](https://phala.network/) | [Web3 Analytics](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/web3_analytics.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☐ | ☐ | +| [TerenceGe](https://github.com/TerenceGe) | [C implementation of Schnorrkel](./sr25519_donna.md) | [GitHub](https://github.com/TerenceGe/sr25519-donna) | ☐ | ☒ | ☒ | +| [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | +| [Laminar One](https://laminar.one/) | Reusable Libraries: Runtime Modules + Monitoring Framework | [GitHub](https://github.com/open-web3-stack) | ☐ | ☒ | ☒ | +| [Faber](https://github.com/yxf) | [Subwallet: CLI wallet for Polkadot/Substrate](./subwallet.md) | [GitHub](https://github.com/yxf/subwallet) | ☐ | ☒ | ☒ | +| [Equilibrium.co](https://equilibrium.co/) | [offchain::ipfs](./c++polkadot-light-client.md) | [GitHub](https://github.com/eqlabs) | ☐ | ☒ | ☒ | +| [Snowfork](http://www.snowfork.com/) | Ethereum Bridge | [GitHub](https://github.com/snowfork) | ☐ | ☒ | ☒ | +| [Lunie](http://lunie.io/) | [Lunie Governance integration](./lunie.md) | [GitHub](https://github.com/luniehq/lunie) | ☐ | ☒ | ☒ | +| [LimeChain](https://github.com/LimeChain) | [AssemblyScript Runtime](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | +| [MVP Workshop](https://mvpworkshop.co/) | [Substrate startkit GUI (marketplace for substrate pallets)](./substrate_startkit_GUI.md) | [GitHub](https://github.com/MVPWorkshop) | ☐ | ☒ | ☒ | +| [P2P](https://p2p.org/) | [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md) | [GitHub](https://github.com/p2p-org/polkadot-profit-transformer) | ☐ | ☒ | ☒ | +| [FlexDapps](https://flexdapps.com/) | Gantree Phase 4 | [GitHub](https://github.com/flex-dapps) | ☐ | ☐ | ☐ | +| [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | +| [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | -### 🏄‍♀️ Wave 13 - First Quarter 2022 +### 🏄‍♀️ Wave 5 - First Quarter 2020 +[Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :---------------------------------------------------- | :-------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Chainify](https://github.com/chainify) | [Nolik](./Nolik.md) | [GitHub](https://github.com/chainify) | ☐ | ☒ | ☒ | -| [Pennsylvania State University](https://www.psu.edu/) | Avoiding Rust Deadlocks via Lifetime Visualization | [GitHub](https://songlh.github.io/) | ☐ | ☒ | ☒ | -| [Anagolay](https://anagolay.network/) | [Project Idiyanale](./anagolay-project-idiyanale-phase-1.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | -| [Fennel Labs](https://fennellabs.com/) | [Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | -| [Valletech AB](https://valletech.eu/) | [Polkawatch](./Polkawatch.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☒ | ☒ | -| [EzCode](https://ezcode.co/) | [Polkadot.js NoCode Plugin](./polkadotjs_no_code.md) | [GitHub](https://github.com/inartin) | ☐ | ☒ | ☒ | -| [Virto Network](https://virto.network/) | [LIP payments pallet](./lip_payments.md) | [GitHub](https://github.com/virto-network/) | ☐ | ☒ | ☒ | -| [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot.js Plus Extension](./Plus.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | -| [Dora Factory](https://dorafactory.org/) | [Multisig UI](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☒ | -| [Blackprint](https://github.com/Blackprint) | [Integrating Polkadot.js with Blackprint](./blackprint-js.md) | [GitHub](https://github.com/Blackprint) | ☐ | ☒ | ☒ | -| [OpenSquare Network](https://www.opensquare.network/) | [OpenSquare Paid QA protocol](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | -| [@Scale Technologies](https://atscale.xyz) | [Libra - Decentralized Payment Network](./Libra.md) | [GitHub](https://github.com/atscaletech/) | ☐ | ☒ | ☒ | -| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☐ | -| [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | -| [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | -| [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | -| [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☐ | ☐ | -| [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | -| [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☐ | ☐ | ☐ | -| [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | -| [Asylum](https://asylum.space/) | [Metaverse for next generation gaming](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☒ | -| [CESS LAB](https://www.cess.cloud/) | [Data Store Pallet](./ces_data_store.md) | [GitHub](https://github.com/CESSProject/cess) | ☐ | ☒ | ☒ | -| [ChainSafe](https://chainsafe.io/) | [Substrate Core Polywrapper](./substrate_core_polywrapper.md) | [GitHub](https://github.com/polywrap) | ☐ | ☐ | ☐ | -| [Bela Supernova](https://bsn.si/en/home/) | [On-chain cash exchange (OCEX)](./on-chain-cash.md) | | ☐ | ☒ | ☒ | -| [Second State](https://www.secondstate.io/) | [WasmEdge for Substrate](./wasmedge_substrate.md) | [GitHub](https://github.com/wasmedge) | ☐ | ☒ | ☐ | -| [Wow Labz](https://www.wowlabz.com/) | [Dot Marketplace Phase 2](./dot_marketplace-phase2.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | -| [Stardust Labs Inc.](https://stardust.finance/) | [Uncollateralized Stablecoin Research and Design](./stardust.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | -| [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | -| [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | -| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☐ | ☐ | -| [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./stable-asset.md) | [GitHub](https://github.com/nutsfinance/) | ☐ | ☒ | ☒ | -| [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :---------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Bifrost](https://bifrost.finance/) | [EOS interoperable bridge](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/bifrost_network.md) | [GitHub](https://github.com/bifrost-finance) | ☐ | ☒ | ☒ | +| [Entropy Labs](https://entropylabs.hk) | A toolkit for building and deploying applications with substrate | | ☐ | ☒ | ☐ | +| [Papers GmbH](https://airgap.it) | AirGap - Desktop (+mobile) wallet for Polkadot | [GitHub](https://github.com/airgap-it) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [Plasm Chain + OVM Implementation](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PlasmChian.md) | [GitHub](https://github.com/staketechnologies/) | ☐ | ☒ | ☐ | +| [Usetech](http://usetech.com/blockchain.html) | [PostgreSQL Indexer and Consensus Insurer](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/postgre_indexer_consensus_ensurer.md) | [GitHub](https://github.com/usetech-llc/) | ☐ | ☒ | ☒ | +| [Acala](https://acala.network/) | [A decentralized stablecoin platform](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/stablecoin_acala.md) | [GitHub](https://github.com/AcalaNetwork) | ☐ | ☒ | ☒ | +| [ETCDEV](https://emeraldpay.io/) | [Polkadot Network Crawler](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/crawler.md) | [GitHub](https://github.com/emeraldpay) | ☐ | ☒ | ☒ | +| [Xaya](https://xaya.io/) | Decentralised Complex Gaming | [GitHub](https://github.com/xaya) | ☐ | ☒ | ☒ | +| [Celer](https://www.celer.network/) | Layer 2 Scaling Infrastructure | [GitHub](https://github.com/celer-network) | ☐ | ☒ | ☐ | +| [Cryptoeconomics Lab](https://www.cryptoeconomicslab.com/) | Substrate adapter of Plasma child chain | [GitHub](https://github.com/cryptoeconomicslab) | ☐ | ☐ | ☐ | +| [Centrifuge / ChainSafe](https://centrifuge.io/) | Substrate / Ethereum Bridge | [GitHub 1](https://github.com/centrifuge/), [Github 2](https://github.com/ChainSafe/ChainBridge) | ☐ | ☒ | ☒ | +| [Advanca](https://www.advanca.network/) | Privacy-preserving general-purpose compute/storage layer | [GitHub](https://github.com/advanca) | ☐ | ☒ | ☒ | +| [Nodle](https://nodle.io) | Securely identify, certify and verify IoT devices | [GitHub](http://github.com/NodleCode/) | ☐ | ☒ | ☒ | +| [Figment](https://figment.network/) | DotHub: Information Hub for validators and delegators | [GitHub](https://github.com/figment-networks/dothub) | ☐ | ☒ | ☒ | +| [Lunie](http://lunie.io/) | [Web and mobile wallet](./lunie.md) | [GitHub](https://github.com/luniehq/lunie) | ☐ | ☒ | ☒ | +| [Web3 Gardens](https://web3.garden) | [Runtime modules and UI for creating stable, well-governed communities on Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/sunshine.md) | [GitHub](https://github.com/web3garden/sunshine) | ☐ | ☒ | ☐ | +| [Itering](https://itering.com/) | [Ruby Substrate API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ruby_substrate_api.md) | [GitHub](https://github.com/itering) | ☐ | ☒ | ☒ | +| [WEB3SCAN](https://www.web3scan.com/) | [Identity Pallet for Polkascan](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkascan_account_module.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | +| [Swisscom Blockchain AG](https://www.blockchain.swisscom.com/) | [Kubernetes Operator for Sentry nodes or Validators deployment](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/aPois.md) | [GitHub](https://github.com/swisscom-blockchain) | ☐ | ☒ | ☒ | +| [Polkastats](https://polkastats.io/) | [Polkadot/Kusama network statistics](./polkastats.md) | [GitHub](https://github.com/Colm3na/polkastats-v3) | ☐ | ☒ | ☒ | +| [Supercomputing Systems](https://www.scs.ch/) | [SubstraTEE extension pack](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/SubstraTEE-extension-pack1.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | +| [Encointer](https://encointer.org/) | [An Ecological, Egalitarian and Private Cryptocurrency and Self-Sovereign Identity System](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/encointer-testnet.md) | [GitHub](https://github.com/encointer) | ☐ | ☒ | ☒ | +| [FlexDapps](https://flexdapps.com/) | Gantree is a full-service node infrastructure toolkit for Substrate-based blockchains | [GitHub](https://github.com/flex-dapps) | ☐ | ☒ | ☒ | +| [Matter Labs](https://matter-labs.io) | Zinc/RedShift ZK programming framework | [GitHub](https://github.com/matter-labs) | ☐ | ☐ | ☐ | +| [Second State](https://www.secondstate.io/) | [Bridging Ethereum Tools and Smart Contracts into Substrate Ecosystem](./wasmedge_substrate.md) | [GitHub](https://github.com/second-state) | ☐ | ☒ | ☒ | +| [Sensio.Group](https://ipfs.io/ipfs/bafybeihoqt3gvmd5wbqkxt52lojuvbvgoydan3aadxhvf37qdyvpgl762e/index.html) | [Substrate modules + UI that focus on photo copyright and privacy](./sensio_network.md) | [GitLab](https://gitlab.com/sensio_group) | ☐ | ☒ | ☐ | +| [KILT](https://kilt.io/) | [Substrate Anonymous Credentials](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/KILT_AnonymousCredentials.md) | [GitHub](https://github.com/KILTprotocol) | ☐ | ☒ | ☒ | +| [Node Factory](https://www.nodefactory.io/) | [Metamask plugin for Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/metamask-plugin-polkadot.md) | [GitHub](https://github.com/nodefactoryIo) | ☐ | ☒ | ☒ | +| [Interlay](https://www.interlay.io/) | Polkadot/BTC bridge specification (RFP) | [GitLab](https://gitlab.com/interlay/polkabtc-spec) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [ECDSA for Polkadot JS](https://github.com/w3f/Grants-Program/blob/master/applications/polkadotjs-ecdsa.md) | [GitHub](https://github.com/staketechnologies/apps) | ☐ | ☒ | ☒ | +| [Obsidian Labs](https://www.obsidians.io/) | Substrate IDE | [GitHub](https://github.com/ObsidianLabs) | ☐ | ☒ | ☒ | +| [Definex](https://definex.io/) | A financial market protocol | [GitHub](https://github.com/definex/definex-libs) | ☐ | ☒ | ☒ | +| [Attic Lab](https://atticlab.net/) | Multisignature Wallet Standardization/PSP | [GitHub](https://github.com/w3f/PSPs) | ☐ | ☒ | ☒ | +| [ImToken](https://token.im/) | Multi-chain non-custodial mobile and hardware wallet for iOS & Android | [GitHub](https://github.com/consenlabs/) | ☐ | ☒ | ☒ | +| [SelfKey](https://selfkey.org/) | SelfKey DIDs & Claims as Ink! Smart Contracts | [GitHub](https://github.com/SelfKeyFoundation) | ☐ | ☐ | ☐ | +| [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | +| [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | -### 🏄‍♀️ Wave 14 - Second Quarter 2022 +## 2019 -| Team | Project | Link | Terminated | First Delivery | Completed | -| :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [TDSoftware](https://www.tdsoftware.de/) | [SubIdentity](./SubIdentity.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | -| [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | -| [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☐ | ☐ | -| [Perun Network](https://perun.network/) | [Perun App Channels](./perun_app_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | -| [ChainSafe Systems](https://chainsafe.io/) | [Privacy enhancement for Polkadot-js extension](./polkadot-js-extension-per-account-auth.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | -| [BQP](https://qbitcoin.tech/) | [Quantum Lock for QBITCOIN](./quantumLock.md) | [GitHub](https://github.com/bqpquantum/) | ☐ | ☐ | ☐ | -| [Simply VC](https://simply-vc.com.mt/) | [PANIC Monitoring and Alerting For Blockchains](./panic.md) | [GitHub](https://github.com/SimplyVC/panic) | ☐ | ☒ | ☒ | -| [Artree LLC](https://artree.co.jp/) | [Zero Network](./zero-network.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | -| [sigma prime](https://sigmaprime.io/) | Differential Fuzzer | [GitHub](https://github.com/sigp) | ☐ | ☐ | ☐ | -| [t3rn](https://www.t3rn.io/) | [XBI - xcm-based high-level standard and interface (ABI) for smart contracts](./xbi-format-psp-t3rn.md) | [GitHub](https://github.com/t3rn/t3rn) | ☐ | ☒ | ☒ | -| [Dante Network](https://www.dantechain.com/) | [Dante Network](./Dante_Network.md) | [GitHub](https://github.com/dantenetwork) | ☐ | ☒ | ☒ | -| [Verida](https://www.verida.io/) | [Single Sign-On for Apps](./verida_network.md) | [GitHub](https://github.com/verida) | ☐ | ☐ | ☐ | -| [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | -| [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | -| [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | -| [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | -| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | -| [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | -| [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | -| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | -| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | -| [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☐ | -| [Ideal Labs](https://www.idealabs.network/) | [Iris: Phase 2](./iris_followup.md) | [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | -| [NeoPower](https://www.neopower.digital/) | [Roloi: Stream money from one wallet to another](./Roloi.md) | [GitHub](https://github.com/RoloiMoney) | ☐ | ☒ | ☒ | -| [Tribal Protocol Labs](https://www.tribal.fyi/) | [Tribal Protocol Smart Contract Development](./tribal_protocol.md) | [GitHub](https://github.com/tribal-protocol) | ☐ | ☒ | ☐ | -| [Yahuang Wu](https://github.com/wuyahuang) | [Dual-Key Stealth Address Protocol](./DKSAP.md) | [GitHub](https://github.com/wuyahuang) | ☐ | ☒ | ☒ | -| [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [Universaldot.me Phase 2](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☒ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 1](./Societal.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | -| [Faceless Protocol](https://github.com/HeisenbergLin22) | [Faceless Protocol](./faceless.md) | [GitHub](https://github.com/HeisenbergLin22) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [Typechain](./typechain-polkadot.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | -| [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | -| [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☐ | -| [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 4 - Fourth Quarter 2019 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 15 - Third Quarter 2022 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Genesis Lab](https://genesislab.net/) | Validator Tracker | [GitHub](https://github.com/genesis-lab-team) | ☐ | ☒ | ☒ | +| [Usetech](http://usetech.com/blockchain.html) | [Substrate API in .NET](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/dotnet_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_dotnet) | ☐ | ☒ | ☒ | +| [BlockX Labs](http://blockxlabs.com/) | [Enzyme Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Enzyme.md) | [GitHub](https://github.com/blockxlabs/enzyme) | ☐ | ☒ | ☒ | +| [WEB3SCAN](https://www.web3scan.com/) | [Python API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/python_substrate_api.md) | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | +| [Galactic Council](https://github.com/galacticcouncil) | [Polkalert: Validator Monitoring](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PolkAlert.md) | [GitHub](https://github.com/galacticcouncil/polkalert) | ☐ | ☒ | ☒ | +| [Bandot](http://bandot.io/) | Stablecoin | [GitHub](https://github.com/bandotorg/Bandot) | ☒ | ☒ | ☐ | +| [Laminar One](https://laminar.one/) | LaminarChain: High performance Flow Protocols powering synthetic asset and margin trading | [GitHub](https://github.com/laminar-protocol/laminar-chain) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [Ink! Playground](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ink_playground.md) | [GitHub](https://github.com/staketechnologies/ink-playground) | ☐ | ☒ | ☒ | +| [B-Harvest](https://bharvest.io/) | [Node Monitoring Tool](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate%20x%20(prometheus%20%2B%20grafana)%20by%20B-Harvest.md) | [GitHub](https://github.com/b-harvest) | ☐ | ☒ | ☐ | +| [Simply VC](https://simply-vc.com.mt/) | [P.A.N.I.C. Validator alerting solution](./panic.md) | [GitHub](https://github.com/SimplyVC/panic_polkadot) | ☐ | ☒ | ☒ | +| [Ethworks](https://ethworks.io/) | [Polkadot{.js} extension improvements](./polkadot-desktop-app.md) | [GitHub](https://github.com/ethWorks) | ☐ | ☒ | ☒ | +| [Lyken Software Solutions](https://lyken.rs/) | Investigation of runtime compilation | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☒ | +| [Blockchain IT](https://blockchain-it.hr) | [Ink! Remix Plugin](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ink-remix-plugin.md) | [GitHub](https://github.com/blockchain-it-hr/ink-remix-plugin) | ☐ | ☒ | ☒ | +| [Kadena](https://www.kadena.io/) | Pact feasibility study | [GitHub](https://github.com/kadena-io/) | ☐ | ☐ | ☐ | +| [STAFI Protocol](http://www.stafi.io/) | Stafi is a protocol to provide liquidity for staking assets | [GitHub](https://github.com/stafiprotocol/stafi-node) | ☐ | ☒ | ☒ | +| [Vision Baker](https://playproject.io/) | [DatDot — Dat protocol for Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/datdot.md) | [GitHub](https://github.com/playproject-io/datdot) | ☐ | ☒ | ☐ | +| [Speckle OS](https://www.speckleos.io/) | [Integrating additional features into Speckle OS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Speckle%20Application.md) | [GitHub](https://github.com/SpeckleOS/speckle-browser-extension) | ☐ | ☐ | ☐ | +| [Archipel](https://archipel.id/) | [Solution to resolve high availability problem of Validator nodes in PoS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/archipel.md) | [GitHub](https://github.com/luguslabs/archipel) | ☐ | ☒ | ☒ | +| [Zondax](https://zondax.ch/) | Flexible TrustZone-based HSM stack | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | +| [Usetech](http://usetech.com/blockchain.html) | SR25519 library in pure C and C# | [GitHub](https://github.com/usetech-llc/) | ☐ | ☒ | ☒ | +| [Akropolis](https://akropolis.io/) | [PolkaHub — Heroku-like infrastructure for node deployment](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/PolkaHub.md) | [GitHub](https://github.com/akropolisio) | ☐ | ☒ | ☒ | +| [Pixura](https://pixura.io/) | [Substrate API client in Haskell](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/polkadot_substrate_haskell_api.md) | [GitHub](https://github.com/Pixura) | ☐ | ☐ | ☐ | +| [HashQuark](https://www.hashquark.io/) | Validator Dashboard | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | +| [Stacktical](https://stacktical.com/) | [Performance Management Runtime Modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/predictive_performance_management_runtime_module.md) | [GitHub](https://github.com/Stacktical) | ☐ | ☒ | ☐ | +| [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | +| [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | -| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | -| [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | -| [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | -| [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | -| [B-Datagray](https://www.b-datagray.com/) | [Datagen Project](./Datagen_Project.md) | [GitHub](https://github.com/Datagen-Project) | ☐ | ☒ | ☐ | -| [Colorful Notion](https://polkaholic.io/#chains) | [Polkaholic.io's Multi-Chain Substrate Block Explorer](./Polkaholic.md) | [GitHub](https://github.com/colorfulnotion/polkaholic/) | ☐ | ☐ | ☐ | -| [Common Orbit LLC](https://brson.github.io) | [`wasm-opt` for Rust](./wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☒ | -| [Blockcoders](https://blockcoders.io/) | [Ink Explorer](./ink-explorer.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | -| [Equilibrium](https://equilibrium.co/) | [Polkadot Light Client in C++](./c++polkadot-light-client.md) | [GitHub](https://github.com/eqlabs) | ☐ | ☒ | ☒ | -| [Open rollup](https://github.com/openrollup-zk) | [Open rollup - MVP - Phase 1](./openrollup-mvp-phase-1.md) | [GitHub](https://github.com/openrollup-zk) | ☐ | ☐ | ☐ | -| [Veridise](https://veridise.com/) | [Vanguard](./vanguard.md) | [GitHub](https://github.com/Veridise/Vanguard) | ☐ | ☐ | ☐ | -| [Karolis Ramanauskas](https://krl.is/) | [Generic Sybil-Resistant Faucet](./Faucet.md) | [GitHub](https://github.com/karooolis) | ☐ | ☒ | ☒ | -| [LimeChain](https://limechain.tech/) | [Research feasibility for a Go Runtime](./research-feasibility-go-runtime.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | -| [Jim Yam](https://github.com/JimYam) | [daos](./daos.md) | [GitHub](https://github.com/daos-org/daos.git) | ☐ | ☒ | ☒ | -| [Green Lemon](https://github.com/GreenLemonProtocol) | [Green Lemon Protocol](./GreenLemon.md) | [GitHub](https://github.com/GreenLemonProtocol) | ☐ | ☒ | ☒ | -| [Stardust Labs Inc.](https://stardust.finance/) | [Integrating ISO-8583](./Integrating-ISO8583.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | -| [TwinP](https://www.linkedin.com/in/elioprifti/) | [Escrow Pallet](./escrow_pallet.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | -| [Meta Defender Team](https://github.com/Meta-Defender/) | [Meta Defender](./Meta_Defender.md) | [GitHub](https://github.com/Meta-Defender/) | ☐ | ☐ | ☐ | -| [ParaSpell](https://github.com/paraspell) | [ParaSpell](./ParaSpell.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [Primis Labs](https://github.com/Primis-Labs) | [Primis](./Primis.md) | [GitHub](https://github.com/Primis-Labs/client) | ☐ | ☒ | ☒ | -| [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | -| [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | -| [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | -| [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | -| [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | -| [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | -| [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | -| [TopMonks](https://www.topmonks.com/) | [Calamar](./Calamar.md) | [GitHub](https://github.com/topmonks/calamar) | ☐ | ☒ | ☐ | -| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper](./RubeusKeeper.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | -| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☐ | -| [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | -| [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | -| [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | -| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☐ | -| [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | -| ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | -| [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | -| [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | +### 🏄‍♀️ Wave 3 - Third Quarter 2019 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [Supercomputing systems](http://scs.ch/) | [Substrate Rust API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate-api-client.md) | [GitHub](https://github.com/scs/substrate-api-client) | ☐ | ☒ | ☒ | +| [NGRAVE](https://ngrave.io/) | [Substrate Hardware Wallet Integration](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/ngrave_substrate_1.md) | | ☐ | ☒ | ☐ | +| [Caelum Labs](https://caelumlabs.com/) | [Decentralised identity modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Self%20Sovereign%20Identity%20layer%20as%20a%20Polkadot%20runtime.md) | | ☐ | ☒ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | Build executable K specifications of the SRML | [GitHub](https://github.com/runtimeverification/polkadot-verification) | ☐ | ☒ | ☒ | +| [Attic Lab](https://atticlab.net/) | [VS Code and Atom plugins](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/vscode_plugin.md) | [GitHub](https://github.com/everstake/VSCode-Atom-Plugin) | ☐ | ☒ | ☒ | +| [Dock](http://dock.io/) | Verifiable Claims | | ☐ | ☒ | ☐ | +| [Blockdaemon](https://blockdaemon.com/) | Polkadot Package Manager | [GitHub](https://github.com/Blockdaemon/bpm-sdk) | ☐ | ☒ | ☒ | +| [Zondax](http://zondax.ch/) | Ledger app for Polkadot | [GitHub](https://github.com/ZondaX/ledger-polkadot) | ☐ | ☒ | ☒ | +| [Geefu](https://www.geefu.net/) | [Vue JS components for Polkadot JS apps](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Vuejs_ui-components.md) | [GitHub](https://github.com/vue-polkadot) | ☐ | ☒ | ☒ | +| [Centrifuge](https://centrifuge.io/) | [Substrate Go API client](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/centrifuge_go_substrate_rpc_client.md) | [GitHub](http://github.com/centrifuge) | ☐ | ☒ | ☒ | +| [Litentry](https://www.litentry.com/) | [Identity modules and corresponding UIs](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/litentry.md) | [GitHub](https://github.com/litentry/litentry-runtime) | ☐ | ☒ | ☒ | +| [DappForce](http://dappforce.io) | [SubSocial - Substrate module and web UI for decentralized communities](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | +| [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | +| [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | -| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | -| [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | -| [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | -| [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | -| [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | -| [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | -| [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | -| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | -| [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | -| [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | -| [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | -| [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | -| [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | -| [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | -| [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | -| [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | -| [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | -| [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | -| [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | -| [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | -| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | -| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | -| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | -| [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | -| [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☐ | ☐ | -| [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | -| [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | -| [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | -| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | -| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | -| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | -| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | +### 🏄‍♀️ Wave 2 - Second Quarter 2019 +[Menu🔝](#menu) -### 🏄‍♀️ Wave 17 - First Quarter 2023 +| Team | Project | Link | Terminated | First Delivery | Completed | +| :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :--------- | :------------: | :-------: | +| [Cap9](https://cap9.io/) | A low-level security protocol and framework for smart contracts | [GitHub](https://github.com/Daohub-io/cap9) | ☐ | ☒ | ☒ | +| Substrate Java API | Java version of our JS API | [GitHub](https://github.com/polkadot-java) | ☐ | ☒ | ☒ | +| [Starlog](https://pact.care/) | [A metadata chain for IPFS](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/starlog.md) | [GitHub](https://github.com/PACTCare/Starlog) | ☐ | ☒ | ☐ | +| [MixBytes](https://mixbytes.io/) | [Benchmarking tool for Substrate and Polkadot](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/MixBytes_Tank.md) | [GitHub](https://github.com/mixbytes/tank) | ☐ | ☒ | ☒ | +| [Gunclear](https://gunclear.io/) | [Private secure data storage solution using Plasma Cash in Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/GunClear.md) | [GitHub](https://github.com/GunClear) | ☒ | ☒ | ☐ | +| [ZeroChain](https://layerx.co.jp/) | [Zero knowledge transactions in Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/zerochain.md) | [GitHub](https://github.com/LayerXcom/zero-chain) | ☐ | ☒ | ☒ | +| [Robonomics](https://robonomics.network/) | [Substrate modules for controlling robots](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/robotics_in_polkadot.md) | [GitHub](https://github.com/airalab/substrate-node-robonomics) | ☐ | ☒ | ☐ | +| [Avado](https://ava.do/) | Polkadot node deployment with consumer hardware | [GitHub](https://github.com/AvadoDServer/AVADO-DNP-Polkadot-custom) | ☐ | ☒ | ☒ | +| [Stake Technologies](https://stake.co.jp/) | [Plasma modules for Substrate](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/plasm.md) | [GitHub](https://github.com/staketechnologies/Plasm) | ☐ | ☒ | ☒ | +| [HOPR](https://hopr.network/) | [Substrate integration with this P2P messaging protocol](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/messaging.md) | [GitHub](https://github.com/validitylabs/HOPR-PL-Substrate) | ☐ | ☒ | ☒ | +| [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | +| [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | -| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | -| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | -| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | -| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | -| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | -| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | -| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | -| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | -| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | -| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | -| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | -| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | -| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | +### 🏄‍♀️ Wave 1 - First Quarter 2019 +[Menu🔝](#menu) + +| Team | Project | Link | Terminated | First Delivery | Completed | +| :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- | :--------- | :------------: | :-------: | +| [ChainSafe](https://chainsafe.io/) | Polkadot Runtime Environment in Go (via an RFP) | [GitHub](https://github.com/ChainSafeSystems/gossamer) | ☐ | ☒ | ☒ | +| [Soramitsu](https://soramitsu.co.jp/) | Polkadot Runtime Environment in C++ (via an RFP) | [GitHub](https://github.com/soramitsu/kagome) | ☐ | ☒ | ☒ | +| [WEB3SCAN](https://www.web3scan.com/) | Polkascan: Open Source Block Explorer | [GitHub](https://github.com/polkascan) | ☐ | ☒ | ☒ | +| [Polkawallet](https://polkawallet.io/) | [Mobile Wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Polkawallet%20Team.md) | [GitHub](https://github.com/polkawallet-io/polkawallet-RN) | ☐ | ☒ | ☐ | +| [Validators](http://validators.com/) | Open Source Scalable Cluster | [GitHub](https://github.com/Validators) | ☐ | ☒ | ☒ | +| [BlockX Labs](http://blockxlabs.com/) | [Enzyme Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Enzyme.md) | [GitHub](https://github.com/blockxlabs/enzyme) | ☐ | ☒ | ☒ | +| [Speckle OS](https://www.speckleos.io/) | [Browser extension wallet](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/speckleos.md) | [GitHub](https://github.com/SpeckleOS/speckle-browser-extension) | ☐ | ☒ | ☒ | +| [Noise Explorer](https://symbolic.software/) | Rust code generator for formally verified (Noise/ cryptographic) handshakes | [Source Code](https://source.symbolic.software/noiseexplorer/noiseexplorer) | ☐ | ☒ | ☒ | +| [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | +| [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | diff --git a/docs/maintenance b/docs/maintenance new file mode 120000 index 00000000000..765a7bbc5c3 --- /dev/null +++ b/docs/maintenance @@ -0,0 +1 @@ +../maintenance \ No newline at end of file From 6fca8f2d498c45f701dd6084e56b5ea1c0077db1 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 9 Feb 2023 08:47:57 -0800 Subject: [PATCH 061/665] Update stale_checker.yml (#1525) Point workflow to new action repo --- .github/workflows/stale_checker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale_checker.yml b/.github/workflows/stale_checker.yml index f8c84235c9b..239a9adc731 100644 --- a/.github/workflows/stale_checker.yml +++ b/.github/workflows/stale_checker.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - id: stale - uses: 0xCaso/label-stale-pull-requests@v1 + uses: w3f/label-stale-pull-requests@master with: context: ${{ toJSON(github) }} token: ${{ secrets.GITHUB_TOKEN }} From c7099e788de7cd000a439cf1b3e40e2c99371e16 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 10 Feb 2023 01:14:03 -0800 Subject: [PATCH 062/665] Update index.md (#1529) * Update index.md Attempt to fix the links * Update index.md --- applications/index.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/applications/index.md b/applications/index.md index 370471641b5..a081e916ffc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -12,11 +12,11 @@ Use this page for an overview of all public grants and their status. Use the sid > Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). ## Menu -- [2023](#2023): [17](#🏄‍♀️-wave-17---first-quarter-2023) -- [2022](#2022): [16](#🏄‍♀️-wave-16---fourth-quarter-2022), [15](#🏄‍♀️-wave-15---third-quarter-2022), [14](#🏄‍♀️-wave-14---second-quarter-2022), [13](#🏄‍♀️-wave-13---first-quarter-2022) -- [2021](#2021): [12](#🏄‍♀️-wave-12---fourth-quarter-2021), [11](#🏄‍♀️-wave-11---third-quarter-2021), [10](#🏄‍♀️-wave-10---second-quarter-2021), [9](#🏄‍♀️-wave-9---first-quarter-2021) -- [2020](#2020): [8](#🏄‍♀️-wave-8---fourth-quarter-2020), [7](#🏄‍♀️-wave-7---third-quarter-2020), [6](#🏄‍♀️-wave-6---second-quarter-2020), [5](#🏄‍♀️-wave-5---first-quarter-2020) -- [2019](#2019): [4](#🏄‍♀️-wave-4---fourth-quarter-2019), [3](#🏄‍♀️-wave-3---third-quarter-2019), [2](#🏄‍♀️-wave-2---second-quarter-2019), [1](#🏄‍♀️-wave-1---first-quarter-2019) +- [2023](#2023): [17](#%EF%B8%8F-wave-17---first-quarter-2023) +- [2022](#2022): [16](#%EF%B8%8F-wave-16---fourth-quarter-2022), [15](#%EF%B8%8F-wave-15---third-quarter-2022), [14](#%EF%B8%8F-wave-14---second-quarter-2022), [13](#%EF%B8%8F-wave-13---first-quarter-2022) +- [2021](#2021): [12](#%EF%B8%8F-wave-12---fourth-quarter-2021), [11](#%EF%B8%8F-wave-11---third-quarter-2021), [10](#%EF%B8%8F-wave-10---second-quarter-2021), [9](#%EF%B8%8F-wave-9---first-quarter-2021) +- [2020](#2020): [8](#%EF%B8%8F-wave-8---fourth-quarter-2020), [7](#%EF%B8%8F-wave-7---third-quarter-2020), [6](#%EF%B8%8F-wave-6---second-quarter-2020), [5](#%EF%B8%8F-wave-5---first-quarter-2020) +- [2019](#2019): [4](#%EF%B8%8F-wave-4---fourth-quarter-2019), [3](#%EF%B8%8F-wave-3---third-quarter-2019), [2](#%EF%B8%8F-wave-2---second-quarter-2019), [1](#%EF%B8%8F-wave-1---first-quarter-2019) ## 2023 From aaf10253aa33f5b4370032c9b1429a14d9ae9900 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 10 Feb 2023 01:49:57 -0800 Subject: [PATCH 063/665] Update index.md (#1530) Multix -> First Delivery and Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a081e916ffc..5f3cd655f31 100644 --- a/applications/index.md +++ b/applications/index.md @@ -34,7 +34,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | -| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☐ | ☐ | +| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | From c5243c10b61dc990239c5d1c3a2bba7a121d2bfd Mon Sep 17 00:00:00 2001 From: han <457644296@qq.com> Date: Fri, 10 Feb 2023 18:09:14 +0800 Subject: [PATCH 064/665] Update substats.md (#1509) --- applications/substats.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/substats.md b/applications/substats.md index 30e25e1bbd0..492450739e2 100644 --- a/applications/substats.md +++ b/applications/substats.md @@ -1,7 +1,7 @@ # Substats (The framework of lightweight block explorer) - **Team Name:** CESS LAB -- **Payment Address:** 0x41fC582784745Ec6B4860F47808b988a473fcEFc(USDT) +- **Payment Address:** 0x96a661ee0D829DF7c424D4415a51FFc256EEEd8A(USDC) - **Level:** 2 ## Project Overview From 27533fb97e490dfbcd5ba1b5a5b4b8a0e39364a1 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 10 Feb 2023 12:53:32 +0100 Subject: [PATCH 065/665] Update README.md Add phala program --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 84a7e7eea9e..2a669235da1 100644 --- a/README.md +++ b/README.md @@ -322,6 +322,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) From b7bda12edb13f4bedd3fc3fb583bb7ef4c566b58 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 10 Feb 2023 12:54:17 +0100 Subject: [PATCH 066/665] Update funding.md Add phala --- docs/funding.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/funding.md b/docs/funding.md index 827daa7d6ec..d4391989ce1 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -33,5 +33,6 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) From 08132c430a453ba8786abf727020972c73bf3f5a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 10 Feb 2023 12:55:04 +0100 Subject: [PATCH 067/665] Update README.md Fix order --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2a669235da1..52ab51a465b 100644 --- a/README.md +++ b/README.md @@ -322,8 +322,8 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) -- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) From aff88bbbdf6998c32e517073d29a4563d75b8e0a Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 10 Feb 2023 16:15:18 +0100 Subject: [PATCH 068/665] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 5f3cd655f31..82e91b82aaf 100644 --- a/applications/index.md +++ b/applications/index.md @@ -170,7 +170,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☐ | +| [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | | [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☐ | | [Ideal Labs](https://www.idealabs.network/) | [Iris: Phase 2](./iris_followup.md) | [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | | [NeoPower](https://www.neopower.digital/) | [Roloi: Stream money from one wallet to another](./Roloi.md) | [GitHub](https://github.com/RoloiMoney) | ☐ | ☒ | ☒ | From 2a30e5fa4a81f32f4eb1fc8625173d2fcc9f0e46 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 11 Feb 2023 14:36:53 -0500 Subject: [PATCH 069/665] Update index.md (#1533) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 82e91b82aaf..f9f8a530663 100644 --- a/applications/index.md +++ b/applications/index.md @@ -211,7 +211,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Metaverse for next generation gaming](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☒ | | [CESS LAB](https://www.cess.cloud/) | [Data Store Pallet](./ces_data_store.md) | [GitHub](https://github.com/CESSProject/cess) | ☐ | ☒ | ☒ | -| [ChainSafe](https://chainsafe.io/) | [Substrate Core Polywrapper](./substrate_core_polywrapper.md) | [GitHub](https://github.com/polywrap) | ☐ | ☐ | ☐ | +| [ChainSafe](https://chainsafe.io/) | [Substrate Core Polywrapper](./substrate_core_polywrapper.md) | [GitHub](https://github.com/polywrap) | ☐ | ☒ | ☒ | | [Bela Supernova](https://bsn.si/en/home/) | [On-chain cash exchange (OCEX)](./on-chain-cash.md) | | ☐ | ☒ | ☒ | | [Second State](https://www.secondstate.io/) | [WasmEdge for Substrate](./wasmedge_substrate.md) | [GitHub](https://github.com/wasmedge) | ☐ | ☒ | ☐ | | [Wow Labz](https://www.wowlabz.com/) | [Dot Marketplace Phase 2](./dot_marketplace-phase2.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | From 0b0e3492a0910ffaadb7a225f3008ea53bc684da Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 11 Feb 2023 14:37:15 -0500 Subject: [PATCH 070/665] Update substrate_core_polywrapper.md (#1534) --- applications/substrate_core_polywrapper.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/substrate_core_polywrapper.md b/applications/substrate_core_polywrapper.md index f33a10f69a1..bd324a8fddc 100644 --- a/applications/substrate_core_polywrapper.md +++ b/applications/substrate_core_polywrapper.md @@ -132,7 +132,7 @@ Please also provide the GitHub accounts of all team members. If they contain no - **Total Estimated Duration:** 1 month - **Full-Time Equivalent (FTE):** 2 Software Engineer, 0.5 Project Manager -- **Total W3F Costs:** 50 000$ +- **Total Costs:** 50,000 USD - **Total Polywrap DAO Costs:** 27 000$ & 60 WRAP ([Approved Grant Proposal](https://snapshot.org/#/polywrap.eth/proposal/0x1c4b651c654c9409353e70e4675b3311f06a06ab40d8818e4370faa064c5645d)) - **Start Date:** 11. April 2022 @@ -140,7 +140,7 @@ Please also provide the GitHub accounts of all team members. If they contain no - **Estimated duration:** 1 month - **FTE:** 2 Software Engineer, 0.5 Project Manager -- **Costs:** 50 000$ +- **Costs:** $50,000 | Number | Deliverable | Specification | | -----: | ----------- | ------------- | From 627203e01cdd96e54b2bee2976fa8de8bec21b0e Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 13 Feb 2023 01:18:21 -0800 Subject: [PATCH 071/665] Update stale_checker.yml (#1535) change action version to make it work --- .github/workflows/stale_checker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/stale_checker.yml b/.github/workflows/stale_checker.yml index 239a9adc731..83c4ae98908 100644 --- a/.github/workflows/stale_checker.yml +++ b/.github/workflows/stale_checker.yml @@ -11,7 +11,7 @@ jobs: runs-on: ubuntu-latest steps: - id: stale - uses: w3f/label-stale-pull-requests@master + uses: w3f/label-stale-pull-requests@main with: context: ${{ toJSON(github) }} token: ${{ secrets.GITHUB_TOKEN }} From fc646f7640f4130f50a39cd8bc2876fd985a847c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 13 Feb 2023 10:26:04 +0100 Subject: [PATCH 072/665] Update index.md sol2ink Phase 2 completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f9f8a530663..8c232da46e4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | | [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | From 21e37480641656ff5c92a5e3811853a162d06e31 Mon Sep 17 00:00:00 2001 From: Chaofan Shou Date: Mon, 13 Feb 2023 02:25:15 -0800 Subject: [PATCH 073/665] Application: FuzzLand (#1499) * Create FuzzLand.md * Update FuzzLand.md * Update FuzzLand.md --- applications/FuzzLand.md | 401 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 401 insertions(+) create mode 100644 applications/FuzzLand.md diff --git a/applications/FuzzLand.md b/applications/FuzzLand.md new file mode 100644 index 00000000000..8f7397d813c --- /dev/null +++ b/applications/FuzzLand.md @@ -0,0 +1,401 @@ +# FuzzLand + +- **Team Name:** FuzzLand +- **Payment Address:** 0x3a2a700d9d822D23D3F0F55F4b097753b5B2FC9A (ERC20 DAI/USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + + +tldr: FuzzLand is a DAO leveraging crowd-sourced computation power to achieve **fast**, **accurate**, and **cheap** automated auditing. + +The importance of auditing has grown significantly in recent years as organizations strive to ensure the integrity and security of their systems. However, despite the importance of auditing, it remains challenging, with many auditing companies struggling to provide comprehensive and accurate reports. + +The use of human auditors by auditing firms presents several challenges, including the high costs of recruiting and training qualified personnel and the potential for human error. With the increasing complexity of software systems and the growing volume of data to be analyzed, manual audits can become increasingly time-consuming and error-prone. On the other hand, automated auditing solutions also present their own set of challenges. These solutions typically require high computational power and incur high running time overhead. Thus, many traditional automated auditing tools sacrifice completeness and soundness of the analysis for faster response time, resulting in both false negative and positive results. + +In contrast, FuzzLand aims to parallelize novel automated program analysis techniques to gain accurate results in a reasonable amount of time. To achieve high parallelism with low costs, FuzzLand platform allows the public to contribute computation power to accomplish the automated auditing in return for token rewards. In the meantime, all the program analysis intermediate statistics and waypoints are verified and stored on the FuzzLand chain, which can finally be leveraged to mint the auditing reports. + +Unlike traditional collaborative manual auditing platforms, FuzzLand uses sound automated program analysis (e.g., fuzzing and symbolic execution) techniques to provide accurate auditing reports. Since the program analysis results and intermediate waypoints can be easily verified through a fully automated oracle, the manual confirmation process is no longer needed. While it is impossible to quantify the performance of human auditors, FuzzLand can quantify the auditing progress and completeness of auditing reports based on metrics backed with on-chain data. + +The FuzzLand platform can offer two key benefits to the ecosystem. Firstly, it allows Substrate module and Ink developers to access low-cost, highly accurate auditing reports for their projects with on-chain guarantees. Secondly, the platform will be implemented as a Substrate chain and the platform's Substrate pallets can be easily reused by other projects. + +### Project Details + +#### Stakeholders + +* Project Owners: Anyone who needs an audit for their program. +* Validator Nodes (i.e., Judges): A proof of stake network that verifies the audting information. Note that these nodes are not necessary the validators of the *chain*. +* Auditor Nodes (i.e., Wardens): Anyone can run a nodes on their computers or even inside browsers to supply computation power for program analysis in return of token rewards. + +#### High Level Auditing Workflow + +``` ++---------+ +-------------+ +-------------+ +-------------------+ +-------+ +| Auditor | | Validator 1 | | Validator 2 | | Project Owner | | Chain | ++---------+ +-------------+ +-------------+ +-------------------+ +-------+ + | | | | | + | | | | 0. Onboard a project | + | | | |--------------------------------------------->| + | | | | | + | | | | 1. Ask for partition plan based on project | + | |<--------------------------------------------------------------------------------| + | | | | | + | | 1. Claim a partition plan and submit it | + | |-------------------------------------------------------------------------------->| + | | | | | + | | | 1. Challenge the partition plan if it is not correct | + | | |---------------------------------------------------------------->| + | | | | | + | | | | 2. Send the partition of the project | + |<---------------------------------------------------------------------------------------------------------------| + | -----------------------\ | | | | + |-| 2. Auditing with DPA | | | | | + | |----------------------| | | | | + | | | | | + | 3. When a testcase leading to vulnerability / new coverage found, submit the testcase | + |--------------------------------------------------------------------------------------------------------------->| + | | | | | + | | 3. Challenge the testcase if it is not correct | + | |-------------------------------------------------------------------------------->| + | | | | | + | | | | 4. Stop the auditing and mint the report | + | | | |--------------------------------------------->| + | | | | | + | | 4. Provide share of bounties based on the # of testcases submitted | + |<---------------------------------------------------------------------------------------------------------------| + | | | | | + | | | | 4. Provide share of bounties as reward | + | |<--------------------------------------------------------------------------------| + | | | | | +``` + + +0. Project owner can create an auditing request by staking tokens as bounties and providing the compiled program. + +1. The program being audited is divided into smaller subprograms of equal exploring complexity using static analysis by validator nodes. Each node is assigned a unique subprogram to audit for a specific period. This process, known as partitioning, is extremely fast and helps prevent auditor nodes from wasting computational power on code other nodes have already explored. The partitioning plan is deterministic and can be easily verified by other validator nodes, reaching consensus among all validator nodes before the auditing campaign begins. + +2. Each auditor nodes pick up a specific partition in the partitioning plan minted based on weighted sampling. Then, auditor nodes leverage fuzz testing techniques to analyze their subprogram. Auditor nodes are incentivized to prioritize auditing requests that are new, have high program complexity, and offer higher rewards. This is because auditor nodes are motivated to find more test cases that lead to vulnerabilities and new coverage, as well as to receive higher rewards for the test case NFTs they mint. + +3. When auditor nodes detect a test case leading to vulnerability or new code coverage, they mint an NFT for the test case. Judge nodes then verify the test case by re-executing it. Since the execution is deterministic, the outcome must also be deterministic, allowing validator nodes to reach consensus about the validity of test case NFTs. + +4. Project owner can terminate an audit request. The termination requests also mint an NFT for an auditing report automatically based on the intermediate statistics, test cases, and vulnerabilities. A reward (i.e., bounties) is then given to the validator nodes and auditor nodes that generated or verified the test case NFTs. + + +#### Technical Details + +**Partitioning Plan Synthesis** + +By converting a program into LLVM bytecode, we can create a weighted control flow graph (CFG) of it with the weight of each edge as relative difficulty of exploring such an edge. Graph partitioning algorithms can then partition the CFG into sub-trees, with the starting node of the CFG as the root of each tree. The partition plan can be concisely represented in O(log n) bytes, where `n` is the size of the CFG, making it possible to be fit into an on-chain variable. + +To determine the difficulty of exploring each edge in the CFG, we utilize static analysis tools. We pinpoint the comparison instruction that leads to the edge and determine the domain size of both the LHS and RHS. The domain size represents the likelihood of program execution failing into either side if the input is randomly selected. Currently, we use heuristics to determine the domain size. As future work, we can use abstract interpretation algorithms with a constraint solver to calculate it. The exploration difficulty is then estimated by dividing the domain size of the LHS and RHS. + +For instance, consider following simple program: + +```rust +// input: Vec +if (input[0] > 20) { // Line 1 + bug(); // Line 2 +} // Line 3 +``` + +The CFG would be +``` + + ┌──────────────┐ + ┌──────┤ Line 1 │ + │ └───────┬──────┘ + │ E2 │ E1 + │ ┌───────▼──────┐ + │ ┌──┤ Line 2 | + │ │ └──────────────┘ + │ │ E3 +┌──────▼───▼───┐ +│ Line 3 | +└──────────────┘ +``` + +Given `u8` domain is 256, weight (exploration difficulty) of E1 is `(256 - 20) / (256 + 20)` and E2 is `(256 + 20) / (256 - 20)`. By intuition, E2 is indeed more likely to be explored than E1. As there is no comparison instruction in during transition of E3, the exploration difficulty is 0, meaning as long as we can reach Line 2, we can reach Line 3. + +**Dynamic Program Analysis (DPA)** + +We support automated auditing of any program that can be compiled to LLVM bytecode by leveraging fuzz testing techniques, which involve sending random input to the program. This method, also known as heuristic search, aims to achieve 100% code coverage and uncover all vulnerabilities. While infinite time would guarantee zero false negatives, we use formal methods such as symbolic and concolic execution for guiding the fuzz testing search to reduce the time needed. Additionally, by partitioning the program into smaller, more manageable subprograms for each node, we can reduce the time required linearly as the number of nodes increases. + +Fuzz testing employs partitioning through the use of an instrumented target. If an input causes execution of code outside the partition plan, the target will terminate. Early termination reduces the time spent exploring code not within the partition, saving significant time. Similarly, symbolic and concolic execution can also conduct early-termination to avoid exploring code outside the partition. + + +**Reaching Consensus** + +Verifying partition plans and interesting test cases can be costly or even impossible on the chain. Thus, validator nodes use off-chain oracles. FuzzLand uses rollup techniques to move the oracle results onto the chain and reach consensus. Specifically, an optimistic rollup pallet is implemented to achieve consensus on partition plans and interesting test cases. Once a validator node mints a partition plan or an auditor node mints a test case NFT, other validator nodes can submit fraud proofs to challenge it within 50 blocks, or it will be committed. Unlike human auditors or judges, validator nodes can find evidence to challenge false claims in microseconds, as the verification process is automated and inexpensive, making optimistic rollups effective. + +*Interactively Partition Plan Verification*: Claimer can create a partition plan by submitting the weighted CFG and list of nodes in the CFG that needs to be divided. A challenger can either challenge the weighted CFG or the partition plan. To challenge the weighted CFG, the challenger submits a fraud-proof consisting of the root node of the minimum differing subtree in the CFG. The chain partially re-generates from that root node to the first child node by looking at branch, jump, and call instructions. That node must equal either party's differing node if at least one party is honest. Although generating full CFG is a costly operation as multiple complex graph analysis algorithm is needed, generating the next node with a known subgraph and context is cheap. To challenge the partition plan, the challenger must submit a better plan. The chain can compare the balance of each subgraph's total weights and determine which is the best partition plan. Comparison is very cheap since the chain only needs to sum up the weight of each subgraph and divide them. + +*Interactively Testcase Verification*: Claimer can confirm a test case by submitting the execution trace (a trace of basic blocks hit during execution) of the test case to the chain. The initial fraud-proof consists of the first differing program counter (PC) in execution trace and the state (i.e., dirty page of the memory and stack) before the differing PC. The challenged claimer can dispute the state and find the first differing state interactively with the challenger. When either the differing PC or state is found, the chain will re-execute partially from the state and PC with consensus (i.e., state and PC before the differing ones) using LLVM bytecode virtual machine. Since the execution would lead to a concrete result that is directly equal to that of either challenger or claimer, the chain can decide which party is gaming. Partial re-execution is not costly since the chain only needs to execute the basic block with dispute, which is usually a few simple instructions. A potential future work would be replacing this process with zero-knowledge proof. + +#### Technology Stack + +- Substrate +- Rust +- LLVM + +#### Dependencies + +- LibAFL for fuzzing +- Rustc for converting Substrate Pallets and ink! smart contracts to LLVM IR +- Substrate Client (https://github.com/scs/substrate-api-client) for WS communication between the chain and the oracles +- (Potentially) SymCC (https://github.com/eurecom-s3/symcc) for symbolic execution on LLVM bytecode +- (Potentially) yul2llvm (https://github.com/Veridise/yul2llvm) for converting Solidity to LLVM IR +- More TBD + +#### Implementation Details + +We are going to implement two Substrate modules with following traits: + + +**Optimistic Rollups**: +```rust +// Optimistic rollups pallet maintains a set of challengers and claimers. +// The claimers can claim arbitrary things that can be executed. +// The challengers can challenge arbitrary claims submitted previously. +// Optimistic rollups can transition costly on-chain execution to off-chain oracle while still reaching consensus with the execution correctness. +trait OptimisticRollups { + // When a challenge / dispute is submitted, use this function to determine whether the dispute is valid. + // Decision can be: wait for new argument (multi-round interactive rollups only); confirmed fraud; confirmed proof incorrect. + verifier: fn (proof: bytes) -> Decision; + + // When a claim is committed, the executor is invoked to execute the claim. + executor: fn (claim: bytes); + + // Claim something. + Claim(origin, data: bytes); + + // Challenge / Dispute a claim with proof. + Challenge(origin, proof: bytes); + + // Argue a challenge / dispute by challenger or claimer. + // Used for multi-round interactive rollups. + ArgueChallenge(origin, proof: bytes); + + // Commit latest block that may contain multiple claims. + Commit(origin); + + // Vote to ban a specific challenger / claimer. + // after an account gets enough vote, it gets removed from challenger / claimer set. + Ban(origin, account: Address); + + // Join with minimum token staked to be a challenger or claimer. + Join(origin, role: Role); +} + +``` + +Both partition plan and testcase can be interactively challenged and proved on chain efficiently by partial re-evaluation. + + +**Auditing**: +```rust +trait Audit { + // Onboard a project with minimum token (bounty) staked + // note: llvm_bytecode arg can be replaced by IPFS hash if the target is very large + OnboardProject(origin, llvm_bytecode: bytes) -> u256; + + // Offboard a project and mint a report + OffboardProject(origin, project_id: u256); + + // Submit a parition plan for the project by validator + SubmitPartitionPlan(origin, project_id: u256, plan: bytes); + + // Submit a testcase by auditor + SubmitTestcase(origin, project_id: u256, testcase: bytes); + + // Join with minimum token staked to be a validator or auditor + Join(origin, role: Role); + + // ...challenging methods +} +``` + +We are also going to implement the off-chain oracle. + +The oracle for auditor nodes needs to implement the DPA for LLVM targets that respect the partition they received. We use LLVM pass to modify the bytecode for achieving early termination and use LibAFL to manage the DPA campaign. + +LLVM Pass Pseudocode +```python +# Given Partition, Program +for BB in Program: + # Last instruction of BB is comparison instruction + if ProgramCounter(BB) not in Partition: + BB.Start.append( + new Instruction(Terminate()) + ) +``` + +The oracle for validator nodes needs to generate partition plans. We implement graph partitioning tool using Kernighan–Lin algorithm. As aforementioned, a crucial part for partitioning is the CFG edge weight calculation. We implement it using LLVM pass. + +Graph edge weight calculation Pseudocode +```python +# Given Program +for BB in Program: + # Last instruction of BB is comparison instruction + if BB.Tail is Comparison: + LHS, RHS, Op = BB.Tail as Comparison + # Count the percentage between domain of LHS and domain of RHS based on Op + return Count(Op, AbstractInterp(LHS), AbstractInterp(RHS)) + else: + return 0 +``` + +The oracle also interacts with chain by interacting with optimistic rollups. The VM used to re-execute LLVM bytecode partially is https://github.com/andoma/vmir, which can be compiled to WASM. We will implement a wrapper pallet for this VM. + +#### UI +Design Doc: https://xd.adobe.com/view/41cd2fa4-f124-4877-8b17-a8ff47799bf7-149e/ + +PoC Source Code: https://github.com/fuzzland/protocol_v1/tree/main/frontend + + +Screen 1: Onboarding - Upload Project +![](https://i.imgur.com/blNwnb7.png) + +Screen 2: Onboarding - Select Bounty +![](https://i.imgur.com/nJIFcWW.png) + +Screen 3: Auditing Report +![](https://i.imgur.com/2wX9Mf6.png) + + + +### Ecosystem Fit +Our platform can serve the project owners who have auditing requests for their projects, regardless of Web2 or Web3: as long as they can be compiled into LLVM (e.g., any Ink, Solidity, Rust, C++, etc. programs). The auditing reports and how they correlate with the on-chain statistics can also be reviewed by anyone: not just the project owner, but also the project users. Project owners can gain more trust by sharing the auditing reports backed with *consensus* with their users. + +Downstream DeFis, including insurance, using the auditing intermediate information and results can be deployed to our chain. As we enable the contracts pallet in our chain, the DeFis can be developed in the form of Ink smart contracts. XCM also makes it possible to pipeline the auditing results to other chains. + +Other projects can reuse the components of FuzzLand platforms. For example, the optimistic rollups pallet can be used by Layer 2 solutions. Collaborative manual auditing projects can also use the audit pallet or our chain by replacing the rollups pallet with consensus pallets. + +[Decentralized Security Marketplace](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/decentralized-security-marketplace.md) is a related RFP. [QRUCIAL DAO](https://github.com/w3f/Grants-Program/pull/989) is a related project in Substrate ecosystem. QRUCIAL DAO and FuzzLand both reach consensus about the auditing result. The fundamental differences are: +* FuzzLand harnesses the computation power of the crowd to perform compute-intensive dynamic program analysis, resulting in fast and highly accurate auditing. Yet, QRUCIAL DAO's analysis is performed by rerunning a same set of fast static analysis tools on multiple nodes, of which the requirement of multiple nodes is solely for reaching consensus. +* We support all LLVM targets, including Substrate pallet, ink!, Solidity, Move, Rust, C/C++, etc. projects while QRUCIAL DAO is tailored for smart contract auditing. +* We use optimistic rollups to efficiently reach consensus while QRUCIAL DAO uses the governance pallet. + +Code4rena, Immunefi, Secure3, Sherlock, etc. are similar projects in other ecosystems, but they all rely on human auditors. + +## Team :busts_in_silhouette: + +### Team members (In order of joining time) + +Jeff Liu (PM & Marketing) + +Chaofan Shou (Core Dev) - https://scf.so/ + +Shangying Tan (Core Dev) - https://shangyit.me/ + +Ben Fong (Core Dev + QA) + +Yiqi Hu (Core Dev) + + +### Contact + +- **Contact Name:** Jeff Liu +- **Contact Email:** jeff@fuzz.land +- **Website:** + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** N/A + +### Team's experience + +Chaofan is a PhD student at UC Berkeley working on program analysis and distributed system. He has multiple research papers about fuzz testing in top conferences (e.g., [CorbFuzz](https://arxiv.org/pdf/2109.00398.pdf), [Rare Path Fuzzer](https://arxiv.org/pdf/2212.09004.pdf)). He has also participated in auditing and found numerous critical vulnerabilities in well-known software and Web3 protocols. He will work on the technical portion of the project, including implementing the aforementioned Substrate pallets and the offchain oracle. + +Shangyin is a PhD student at UC Berkeley working on formal methods and fuzzing. He has previously worked at Microsoft and contributed to well-known symbolic / concolic execution tools (e.g., [sai](https://github.com/Kraks/sai)). He will be developing the algorithm for partition plan synthesis and interactive verifiers in optimistic rollups. + +Yiqi Hu graduated with a master's degree from Carnegie Mellon University. She has a strong background in program analysis and will be working on implementing the fuzz testing algorithm. + +Ben graduated from SJSU and has a strong background in full-stack development and automated QA. He will be in charge of Web App development and CI/CD pipeline. + +Jeff is the founding engineer and PM at VMware Cloud Infra org and has founded multiple startups that have been acquired by companies like Alibaba. He has co-invested in well-known Web3 companies like Deeper Network, Holokit, etc. He will be overseeing the development process. + +### Team Code Repos + +- +- + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- Chaofan Shou +- Shangying Tan +- Ben Fong +- Yiqi Hu + +### Team LinkedIn Profiles (if available) + + +## Development Status :open_book: + +- This is the Substrate chain implementation. We have just started to work on it. +- (Private for now, can share upon requests) This is our fuzz testing tool that can conduct DPA as described before. Supports for partitioning programs and conduct DPA on subprograms are WIP. Will be moved to `oracle` repo. +- We have built a simple FuzzLand protocol PoC for EVM-compatible chain in Solidity. However, due to high gas fee, low throughput, and hard to customize the chain, we decide to switch to implement a Substrate chain. Frontend and telemetry API in this repo will be reused. +- Adds the necessary analysis datasource for partition plan generation to the fuzzing library. +- We also have the first version of our website. + + +#### Related Papers +* AFLTeam: https://ieeexplore.ieee.org/document/9678810/ +* LibAFL: https://dl.acm.org/doi/abs/10.1145/3548606.3560602 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 5 months +- **Full-Time Equivalent (FTE):** 4 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 — Offchain Oracle + +- **Estimated duration:** 1.5 month +- **FTE:** 4 FTE +- **Costs:** 12,000 USD + +| Number | Deliverable | Specification | +| -----: | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of a validator or a auditor node. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains the technical details. We will also publish research papers about our algorithms and implementations. | +| 1. | Auditor Nodes Oracle Library | We will implement our DPA algorithm for LLVM targets in the form of a Rust library and fine tune it for ink! contracts and Substrate pallets. | +| 2. | Validator Nodes Oracle Library | We will implement the partition plan synthesis algorithm and offchain testcase validation tool in the form of a Rust library. | +| 3. | Verifier | We will develop the verifier for testcase validation and partition plan validation in the form of a Rust library that can be compiled to WASM. We will benchmark this library to ensure that the complexity of result verification is significantly lower than that of offchain oracles generating results. | +| 4. | Integration Testing | We will demonstrate that at least 3 auditor nodes oracle can efficiently collaborate to conduct program analysis for a ink! contract. We will also demonstrate that verifiers can be resistent to gaming by running a cluster of 2 honest validator nodes oracle and 1 malicious node. | + + +### Milestone 2 — Substrate Chain + +- **Estimated duration:** 3 month +- **FTE:** 4 FTE +- **Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | --------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains the technical details and how to initiate an audit request. We will also publish research papers based on effectiveness of our solution and metrics collected from operating our platform. | +| 1. | Substrate module: optimistic_rollups | We will create a pallet that implements the optimistic rollups algorithm and a Rust SDK can that can interact with the pallet. We will also integrate the verifier developed in last milestone into this pallet. | +| 2. | Substrate module: audit | We will create a pallet for onboarding auditing requests, storing testcases, and distributing rewards. The pallet can also generate auditing reports in txt format automatically. | +| 3. | Substrate chain | Module `optimistic_rollups` and `auditing` will be integrated into a Substrate node, to enable auditor nodes to submit intermediate auditing results and information. This chain will integrate contracts, treasury, council, democracy and also other essential pallets, to build a full-featured blockchain. | +| 4. | Offchain oracle clients | Auditor and validator nodes clients will be built by integrating the libraries built in the last milestone. The two clients will be able to interact with the chain so that the full auditing workflow shown in the [Project Details](#Project-Details) can be accomplished. | +| 4. | Web App | We will create a web app, to let users easily interact with our substrate node. Users can create auditing requests, visualize intermediate auditing information, and view final auditing report. | + +## Future Plans + +* Allowing project owners to define their own types of vulnerabilities (e.g., business logic violations). +* Bring in ZK-SNARKs for testcase sharing. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Personal recommendation From 8a3d2e108ce8dea6b9af3378dfec9ab4234c30a2 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 13 Feb 2023 11:27:53 +0100 Subject: [PATCH 074/665] Update index.md Add fuzzland --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 8c232da46e4..63f5a6434d1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -49,6 +49,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | +| [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | ## 2022 From ba2bc9d6bedaf3e4a6e509ebdf1b5237d7ddc379 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 13 Feb 2023 12:22:30 +0100 Subject: [PATCH 075/665] Update for readability --- docs/contribute.md | 10 ++++++---- docs/funding.md | 4 ++-- docs/process.md | 1 + 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/docs/contribute.md b/docs/contribute.md index 4fa142cb6f5..615bedfc735 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -5,8 +5,10 @@ title: Contribute The W3F Grants Program aims to be as open and accessible as possible. If you are interested in contributing or getting involved, there are several ways you can do that: -- We are open to milestone evaluations from third parties. If you are particularly interested in a certain project, or particularly knowledgeable on a relevant subject, [submit your own evaluation](https://github.com/w3f/Grant-Milestone-Delivery#ballot_box_with_check-external-evaluations). -- We encourage anyone to submit a request for proposals (RFPs). If you find that there is something missing in our ecosystem (a tool, a project, infrastructure, etc.), that we could help fund, please [submit an RFP](https://github.com/w3f/Grants-Program/blob/master/README.md#mailbox_with_mail-suggest-a-project). -- Join us! We are looking for a Technical Grants Evaluator (among other things) to join us full time. Check out [our current job openings](https://web3.bamboohr.com/jobs/) and apply! +📋 We are open to milestone evaluations from third parties. If you are particularly interested in a certain project, or particularly knowledgeable on a relevant subject, feel free to comment on any [open grant applications](https://github.com/w3f/Grants-Program/issues?q=is%3Aopen+label%3A%22ready+for+review%22+sort%3Aupdated-desc), or have a look at the [open pull requests on our milestone delivery repository](https://github.com/w3f/Grant-Milestone-Delivery/pulls) and [submit your own evaluation](https://github.com/w3f/Grant-Milestone-Delivery#ballot_box_with_check-external-evaluations). -We strive to continue improving our grants program and are always open to feedback. If you would like to share any suggestions or criticism, please reach out to us on [Github](https://github.com/w3f/Grants-Program) or [Matrix](https://matrix.to/#/#w3f:matrix.org)! +🔍 If you find that there is something missing in our ecosystem (a tool, a project, infrastructure, etc.) that we could help fund, please [submit a Request For Proposals (RFP)](https://github.com/w3f/Grants-Program/blob/master/README.md#mailbox_with_mail-suggest-a-project). If writing an RFP seems too daunting a task, feel free to [submit it as an issue on our Github repository](https://github.com/w3f/Grants-Program/issues) so anyone can contribute. + +🤝 Join us! We are looking for a Technical Grants Evaluator (among other things) to join us full time. Check out [our current job openings](https://web3.bamboohr.com/jobs/) and apply! + +We strive to continue improving our grants program and are always open to feedback. If you would like to share any suggestions or criticism, please reach out to us on [Github](https://github.com/w3f/Grants-Program) or [Matrix](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org)! diff --git a/docs/funding.md b/docs/funding.md index d4391989ce1..33af5de690f 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -32,7 +32,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) -- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) -- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) +- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) diff --git a/docs/process.md b/docs/process.md index 7bf65710f48..86a0b841df8 100644 --- a/docs/process.md +++ b/docs/process.md @@ -7,6 +7,7 @@ If you are certain you want to apply for a W3F grant, head straight to our [appl ## Funding Opportunities Overview +For a longer list and a description of the programs listed below, check out [our page on alternative funding opportunities](funding.md). ```mermaid flowchart LR From ebf0ed48d2100d20b7ccd61ad572bfeb82e3bd95 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 13 Feb 2023 10:23:03 -0300 Subject: [PATCH 076/665] Update index.md (#1536) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 63f5a6434d1..d34c264c054 100644 --- a/applications/index.md +++ b/applications/index.md @@ -38,7 +38,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | From 77609bb07ea1baf83847730afa5bad620379efb5 Mon Sep 17 00:00:00 2001 From: Luca Eugenio <88165605+Lord-Nymphis@users.noreply.github.com> Date: Tue, 14 Feb 2023 07:51:42 +0000 Subject: [PATCH 077/665] Datagen-Update timeline (#1537) * Update Datagen_Project.md * Update Datagen_Project.md --------- Co-authored-by: cuteolaf <53915161+cuteolaf@users.noreply.github.com> --- applications/Datagen_Project.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Datagen_Project.md b/applications/Datagen_Project.md index 87e014fc167..886e33485dd 100644 --- a/applications/Datagen_Project.md +++ b/applications/Datagen_Project.md @@ -174,7 +174,7 @@ The goal is to achive a fully functional mechanism for the random selection of t ### Overview -- **Total Estimated Duration:** 5 months (starting date - August 2022) +- **Total Estimated Duration:** 5 months (starting date - August 2022) _ Update: Because of changes in the development team M2 delivery date will be ≈15th of March 2023, with relative shift of the whole timeline. - **Full-Time Equivalent (FTE):** 2 - **Total Costs:** 44,000 USD From a9a83b0e3c9f431c804451f9a6a22cf34a2ecd80 Mon Sep 17 00:00:00 2001 From: fuu Date: Tue, 14 Feb 2023 20:01:17 +0800 Subject: [PATCH 078/665] Anchor, On-chain Linked List pallet and Name Service (#1528) * anchor project * Checking before pull * Modify the format. * Modify the format again. * milestone update. * update to Polkadot address * From USDC to USDT, :-) --- applications/Anchor.md | 286 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 286 insertions(+) create mode 100644 applications/Anchor.md diff --git a/applications/Anchor.md b/applications/Anchor.md new file mode 100644 index 00000000000..86a6777a936 --- /dev/null +++ b/applications/Anchor.md @@ -0,0 +1,286 @@ +# Anchor, On-chain Linked List pallet and Name Service + +- **Team Name:** Fuu +- **Payment Address:** 13u5kLGrt4n1Smc78ZXtYVedgp1U1LyGAAHtPFtVcv6Z1BtR (USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + + +## Project Overview :page_facing_up: + +### Overview + +- Anchor is a on-chain linked list system base on substrate 3.0.0. It is used to support cApp ( Chain Application ) development. On another hand, Anchor can alse be treated as Name Service or on-chain key-value storage system. + +- Anchor is a isolated substrate pallet. It is currently used in the application of freeSaying. It can provide flexible data structure on the chain and handle complex logic without upgrading the substrate node itself. +You can access the [freeSaying ( Only applicable to mobile )](https://freesaying.net) demo to know well. Anchor network is the very important basic storage system. Anchor.js is a isolate JS library to access Anchor network, can read and write data easily. +Anchor pallet is a part of EasyPolka, the relationship as follow : + +![easypolka.png](http://android.im/anchor/easypolka.png) + +QR to access to freesaying.net. +![easypolka.png](http://android.im/anchor/qr.png) + +- With Anchor, you can use run a substate network just need a bit upgrade. Through the highly customizable data structure and the ability of cApp, the threshold of application development on the chain is greatly reduced. It means that new developers who even does not know blockchain well can build cApp just by Javascript and publish it nearly free. + +- As a web developer, I firmly believe in the future of blockchain technology, but when I turn to blockchain development, I encounter a huge threshold. It takes a lot of time to get familiar with both language and various concepts. At the same time, technology is still improving, and a stable development environment cannot be obtained. All of these prompted me to improve EasyPolka for my own development. +So far, only one person myself can develop complex cApp ( on-chain applications ). I believe that this can help other developers to build cApps more efficiently. +Will try to apply the left part, it is a bit complex, I am working on regrouping them now. The image show the whole structure. + +![easypolka.png](http://android.im/anchor/easypolka_not.png) + +### Project Details + +- Anchor development itself has been done, and it is deployed here [check "wss://dev.metanchor.net" on polkadot.js.org](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fdev.metanchor.net#/explorer). One cApp is deployed to test too, the URL is [https://freesaying.net](https://freesaying.net). This React project load the target Anchor "freeSaying" from dev.metanchor.net, then run the cApp which is a socail media application. + +- There are 4 methods and 2 stores to implement the on-chain linked list function in Anchor pallet. + +- Substrate 3.0.0 and Rust for Anchor pallet. Javascript for anchor.js. + +- Code here [https://github.com/ff13dfly/Anchor](https://github.com/ff13dfly/Anchor), the document is the next step. + +- Treat Anchor as Name Service, there is no available pallet can be use. Have checked here [Open Source Polkadot Stack](https://wiki.polkadot.network/docs/build-open-source). +![easypolka.png](http://android.im/anchor/status.png) + +- The function of Anchor has been finalized and will not be further expanded on substrate side. The function of the current version is the final form. + +### Ecosystem Fit + +- An available Name Services on Substrate 3.0.0, and it is extended to a On-chain Linked List system. + +- Developers who have not yet used substrate/Polkadot. Developers who do not like Smart Contract way to develop application. + +- Developer can build application flexibly without understanding the whole blockchain system. I think this is attractive to many developers. + +- From the [Open Source Polkadot Stack](https://wiki.polkadot.network/docs/build-open-source), there are 4 Name Service pallets, 2 red ( can not compatible to substrate 3.0.0 ) and 2 yellow ( code not updated more than 2 months by checking github ). + +## Team :busts_in_silhouette: + +### Team members + +- Zhongqiang Fu, individual developer. + +### Contact + +- **Contact Name:** Zhongqiang Fu +- **Contact Email:** ff13dfly@163.com +- **Website:** https://github.com/ff13dfly/ + +### Legal Structure + +- Individual + +### Team's experience + +- On substrate, Substrate with Anchor pallet has been build successful and run at [wss:dev.metanchor.net](wss:dev.metanchor.net). I have tried to load a three nodes network successful. + +### Team Code Repos + +- https://github.com/ff13dfly/ +- https://github.com/ff13dfly/Anchor + +### Team LinkedIn Profiles (if available) + +## Development Status :open_book: + +- Demo cApp [freeSaying](https://android.im/vManager/) is published now. The test network is available, you can access [wss:dev.metanchor.net](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Fdev.metanchor.net#/explorer). Anchor pallet functions have been developed, but not tested entirely. + +## Development Roadmap :nut_and_bolt: + +### Anchor pallet + +- There are 4 methods exposed. One for setting data, Three for trading anchor. + ![easypolka.png](http://android.im/anchor/methods.png) + 1. setAnchor, set Anchor data method. + + ```RUST + pub fn set_anchor( + origin: OriginFor, //default + key: Vec, //Anchor name + raw: Vec, //raw data to storage + protocol: Vec, //data protocol, used to decide how to decode raw data + pre:T::BlockNumber //the previous block number which storage anchor data + ) -> DispatchResult { + // code here. + Ok(()) + } + ``` + + 2. sellAnchor, sell your Anchor publish or to target account. + + ```RUST + pub fn sell_anchor( + origin: OriginFor, //default + key: Vec, //Anchor name + cost: u32, //unit accuracy + target:::Source //target buyer SS58 address. If the same as owner, can be sold to anyone. + ) -> DispatchResult { + // code here. + Ok(()) + } + ``` + + 3. unsellAnchor, revoke Anchor sell status. + + ```RUST + pub fn unsell_anchor( + origin: OriginFor, //default + key: Vec, //Anchor name + ) -> DispatchResult { + // code here. + Ok(()) + } + ``` + + 4. buyAnchor, buy target Anchor which is on sell. + + ```RUST + pub fn buy_anchor( + origin: OriginFor, //default + key: Vec, //Anchor name + ) -> DispatchResult { + // code here. + Ok(()) + } + ``` + +- There are two Runtime Storage. One for the anchor data status, one for the on-sell list. + ![easypolka.png](http://android.im/anchor/storage.png) + ```RUST + // (T::AccountId,T::BlockNumber) + // T::AccountId, the anchor owner ss58 address + // T::BlockNumber, last block number when updated data successfully. + pub(super) type AnchorOwner = StorageMap<_, Twox64Concat, Vec, (T::AccountId,T::BlockNumber)>; + + // (T::AccountId, u32,T::AccountId) + // T::AccountId, the anchor owner ss58 address + // u32, the sell price for the anchor + // T::AccountId, the target buyer. If the same as owner, it is free to buy. + pub(super) type SellList = StorageMap<_, Twox64Concat, Vec, (T::AccountId, u32,T::AccountId)>; + ``` + +### anchor.js + +- exposed methods. Three parts : basic substrate functions, anchor data I/O functions, anchor exchange functions. It has been used in the demo freeSaying, but no isolated yet. And exchange part need to code this time. +Anchor.js can help developer accessing Anchor network by this single JS. + + ```JS + /*******************************/ + /* substrate related functions */ + /*******************************/ + + //link to target substrate node + exports.link=function(endpoint,callback){ + /* return callback && callback(PolkadotJS.API) */ + }; + + //load encry file to get pair + exports.load=function(file,password,callback){ + /* return callback && callback(pair) */ + }; + + //subcribe the latest block + exports.subcribe=function(callback){ + /* return callback && callback(anchorDataList) */ + }; + + //check account balance + exports.balance=function(ss58Address,callback){ + /* return callback && callback(amount) */ + }, + + /***********************************/ + /* Anchor pallet related functions */ + /***********************************/ + + /* data part */ + //get the latest anchor data + exports.latest=function(anchor,callback){ + /* return callback && callback(formattedAnchorData) */ + }; + + //get the anchor data on special block. + exports.target=function(anchor,block,callback){ + /* return callback && callback(formattedAnchorData) */ + }; + + //get the list data of anchor. + exports.history=function(anchor,callback,limit){ + /* return callback && callback(listofAnchorsData) */ + }; + + //set target Anchor data. + exports.write=function(pair,anchor,raw,protocol,callback){ + /* return callback && callback(toChainProcessStatus) */ + }; + + /* market part */ + //set Anchor status to sell. + exports.sell=function(pair,anchor,cost,target,callback){ + /* return callback && callback(true/false) */ + }; + + //buy anchor on sell. + exports.buy=function(pair,anchor,callback){ + /* return callback && callback(true/false) */ + }; + + //revoke anchor from selling. + exports.unsell=function(pair,anchor,callback){ + /* return callback && callback(true/false) */ + }; + ``` + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 6,000 USDT + +### Milestone 1 — Anchor pallet testing & documents, anchor.js full function + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 6,000 USDT + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 / GPLv3 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. On anchor.js, will supply demo to test. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. I am not so fimilar with Docker, that will take a bit long time. | +| 0e. | Anchor pallet | Will fix if neccessary. Mainly testing this time. | +| 0f. | anchor.js | A demo with all functions will be developed by React | + +## Future Plans + +- Anchor is the data storage part of EasyPolka, it is the most important component. Next, the whole EasyPolka will be open source. At present, it includes the following contents. + +| Order | Name | Demo | Github | introduction | +| -----: | ----------- | ------------- | ------------- | ------------- | +| 1 | Anchor | wss://dev.metanchor.net | [https://github.com/ff13dfly/Anchor](https://github.com/ff13dfly/Anchor) | Linked list on chian & Name service | +| 2 | Saying | [https://freesay.net](https://freesay.net) | Not yet | Plinth for cApp | +| 3 | cSaying | on block 2,220 | Not yet | FreeSaying cApp , pure JS app | +| 4 | vGateway | [https://android.im/vGateway/](https://android.im/vGateway/) | Not yet | Gateway access to vServices | +| 5 | vManager | [https://android.im/vManager/](https://android.im/vManager/) | Not yet | Management portal for vServices | +| 6 | vHistory | No domain, node.js app | Not yet |Anchor cache vService | +| 7 | vSaying | No domain, node.js app | Not yet] | FreeSaying comment vService | +| 8 | vMarket | No domain, node.js app | Not yet | Free charge vService | +| 9 | vMix | No domain, node.js app | Not yet | Front mixer vService | +| 10 | vSocial | No domain, node.js app | Not yet | Fav & tread vService | + +![easypolka.png](http://android.im/anchor/easypolka_not.png) + +- The functions above, you can test on the cApp [freeSaying](https://freesaying.net). +It is not very stable to access Github here, so the left codes are on my private git server. + +- The whole EasyPolka framework works properly, but still so many details to fix and neccesary function to add. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website. + +- Demo cApp [freeSaying](https://android.im/vManager/) is published now. The test network is available, you can access [wss:dev.metanchor.net](wss:dev.metanchor.net). + +- I have tried twice to apply the Gant Application but not accepted. + Anchor, a key-value storage system for substate. Now, it is extended, and applying again, :-) + SimPolk, simulator of Polkadot. From df03f6d8d248c0878055343fd699ff3c71529e8b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 14 Feb 2023 13:03:19 +0100 Subject: [PATCH 079/665] Update index.md Add Anchor --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d34c264c054..39879396cf6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -50,6 +50,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | +| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | ## 2022 From 850d43e9bd2df806dd9d412bbe6209fe71cdd10f Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 15 Feb 2023 05:24:11 -0800 Subject: [PATCH 080/665] Update tokenomics-survey-2022.md (#1540) * Update tokenomics-survey-2022.md Fix format * removed ":" from the title --- applications/tokenomics-survey-2022.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index 1e5eccd3fe8..6f8a5efdfaa 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -1,4 +1,4 @@ -# Substrate Tokenomics: +# Substrate Tokenomics - **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) - **Payment Address:** To be provided (e.g. 0x8920... (USD)) @@ -216,9 +216,9 @@ Personal ### Overview -- Total Estimated Duration: 3 months -- Full-Time Equivalent (FTE): 0.2 FTE -- Total Costs: 10,000 USD +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 0.2 FTE +- **Total Costs:** 10,000 USD ### Milestone 1 — Data gathering & Polkadot Networks From a375228a7f01bcba26c22dcedfa6109f508df2fa Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 16 Feb 2023 08:01:30 -0500 Subject: [PATCH 081/665] RFP: Data Analytics Platform (#1539) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create analysis-website-and-data-platform.md * Update analysis-website-and-data-platform.md * Update docs/RFPs/Open/analysis-website-and-data-platform.md Co-authored-by: Sebastian Müller * Update docs/RFPs/Open/analysis-website-and-data-platform.md Co-authored-by: Sebastian Müller * Update docs/RFPs/Open/analysis-website-and-data-platform.md Co-authored-by: Sebastian Müller --------- Co-authored-by: Sebastian Müller --- .../analysis-website-and-data-platform.md | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 docs/RFPs/Open/analysis-website-and-data-platform.md diff --git a/docs/RFPs/Open/analysis-website-and-data-platform.md b/docs/RFPs/Open/analysis-website-and-data-platform.md new file mode 100644 index 00000000000..79935c631b7 --- /dev/null +++ b/docs/RFPs/Open/analysis-website-and-data-platform.md @@ -0,0 +1,21 @@ +# Analytics Website/Data Platform + +* **Status:** Open +* **Proposer:** [Keegan Quigley](https://github.com/keeganquigley) +* **Teams/People that could deliver the RFP**: @web3go-xyz + +## Project Description :page_facing_up: +On-chain analysis is an important emerging field for the Polkadot & Kusama ecosystems. One can currently use GraphQL to query data via backend services such as [Subquery](https://explorer.subquery.network/) and [Subsquid](https://app.subsquid.io). However, it would be nice to have an easy-to-use front-end with sharable customized dashboards as well. The end result might look similar to [Dune Analytics](https://dune.com/browse/dashboards), a popular data sharing dashboard used in the Ethereum community. Using Dune Analytics, users can quickly create and openly share queries which can then be forked and remixed in a variety of ways by others. + +This RFP, based on a [forum post](https://forum.polkadot.network/t/dune-analytics-style-data-service-for-polkadot-kusama/271) by Rob Habermeier, aims to fund a dashboard designed to allow analysts and power-users to interactively query high-quality data, and subsequently create custom charts and visualizations to share metrics with others. Ideally, many projects would create custom dashboards to share data with the Polkadot & Kusama community. + +At the moment, building custom dashboards requires quite a bit of effort since the data needs to be fed directly from the parachain via Polkadot.js, or through a custom squid or GraphQL via Subquery. This RFP aims to ease the process of building dashboards and sharing powerful data visualizations. + +## Deliverables :nut_and_bolt: +The following items could be potential expected deliverables for the project. Of course, improvements and additions are more than welcome. + +- Define a common dataset and data model for Substrate that can be shared for interactive querying use cases such as on Dune Analytics. +- Build a publicly accessible interactive query engine. The platform should allow users to aggregate raw data from relay chains and parachains into SQL databases that can be easily queried. This might include storing data on a postgreSQL database, for example. +- Users should be able to perform simple SQL queries in a matter of minutes, and create visualizations and dashboards using these queries. +- Provide the ability to integrate data from backend services such as Subsquid, Subquery. +- Create UX/UI to make it easier for analysts and power-users to easily query human-readable data and follow key metrics. The front-end could be written in React, AngularJS, Vue, etc. From d2425e74be7c8732050ce9f60716dfbe4341588c Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 16 Feb 2023 05:57:41 -0800 Subject: [PATCH 082/665] Fix event (from edited to synchronize) (#1542) --- .github/workflows/check_application_document.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index 155b519d6ea..ddb8f7574c9 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -3,7 +3,7 @@ name: Check application document on: workflow_dispatch: pull_request: - types: [opened, edited] + types: [opened, synchronize] jobs: get_filename: From 3f8b08997f6a34984f7be46ee6540c09fd51992a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 16 Feb 2023 14:35:08 -0500 Subject: [PATCH 083/665] Rename docs/RFPs/Under Development/ISO_8583.md to docs/RFPs/open/ISO_8583.md (#1544) --- docs/RFPs/{Under Development => open}/ISO_8583.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/RFPs/{Under Development => open}/ISO_8583.md (100%) diff --git a/docs/RFPs/Under Development/ISO_8583.md b/docs/RFPs/open/ISO_8583.md similarity index 100% rename from docs/RFPs/Under Development/ISO_8583.md rename to docs/RFPs/open/ISO_8583.md From 1a01471380a42b60a7339041147beac551ebf548 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 17 Feb 2023 08:57:42 +0100 Subject: [PATCH 084/665] Move ISO_8583.md from open to Open folder --- docs/RFPs/{open => Open}/ISO_8583.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/RFPs/{open => Open}/ISO_8583.md (100%) diff --git a/docs/RFPs/open/ISO_8583.md b/docs/RFPs/Open/ISO_8583.md similarity index 100% rename from docs/RFPs/open/ISO_8583.md rename to docs/RFPs/Open/ISO_8583.md From ae26cd349e0470478334fb27d6fff591f51550d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 17 Feb 2023 09:29:15 +0100 Subject: [PATCH 085/665] Show edit links on website --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 747791e98b7..5b556500219 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -126,7 +126,7 @@ module.exports = { { docs: { routeBasePath: '/', - // editUrl: 'https://github.com/w3f/grants/edit/master/', + editUrl: 'https://github.com/w3f/Grants-Program/edit/master/', // showLastUpdateAuthor: true, // showLastUpdateTime: true, sidebarPath: require.resolve('./sidebars.js'), From 22d06e5dd150cc8a8a7b3f5e9d014a2d84dff55a Mon Sep 17 00:00:00 2001 From: ashWhiteHat Date: Sat, 18 Feb 2023 04:38:34 +0900 Subject: [PATCH 086/665] zkWasm Rollup: Rollup Transfer Transactions based on Wasm (#1487) * draft wasm rollup * specify apache 2.0 --- applications/zkwasm-rollups-transfer.md | 221 ++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 applications/zkwasm-rollups-transfer.md diff --git a/applications/zkwasm-rollups-transfer.md b/applications/zkwasm-rollups-transfer.md new file mode 100644 index 00000000000..2465d830c58 --- /dev/null +++ b/applications/zkwasm-rollups-transfer.md @@ -0,0 +1,221 @@ +# Zkwasm Rollups Transfer + +- **Team Name:** Zkwasm Rollups Transfer +- **Payment Address:** 0x9061b0787D28d0fDaD845d670F7505EAE5F3B01B (USDT) +- **Level:** 3 + +## Project Overview :page_facing_up: + +We would like to implement transfer rollups by **zkwasm**. + +This project enables us high speed and cheap gas fee transfer transactions by **zkwasm**. The structure is similar to **zk rollup** but we use **wasm** as execution environment. + +### Overview + +Through this grant, we would like to implement rollup L2 envorinment for transfer transactions powered by **zkwasm**. The **zk rollup** allows us high speed and cheap gas fee transfer transactions, and to deposit asset safely. We inherit these features and execute transfer transactions on L2 **wasm** environment, and prove the validity of state transition by zero knowledge proof. +The main differences from **zk rollup** are two things. + +#### General purpose rollup + +The **zk rollup** is application specific and it can only execute transfer transactions. Supporting **wasm** allows us to extend to other functionalities easily as in [zkevm](https://github.com/privacy-scaling-explorations/zkevm-circuits) and we can reuse the circuit which proves the validity of **wasm** instruction set. By implementing all **wasm** ISA, we can finally prove every kind of state transition. + +#### Implement verification function as built-in + +The **zk rollup** is smart contract project. Users need to deposit their asset to smart contract on mainchain, transfer asset on chain after deposit is confirmed and withdraw asset from smart contract on mainchain. It's complicated process and needed a lot of developer workload. By implementing verification function as built-in, normal node can be L2, aggregate transfer transactions without any customizing and send it to verification on mainchain directly. This has huge usability benefit because users don't care about anything but just transfering asset as usual. + +### Project Details + +**zkwasm** depends on `cryptography primitive` and `zero knowledge proof library`. + +#### Cryptography Primitive + +In **zkwasm** scheme, proof generations needs heavy workload. The prover time is latency when users send transaction and verification time is gas cost for miner. We have two approach to resolve this problem. One is the optimization and the other is outsource. We already implemented curve so we would like to optimize and extend it. We are going to implement and optimize as following. + +1. implement `RedDSA` +2. optimize jubjub curve +3. implement client wallet + +`RedDSA` allows us to generate one time signing key which has same signature with private key. We can outsource the computation when generating proof by generating proof generation key. There are several ways to optimize jubjub so we are going to apply it to our implementation. + +Finally, we are going to implement client libraries. + +#### Zero Knowledge Proof Library + +We generate the proof to prove the validity of **wasm** execution. To prove validity of execution, we use plonk. The main strategy is that writing circuits for each **wasm** instruction set and generate the proof. The transaction can be divided into sequence of instruction set. To prove each sequence of instruction set are executed correctly, we can prove the validity of transaction. Finally, we aggregate these proof and generate one proof. Users attach it with their transaction and blockchain verify the proof. We are going to implement following libraries to realize this scheme. + +1. implement `plookup` +2. implement `recursive proof` +3. implement instruction set circuits + +`plookup` allows us to reduce the complexity of instruction set by using lookup table and `recursive proof` allows us to generate one proof by aggregating proof for each instruction set. + +### Ecosystem Fit + +This **zkwasm** allows us to prove the validity of **wasm** state transition. In the future, we can extend it to general purpose rollup as in smart contract executions. This is totally compatible with **wasm** so every project work on **wasm** can use this library and rollup their transaction. + +Our project specializes in working with Substrate and Polkadot, and if we implement cryptographic libraries and optimize these, it would be used for whole network developer. + +I think this can be applied for XCMP to prove the validity of state transaction. + + +## Team :busts_in_silhouette: + +### Team members + +- Ash Whitehat +- Kirill Karbushev + +### Contact + +- **Contact Name:** Invers Inc +- **Contact Email:** info@invers.tech +- **Website:** [Invers](https://invers.tech/) + +### Legal Structure + +- **Registered Address:** 2F・3F Emblem Nishiarai, 3-33-6 Umejima, Adachi City, Tokyo-to 121-0816, Japan +- **Registered Legal Entity:** Invers Inc. + +### Team's experience + +Our company is working on the blockchain scaling and information hiding technologies. We already delivered several grants and implemented cryptographic primitives which are compatible `parity-scale-codec` as described in [Development Status](https://github.com/zero-network/Grants-Program/blob/**zkwasm**-rollups-transfer/applications/**zkwasm**-rollups-transfer.md#development-status-open_book). + + - [zk-rollup](https://github.com/w3f/Grants-Program/blob/master/applications/zk-rollups.md) + - [zk-plonk](https://github.com/w3f/Grants-Program/blob/master/applications/zk-plonk.md) + - [zero-network](https://github.com/w3f/Grants-Program/blob/master/applications/zero-network.md) + +### Team Code Repos + +- [Zero Network](https://github.com/zero-network) +- [Ash Whitehat](https://github.com/NoCtrlZ) +- [Kirill Karbushev](https://github.com/KiriosK) + +### Team LinkedIn Profiles + +We are not on LinkedIn. + +## Development Status :open_book: + +We already implemented cryptographic primitives which are compatible with `parity-scale-codec`. + +- [zero-crypto](https://github.com/zero-network/zero/tree/master/primitive/crypto) [![crates.io badge](https://img.shields.io/crates/v/zero-crypto.svg)](https://crates.io/crates/zero-crypto) +- [zero-jubjub](https://github.com/zero-network/zero/tree/master/primitive/jubjub) [![crates.io badge](https://img.shields.io/crates/v/zero-jubjub.svg)](https://crates.io/crates/zero-jubjub) +- [zero-bls12-381](https://github.com/zero-network/zero/tree/master/primitive/bls12_381) [![crates.io badge](https://img.shields.io/crates/v/zero-bls12-381.svg)](https://crates.io/crates/zero-bls12-381) +- [zero-elgamal](https://github.com/zero-network/zero/tree/master/primitive/elgamal) [![crates.io badge](https://img.shields.io/crates/v/zero-elgamal.svg)](https://crates.io/crates/zero-elgamal) +- [zero-pairing](https://github.com/zero-network/zero/tree/master/primitive/pairing) [![crates.io badge](https://img.shields.io/crates/v/zero-pairing.svg)](https://crates.io/crates/zero-pairing) +- [zero-plonk](https://github.com/zero-network/dusk-plonk/tree/acffa2e0af43fdaf40c0f1e4d38b6124c57f5a05) [![crates.io badge](https://img.shields.io/crates/v/zero-plonk.svg)](https://crates.io/crates/zero-plonk) + +## Development Roadmap :nut_and_bolt: + +Through this grant, we are going to implement the **zkwasm** which supports transfer transactions. + +### Overview + +- **Total Estimated Duration:** 6 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 40,000 USDT + +### Milestone 1 | Crypto Primitive + +- **Estimated duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 10,000 USDT + +In `Milestone 1`, we are going to implement `RedDSA`, optimize `Jubjub` curve and client wallet. These can improve usability. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users use the wallet and delegate proof generation. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/tutorial/workshop that explains | +| 1. | `RedDSA` implementation | We are going to implement `RedDSA`. `RedDSA` implementation allows us to generate one time signing key to encrypt zero knowledge proof witness. One time signing key doesn't have permission to transfer asset. The specification is aligned with zcash [sapling 5.4.6](https://github.com/zcash/zips/blob/main/protocol/sapling.pdf) | +| 2. | `Jubjub` curve optimization | `Jubjub` curve optimization allows us to perform elliptic curve arithmetic quickly. In our scheme, zero-knowledge prover time is latency when users send transaction and verification time is gas cost on chain. Specifically, we implement [Twisted Edwards Curves Revisited](https://iacr.org/archive/asiacrypt2008/53500329/53500329.pdf), [Jacobian Coordinates](https://eprint.iacr.org/2014/1014.pdf) and [wNAF](https://www.scitepress.org/papers/2014/50587/50587.pdf), [pippenger](https://cr.yp.to/papers/pippenger.pdf). | +|3. | Client wallet implementation |We are going to implement client wallet of `RedDSA`. With this wallet, user can generate private key and one time signing key, and delegate their proof generation, in addition to normal wallet functionalities through RPC.| + +### Milestone 2 | Plonk Extension + +- **Estimated duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 10,000 USDT + +In `Milestone 2`, we are going to implement `plookup` and recursion on top of [plonk](https://github.com/zero-network/dusk-plonk). These can improve the performance and prove the validity of several circuits separatelly. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users implement `plookup` circuit and aggregate proofs. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/tutorial/workshop that explains | +| 1. | `plookup` implementation | We are going to implement `plookup` to our [plonk](https://github.com/zero-network/dusk-plonk). `plookup` allows us to use precomputed lookup table in zero knowledge circuit and reduce complexity of circuit.| +| 2. | `recursive proof` implementation | We are going to implement `recursive proof` to our [plonk](https://github.com/zero-network/dusk-plonk). `recursive proof` allows us to generate aggregation circuit and bundle **wasm** ISA proofs to one.| +| 3. | circuit implementation | We are going to implement zero knowledge circuit which supports combination of `plookup` and `recursive proof`. This circuit allows us to implement the circuit for **zkwasm**.| + +### Milestone 3 | Zk Wasm Transfer Prover and Verifier + +- **Estimated duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 10,000 USDT + +In `Milestone 3`, we are going to implement `plookup` and `recursive proof` on top of [plonk](https://github.com/zero-network/dusk-plonk). These can improve the performance and prove the validity of several circuits separatelly. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users prove the validity of **wasm** ISA execution. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/tutorial/workshop that explains | +| 1. | **wasm** circuit implementation | We are going to implement zero knowledge circuit for **wasm** ISA. The transfer transaction consists of **wasm** ISA. We divide it into read and write access to each resource and prove with `plookup` and `recursive proof`.| +| 2. | proof generator implementation | We are going to implement proof generator which generates the proof for **wasm** ISA. The input is execution trace of **wasm** ISA and output is zero knowledge proof. This is implemented on off-chain.| +| 3. | proof verification implementation | We are going to implement proof verification function which verifies the proof. This is implemented on on-chain.| + +### Milestone 4 | Zk Wasm Transfer Rollup Node + +- **Estimated duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 10,000 USDT + +In `Milestone 4`, we are going to implement rollup node. This can aggregate transfer transactions and generate proof. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users setup the node and send transfer transactions. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/tutorial/workshop that explains | +| 1. | rollup node implementation | We are going to implement rollup node. This allows to setup the execution environment of L2 transfer transactions, generate the proof and commit the state to mainchain.| +| 2. | client transactor implementation | We are going to implement client library to request transfer transactions to rollup node. This is the combination of Redsa wallet and proof generator. | +| 3. | integrate network | We are going to integrate network. There are four actor mainchain, rollup node and transactor, prover. The transactor generates the transaction and delegate proof generation to prover. The prover generates proof and send it back to transactor. The transactor send transaction to rollup node. The rollup node aggregates these transaction and commit the state to mainchain. | + +## Future Plans + +- Fully zkwasm rollup +- Proof for XCMP +- FHE +- Verifiable hardware + +## Additional Information :heavy_plus_sign: + +- How did you hear about the Grants Program? + - Announcement by another team +- Work you have already done. + - [zero-crypto](https://crates.io/crates/zero-crypto) + - [zero-jubjub](https://crates.io/crates/zero-jubjub) + - [zero-bls12-381](https://crates.io/crates/zero-bls12-381) + - [zero-elgamal](https://crates.io/crates/zero-elgamal) + - [zero-pairing](https://crates.io/crates/zero-pairing) + - [zero-plonk](https://crates.io/crates/zero-plonk) + - [pallet-plonk](https://github.com/zero-network/zero/tree/master/pallets/plonk) + - [pallet-encrypted-balance](https://github.com/zero-network/zero/tree/master/pallets/encrypted_balance) + - [pallet-confidential-transfer](https://github.com/zero-network/zero/tree/master/pallets/confidential_transfer) + - [above documentation](https://zero-network.github.io/zero/) +- Wheter there are any other teams who have already contributed (financially) to the project. + - No. +- Previous grants you may have applied for. + - [zk-rollup](https://github.com/w3f/Grants-Program/blob/master/applications/zk-rollups.md) + - [zk-plonk](https://github.com/w3f/Grants-Program/blob/master/applications/zk-plonk.md) + - [zero-network](https://github.com/w3f/Grants-Program/blob/master/applications/zero-network.md) From 509c45283c530d0b4bcc86fe921915f26e707de7 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 17 Feb 2023 20:42:08 +0100 Subject: [PATCH 087/665] Update index.md Zkwasm Rollups Transfer --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 39879396cf6..496932213d1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,6 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | +| [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | ## 2022 @@ -631,3 +632,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Noise Explorer](https://symbolic.software/) | Rust code generator for formally verified (Noise/ cryptographic) handshakes | [Source Code](https://source.symbolic.software/noiseexplorer/noiseexplorer) | ☐ | ☒ | ☒ | | [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | | [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | + From 11ed0257c245feb855d64b4370da4d3a909266a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 17 Feb 2023 21:11:01 +0100 Subject: [PATCH 088/665] Update index.md Interstellar completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 496932213d1..2bea4b2013c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -204,7 +204,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blackprint](https://github.com/Blackprint) | [Integrating Polkadot.js with Blackprint](./blackprint-js.md) | [GitHub](https://github.com/Blackprint) | ☐ | ☒ | ☒ | | [OpenSquare Network](https://www.opensquare.network/) | [OpenSquare Paid QA protocol](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | | [@Scale Technologies](https://atscale.xyz) | [Libra - Decentralized Payment Network](./Libra.md) | [GitHub](https://github.com/atscaletech/) | ☐ | ☒ | ☒ | -| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☐ | +| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 1](./Interstellar-Network.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☒ | ☒ | | [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | | [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | | [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | From 801d1dc628d560f70fb7cffcfd44b01d9f07c84a Mon Sep 17 00:00:00 2001 From: Xavier Lau Date: Sat, 18 Feb 2023 14:59:17 +0800 Subject: [PATCH 089/665] Application: Slothunter (#1531) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Application: Slothunter * Update applications/slothunter.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update applications/slothunter.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update applications/slothunter.md Co-authored-by: Sebastian Müller * Update * Update Signed-off-by: Xavier Lau * Update --------- Signed-off-by: Xavier Lau Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: Sebastian Müller --- applications/slothunter.md | 157 +++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 applications/slothunter.md diff --git a/applications/slothunter.md b/applications/slothunter.md new file mode 100644 index 00000000000..e1fbe510309 --- /dev/null +++ b/applications/slothunter.md @@ -0,0 +1,157 @@ +# Slothunter + +- **Team Name:** hack-ink +- **Payment Address:** 0xccd79b2b77e71292924e85de130bfb1c03d94522 (Ethereum) USDC +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +Slothunter is a Rust CLI program. + +It's goal is to help teams/users to participate in the Polkadot auction more easily and efficiently. + +### Ecosystem Fit + +I noticed nobody realized there was a slot action, and no one participated in it until Kusama's 58th auction ended. + +This could help small teams to catch the chance. + +And this also could help teams/users to bid/contribute automatically. + +### Details(spec) + +Slothunter will be implemented in Rust, which means it will be efficient and stable while running as a system service. + +This grant contains 7 parts. + +1. Monitor the auction state. + 1. This program will run as a system service. + 2. It will fetch and cache the chain state periodically. +2. Calculate the current winner. + 1. Base on previous data, calculate the current auction winner. +3. Email and webhook notifications. + 1. It could notify the users: + 1. New auction started. + 2. Insufficient fund for bidding/contributing. + 3. Stop bidding/contributing and reason. + 4. New winner. + 5. Auction ended. + 2. The email and webhook addresses are configurable. + 3. The notification will be logged in the terminal by default. + 4. The email/webhook notification can be enabled or disabled by user. e.g. Some users think the email is annoying. + 5. All the notification content will be present in json style. + 6. Webhook notification can be integrated to Slack, Telegram, etc. e.g. the telegram bot will provide a listen address and Slothunter will push the notification to the bot periodically. +4. Auto bidding/contributing. + 1. Auto bid/contribute if there is new winner. And the bot will stop if the new winner's price is greater than the max acceptable value in the configuration file. + 2. Able to use regular account to bid/contribute. + 3. Able to use proxy account to bid/contribute. +5. Customize bidding/contributing strategy, including: + 1. Set max acceptable value. + 2. Set bidding/contributing frequency every `x` blocks. +6. Provide a config.toml to configure: + 1. Relaychain. + 2. Bidding/contributing account. + 3. Bidding/contributing amount, target and max acceptable price. + 4. Keep bidding/contributing every `x` blocks. + 5. Notification mailbox. + 6. Webhook URI. +7. A Telegram bot, this should be easily deployed on any ubuntu:20.04+ server. + +Teams/users could start the bot before the auction. And all the things should go as expected. +Teams/users could deploy the telegram bot and get latest auction status in group. + +## Team :busts_in_silhouette: + +### Team members + +- Xavier Lau + +### Contact + +- **Contact Name:** Xavier Lau +- **Contact Email:** xavier@inv.cafe +- **Website:** https://linktr.ee/aurevoirxavier + +### Legal Structure + +Personal. (no legal structure entry) + +### Team's experience + +[Xavier Lau](https://github.com/AurevoirXavier) + +- Six years of experience in Rust. +- Three years of experience in Substrate. +- Darwinia Network core developer, since 2019. +- Actively at [Substrate StackExchange](https://substrate.stackexchange.com/users/251/aurevoirxavier). +- Grants contributor, [Subalfred](https://github.com/hack-ink/subalfred). + +### Team Code Repos + +- https://github.com/hack-ink +- https://github.com/hack-ink/array-bytes +- https://github.com/hack-ink/githuber +- https://github.com/hack-ink/subalfred +- https://github.com/hack-ink/unescaper + +Please also provide the GitHub accounts of all team members. +If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/AurevoirXavier + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/xavier-lau-b0655310a + +### Overview + +- **Total Estimated Duration:** 5 weeks +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 11,000 USD + +### Milestone 1 Slothunter CLI tool + +- **Estimated duration:** 4 weeks +- **FTE:** 1 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | There will be a guide to tell people how to use this. | +| 0c. | Testing guide | There will be a docker file and a guide to tell the auditor how to run the tests. It will guide you how to setup an auction and do the tests. | +| 1. | Auction winner calculator | Based on the 0c., run the binary, you should see the current winner from the terminal log. | +| 2. | Notification component | Based on the 0c., run the binary, you should receive these notification correctly. | +| 3. | Auto bidding/contributing component | Based on the 0c., run the binary, you should see you are bidding/contributing your parathread from the Polkadot Apps. | +| 4. | Bidding/contributing configuration component | Based on the 3., you can customize your bidding/contributing strategy in a toml file, you should see your bidding/contributing behavior works the same as the strategy defined. | +| 5. | Releases | Linux, macOS, Windows prebuilt binaries, and crates.io release. | + +### Milestone 2 Slothunter notification Slack/Telegram bot setup guide + +- **Estimated duration:** 1 weeks +- **FTE:** 1 +- **Costs:** 1,000 USD + +| Number | Deliverable | Specification | +| -----: | ------------------- | -------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | There will be a guide to tell people how to use this. | +| 0c. | Testing guide | There will be a guide to tell the auditor how to run the tests. | +| 1. | Workshop repository | Follow the tutorial in this repository to setup the bot, and you should see the notification appear in Slack and Telegram. | + +## Future Plans + +- Keep connected with the community/parity and make it better. + +## Additional Information :heavy_plus_sign: + +We could talk about the bidding/contributing strategy. It's really flexible. If anyone got more ideas. I can integrate them into the program. + +I have talked to some teams few months ago. Because they ask me what script did I use during the bidding. Can I share it? +Actually, I set some proxies accounts and share them with my team members. Then we watch the auction manually. If there is a new winner we could bid immediately. + +As I said before, there is even an empty auction in Kusama. This is not friendly and not good for the ecosystem. So, I decided to develop this. And I think it is valuable. + +**How did you hear about the Grants Program?** GitHub. From 5e375de639891c3ae1c16ff7d4912772321ae1f9 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 20 Feb 2023 02:05:18 -0800 Subject: [PATCH 090/665] Update centrifuge-gsrpc-v2.md (#1552) Fix https://github.com/w3f/Grant-Milestone-Delivery/pull/753 checks --- applications/centrifuge-gsrpc-v2.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/applications/centrifuge-gsrpc-v2.md b/applications/centrifuge-gsrpc-v2.md index a340ae42b0c..672fbc21212 100644 --- a/applications/centrifuge-gsrpc-v2.md +++ b/applications/centrifuge-gsrpc-v2.md @@ -177,6 +177,10 @@ V2 will be implemented as part of this grant ## Development Roadmap :nut_and_bolt: +### Overview + +- **Total Costs:** 54,000 USD + ### Milestone 1 - Dynamic Type Loader from metadata - **Estimated duration:** 5 weeks (200 hours) From e366852c744918c42539a38f6eb44c68b37df398 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 20 Feb 2023 02:05:34 -0800 Subject: [PATCH 091/665] Update validators_selection.md (#1553) Attempt to fix format --- applications/validators_selection.md | 1 - 1 file changed, 1 deletion(-) diff --git a/applications/validators_selection.md b/applications/validators_selection.md index fd162fd4202..0729259771f 100644 --- a/applications/validators_selection.md +++ b/applications/validators_selection.md @@ -1,4 +1,3 @@ - # Validators selection From 3caf045e50eb8ef36fd0e69ee435fe83d09fb3d9 Mon Sep 17 00:00:00 2001 From: Michael Yuan Date: Mon, 20 Feb 2023 04:15:26 -0600 Subject: [PATCH 092/665] Amend milestone #3 delivery timeline (#1551) As discussed here: https://github.com/w3f/Grants-Program/pull/862#issuecomment-1382385409 the milestone #3 task is much greater than we originally envisioned. We need to reconcile changes to the substrate code base since we started and then merge our changes back into the main tree in order to propose an upstream PR and run the most up-to-date performance tests. So, I extended the time needed for this task to 6 months. Thank you. --- applications/wasmedge_substrate.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/wasmedge_substrate.md b/applications/wasmedge_substrate.md index 21757fe802d..12a3c89d54c 100644 --- a/applications/wasmedge_substrate.md +++ b/applications/wasmedge_substrate.md @@ -129,7 +129,7 @@ https://github.com/ParaState/substrate-ssvm-node ### Milestone 3 -- Performance benchmarks and analysis -- Estimated duration: 2 month +- Estimated duration: 6 months - FTE: 2 - Costs: 15,000 USD From 97406fd0828e0cb065823d0c195639d8cca790a7 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 20 Feb 2023 04:01:26 -0800 Subject: [PATCH 093/665] Update index.md (#1554) Polkadot Smart Chain -> First Delivery, Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2bea4b2013c..15e37d61948 100644 --- a/applications/index.md +++ b/applications/index.md @@ -33,7 +33,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | -| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☐ | ☐ | +| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | From 46bf2fa8c56816ba0b9858b056c57cf8e6c53d6f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 20 Feb 2023 16:33:26 +0100 Subject: [PATCH 094/665] Update index.md Add Slothunter --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 15e37d61948..2a9785fbca4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,6 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | +| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | ## 2022 From f562caa7438ebb507059df06567c0eecb7eee0f8 Mon Sep 17 00:00:00 2001 From: Arthur Hoeke <34348870+ArthurHoeke@users.noreply.github.com> Date: Mon, 20 Feb 2023 19:42:32 +0100 Subject: [PATCH 095/665] Cyclops Grant Request (#1549) * added cyclops * Updated payment method * Changed PHP to Node-JS solution * Added ERA point tracking --- applications/cyclops.md | 232 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 232 insertions(+) create mode 100644 applications/cyclops.md diff --git a/applications/cyclops.md b/applications/cyclops.md new file mode 100644 index 00000000000..2ac1e9958f4 --- /dev/null +++ b/applications/cyclops.md @@ -0,0 +1,232 @@ +# Cyclops Validator Dashboard + +- **Team Name:** decentraDOT +- **Payment Address:** BTC: `36GRQ5h9L17fSDsbK59mpkYvsQuifatRpr` +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +Cyclops keeps a watchful eye on your Polkadot validators, giving you a clear vision of their performance and rewards. + +Cyclops aims to provide a comprehensive validator dashboard application for network validators. Cyclops will help validators to keep track of all their validators' performance and income, making it easier to manage and optimize their operations. With Cyclops, validators can access real-time data, view historical data, and receive notifications on key performance indicators, making it a vital tool for those who want to optimize their operations. + +We became interested in building this project due to the popularity of our close-sourced proof of concept validator dashboard, available at [dashboard.decentradot.com](https://dashboard.decentradot.com). Currently our PoC product is monitoring over 80 validators for 50+ validator operators. We recognized the need for a similar open-sourced solution which supports parachain validators, and is developed in a future proof way. + +Cyclops will provide a user-friendly interface for validators to monitor their nodes' performance, income, and network stats. The app will feature customizable alerts that notify validators of critical events, such as downtime or poor parachain performance. + +### Project Details + +![image](https://user-images.githubusercontent.com/34348870/219812406-f01a970c-616b-4feb-8d1c-ee14975a9f17.png) + +#### PoC + +![image](https://user-images.githubusercontent.com/34348870/219812313-94c0f79c-f5b9-42c2-a724-04c6cbfaccec.png) + +We currently have an operational proof-of-concept [here](https://dashboard.decentradot.com). + +Initially this PoC was developed as a passion project, only meant as a closed-source tool for monitoring our own validators. After much interest from other 1kv community members, we decided to create a simple registration module and allow other network operators to use our tool. Currently our PoC has over 50 active users, monitoring 80+ validators. Even though this PoC is currently functional, it was never built with the intention to become a public service, and much of the back-end code and database structure reflects this. + +The front-end is fully developed using vanilla Javascript, and the back-end runs on a node-js server utilising SocketJS for data transfer. Because of this, the current dashboard is not future proof and is hard to maintain / add additional features. Adding support for parachain validators would require a full code refactor. + + +#### Front-end stack + +- Angular +- Typescript +- SCSS +- jQuery +- Chart.js + +The combination of Angular and TypeScript will provide a powerful toolset for building the front-end of Cyclops, allowing us to easily implement API features and manage data / requests. + +#### Back-end stack + +- Node-JS +- Express framework +- Subscan API +- coingecko API + +Cyclops will use the Express Node framework for a custom middleware solution, fetching data from the Polkadot subscan API, processing it, and providing it to the frontend application. The middleware will also handle any necessary authentication and rate limiting that may be required. + +#### Features + +- Login & registration system +- Support for Polkadot and parachain validators +- Elected / waiting status information +- Daily income tracking +- Token price tracking +- Network ERA progress information +- 1kv statistics +- Stash balance tracking +- Per-session ERA point performance tracking +- Monthly income reports (PDF overview of all reward transactions, handy for TAX purposes) + Reward date + Amount + Monetary value at time of payout + Extrinsic hash +- E-mail alert system + downtime + poor performance + +### Ecosystem Fit + +#### Where and how does your project fit into the ecosystem? +Cyclops is an important addition to the Polkadot ecosystem as it addresses a key need for network validators. Validators are a critical part of any blockchain network, and they play a key role in securing the network, validating transactions. However, managing a large number of validators can be a complex and time-consuming task, and there is a need for tools that can help validators to manage their operations more efficiently. + +Cyclops fits into the Polkadot ecosystem as a validator dashboard application that provides a comprehensive and user-friendly interface for validators to manage their operations. The application also provides detailed analytics and insights to help validators make informed decisions about their operations. + +Cyclops complements other tools and services in the Polkadot ecosystem, such as Polkadot-JS, Polkadot telemetry, and Polkadot wallet applications. + +#### Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? +Validator operators + +#### What need(s) does your project meet? +We meet several critical needs for validators in the Polkadot ecosystem, including: + +Efficient Validator Management: Validator management can be a complex and time-consuming task, especially for validators who are managing a large number of validators. Cyclops provides a user-friendly dashboard that allows validators to easily monitor and manage their validators' performance and income, enabling them to optimize their operations. + +Real-Time Performance Monitoring: The Polkadot network is constantly evolving, and validators need to stay on top of performance metrics to ensure that their validators are operating effectively and efficiently. Cyclops provides real-time data on key performance indicators, enabling validators to quickly identify and address any issues. + +Historical Data Analysis: Historical data analysis is critical for validators who need to understand their validators' performance over time. Cyclops provides historical data and detailed analytics, allowing validators to make informed decisions about their operations. + +Notifications and Alerts: Validators need to stay on top of network events and changes that can impact their validators' performance and income. Cyclops provides notifications and alerts to help validators stay informed about critical events and make informed decisions about their operations. + +#### Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? +As far as I am aware, there are no similar projects on either Polkadot nor other blockchains. Grafana validator dashboards exist for Ethereum, though do not offer a similar level of insight and income management tools. + +## Team :busts_in_silhouette: + +### Team members + +* Arthur Hoeke (team leader, full-stack developer) [linkedIn](https://www.linkedin.com/in/arthur-hoeke-170691103/) +* Johan Hoeke (UNIX SysAdmin) [linkedIn](https://nl.linkedin.com/in/johanhoeke) + +### Contact + +- **Contact Name:** Arthur Hoeke +- **Contact Email:** [admin@decentradot.com](mailto:admin@decentradot.com) +- **Website:** [decentradot.com](https://decentradot.com/) + +### Legal Structure + +- **Registered Address:** Kea boumanstraat 74, Tilburg, The Netherlands +- **Registered Legal Entity:** decentraDOT (KVK 85801925) + +### Team's experience + +#### Arthur Hoeke +Arthur Hoeke is a seasoned full-stack software developer with over 7 years of experience in developing web and software products. He has specialized in web development and blockchain technology and has a track record of working on various projects. + +Arthur started his career in software development in 2016 and has since then been involved in developing a wide range of web applications and software applications. One of Arthur's notable projects was the development of a Zilliqa wallet app, a decentralized cryptocurrency wallet built on the Zilliqa blockchain. He played a key role in developing the app's architecture, designing the user interface, and implementing various security features to ensure the wallet's safety and security. + +Arthur has also worked as a full-stack developer for the NFT platform Mintable, where he was responsible for developing various features for the platform, including the backend APIs, and the user interface. + +#### Johan Hoeke +Johan Hoeke is an experienced Unix SysAdmin with over 16 years of experience working for Tilburg University in Holland. He is a highly skilled professional with a strong service-oriented mindset and an extensive background in problem-solving using open source solutions. + +Johan is a Red Hat Certified Engineer (RHCE) and has a deep understanding of Unix-based systems, with expertise in system administration, security, network architecture, and high availability solutions. + +### Team Code Repos + +- https://github.com/ArthurHoeke?tab=repositories + +### Team LinkedIn Profiles (if available) + +- [Arthur Hoeke](https://www.linkedin.com/in/arthur-hoeke-170691103/) +- [Johan Hoeke](https://nl.linkedin.com/in/johanhoeke) + + +## Development Status :open_book: + +We currently have a fully operational proof-of-concept, and have started with the UI-UX rework. Work on front and back-end will begin after the user-interface design has been completed. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** $26,000 + +### Milestone 1 Front-end — finish UI design in Figma and convert to HTML, Angular setup + +- **Estimated duration:** 3 weeks +- **FTE:** 1 +- **Costs:** 6,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide basic documentation about how to setup the project and generate a build. (eg. install node packages, et cetera) | +| **0c.** | Testing and Testing Guide | Website design will corrospond to Figma design and be developed to HTML5 standards. | +| **0d.** | Docker | does not apply | +| 1. | Figma design | UI-UX design for Cyclops in Figma, containing screens for: login, register, dashboard, settings | +| 2. | HTML / SCSS | Convert Figma design into a website using HTML5 and CSS | +| 3. | Angular setup | Create the Angular project for Cyclops, include pages for website | + + +### Milestone 2 Back-end — Middleware API + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide basic documentation about how to self-host the express middle, setup database, setup e-mail smtp, subscan API key and API endpoints | +| **0c.** | Testing and Testing Guide | We will provide an API-endpoint which tests all services (smtp, substrate API, database connection) and returns status | +| **0d.** | Docker | We will provide a dockerfile to demonstrate the API running on a local machine | +| 1. | Express API endpoints | Setup express and all required end-points | +| 2. | Database structure | Setup full database structure | +| 3. | SMTP functionality | Setup smtp functionality for e-mail alerts | +| 4. | Subscan API | Implement subscan API | + +### Milestone 3 Release — Implement middleware into front-end + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will update our front-end documentation to reflect how to implement the back-end API | +| **0c.** | Testing and Testing Guide | We will host Cyclops on dashboard.decentradot.com for public testing and provide a basic guide on how to get started using the application | +| **0d.** | Docker | We will provide a dockerfile to demonstrate the full project running on a local machine | +| **0e.** | Article | We will publish an article on Medium which explains Cyclops and a basic setup guide | +| 1. | API Service | Create service in Angular to communicate with API | +| 2. | Display data | Fetch data from API and display on dashboard | +| 3. | Elected / waiting | Display elected / waiting status per validator | +| 4. | Reward tracking | Display daily income tracking | +| 5. | Token price tracking | Display token price data | +| 6. | ERA | Display network ERA progress information | +| 7. | 1kv statistics | Display 1kv statistics if applicable to selected validator | +| 8. | Stash | Stash balance tracking | +| 9. | PDF reports | Monthly PDF export functionality, overview of all reward transactions | +| 10. | E-mail alert system | Sent e-mail alert if validator is down | +| 11. | ERA point tracking | Per-session ERA point performance tracking | + + +## Future Plans + +We are committed to supporting and promoting the project both in the short term and in the long term. In the short term, we intend to use, enhance, promote and support the project in the following ways: +Use: We will use Cyclops internally to monitor and manage our own validators, and to gain insight into the performance and income of our validators. This will allow us to optimize Cyclops accordingly. + +Enhance: We will continuously work to enhance Cyclops by adding new features and improving existing ones. We will listen to feedback from our users and incorporate their suggestions into the project, ensuring that it remains a valuable tool for network validators. + +Promote: We will promote Cyclops to the Polkadot community and beyond, through various channels including social media, forums, and other relevant communities. We will actively seek out new users and collaborators, and work to build a strong community around the project. + +Support: We will provide support to our users through various channels including email and the 1kv Element chatroom. We will ensure that our users have a smooth experience with Cyclops, and that any issues are resolved quickly and efficiently. + +## Referral Program (optional) :moneybag: + +Not applicable + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website From 6355031ddeedc3a41d9b50799b87e9eb760cb31a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Mon, 20 Feb 2023 16:40:57 -0500 Subject: [PATCH 096/665] Update index.md (#1555) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2a9785fbca4..4cc94cc7f51 100644 --- a/applications/index.md +++ b/applications/index.md @@ -91,7 +91,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | -| [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☐ | ☐ | +| [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | From 40331b6b91a7a9f983e66c6b459f926214f28119 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 21 Feb 2023 09:30:24 +0100 Subject: [PATCH 097/665] Update index.md Add Cyclops --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 4cc94cc7f51..353a3e8b1ec 100644 --- a/applications/index.md +++ b/applications/index.md @@ -53,6 +53,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | +| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | + ## 2022 From 40131b3de761616392d2b1ea045648a41a98ac3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 21 Feb 2023 12:42:30 +0100 Subject: [PATCH 098/665] Update rfps.md Add Analytics Website/Data Platform RFP to readme --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index 7a947c1b4ae..e83d623ced6 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -29,6 +29,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | :-- | :----: | :----------: | | [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 🟢 | 29.11.2021 | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟢 | 29.11.2021 | +| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | | [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | From cf8ccd97a489f913cda92b08ac498dcab1902877 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 21 Feb 2023 20:28:20 +0100 Subject: [PATCH 099/665] fiat payment (#1556) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fiat payment * Update README.md Co-authored-by: Sebastian Müller * Update applications/application-template-research.md Co-authored-by: Sebastian Müller * Update applications/application-template.md Co-authored-by: Sebastian Müller * Update docs/Process/how-to-apply.md Co-authored-by: Sebastian Müller * Update docs/Support Docs/T&Cs.md Co-authored-by: Sebastian Müller * Update maintenance/maintenance-template.md Co-authored-by: Sebastian Müller * Update .github/pull_request_template.md Co-authored-by: Sebastian Müller * Update T&Cs.md --------- Co-authored-by: Sebastian Müller --- .github/pull_request_template.md | 2 +- README.md | 4 ++-- applications/application-template-research.md | 4 ++-- applications/application-template.md | 4 ++-- docs/Process/how-to-apply.md | 2 +- docs/Support Docs/T&Cs.md | 6 +++--- docs/referral-program.md | 2 +- maintenance/maintenance-template.md | 2 +- 8 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 50a61943176..365efb7229a 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -14,7 +14,7 @@ - [x] The [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md) has been copied and aptly renamed (`project_name.md`). - [ ] I have read the [application guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md). -- [ ] A BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (aUSD/USDT) address for the payment of the milestones is provided in the application. +- [ ] Payment details have been provided (bank details via email _or_ BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) address in the application). - [ ] The software delivered for this grant will be released under an open-source license specified in the application. - [ ] The initial PR contains only one commit (squash and force-push if needed). - [ ] The grant will only be announced once the first milestone [has been accepted](https://github.com/w3f/Grant-Milestone-Delivery#process) (see the [announcement guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/announcement-guidelines.md)). diff --git a/README.md b/README.md index 52ab51a465b..c4b54011a0a 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ The W3F Grants Program offers different grant levels to help you best depending ## :pencil: Process -> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in Bitcoin, USDT (on [Statemine/Statemint](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)), USDC/DAI (Ethereum) or aUSD (Acala). If you want to apply in **private** and/or you need to be paid out in **fiat**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on [Statemine/Statemint](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. ### 1. Application @@ -223,7 +223,7 @@ Please note that: We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. -In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala). +In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). ## :bulb: Help diff --git a/applications/application-template-research.md b/applications/application-template-research.md index f455aec6ad4..f191321f29f 100644 --- a/applications/application-template-research.md +++ b/applications/application-template-research.md @@ -4,7 +4,7 @@ > > See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. - **Team Name:** Legal name of your team (e.g. Duo) -- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > :exclamation: *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* @@ -159,7 +159,7 @@ Please include here You can find more information about the program [here](../README.md#moneybag-referral-program). - **Referrer:** Name of the Polkadot Ambassador or GitHub account of the Web3 Foundation grantee -- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) ## Additional Information :heavy_plus_sign: diff --git a/applications/application-template.md b/applications/application-template.md index 29a3e5405b9..57087dad840 100644 --- a/applications/application-template.md +++ b/applications/application-template.md @@ -4,7 +4,7 @@ > > See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. - **Team Name:** Legal name of your team (e.g. Duo) -- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > :exclamation: *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* @@ -159,7 +159,7 @@ Please include here You can find more information about the program [here](../README.md#moneybag-referral-program). - **Referrer:** Name of the Polkadot Ambassador or GitHub account of the Web3 Foundation grantee -- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) ## Additional Information :heavy_plus_sign: diff --git a/docs/Process/how-to-apply.md b/docs/Process/how-to-apply.md index 892fbcb0703..cd1d80b9dca 100644 --- a/docs/Process/how-to-apply.md +++ b/docs/Process/how-to-apply.md @@ -6,7 +6,7 @@ title: 1. Application :::caution -The process below is independent of the [level](../Introduction/levels.md). Payment is made in Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala). If you want to apply in **private** and/or you need to be paid out in **fiat**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +The process below is independent of the [level](../Introduction/levels.md). Payment is made in fiat, Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. ::: diff --git a/docs/Support Docs/T&Cs.md b/docs/Support Docs/T&Cs.md index 8f300069bd0..69468d88c17 100644 --- a/docs/Support Docs/T&Cs.md +++ b/docs/Support Docs/T&Cs.md @@ -1,7 +1,7 @@ Grants Terms and Conditions =========================== -Updated December 2022 +Updated February 2023 * * * * * @@ -75,7 +75,7 @@ To apply for the Web 3.0 Foundation Grants Program, your application shall fulfi - it shall be a research or software-based project, which contributes to the advancement of the Polkadot ecosystem; - the Software shall be released under the Apache license version 2.0.; -- You must accept payment in Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala); +- You must accept payment in fiat, Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum); - You will need to submit the application and deliver the milestones according to the process specified below; The grants process consists of five parts, each of them described in more detail below: @@ -123,7 +123,7 @@ As soon as one evaluator approves the pull request, the delivery is officially a **(v) Payment process:** -The Operations Team specified in the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program), gets notified once the above-specified delivery was accepted. As soon as any feedback is provided by the evaluators, this feedback first needs to be resolved. After this, the Operations Team makes the payment to the Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala) address specified in the initial application. +The Operations Team specified in the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program), gets notified once the above-specified delivery was accepted. As soon as any feedback is provided by the evaluators, this feedback first needs to be resolved. After this, the Operations Team makes the payment to the Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum) address specified in the initial application. ## 5. Scope of these Terms and Conditions The subject matter of these Terms and Conditions is (i) the development of the Software by You in accordance with the Specifications, Milestones and Time Schedule, as well as any related activities (including any development activities undertaken before the Effective Date in relation to the Software) (collectively referred to as "Development Work") in accordance with the terms of these Terms and Conditions. diff --git a/docs/referral-program.md b/docs/referral-program.md index 63b5933c0ad..dc030b2a613 100644 --- a/docs/referral-program.md +++ b/docs/referral-program.md @@ -5,4 +5,4 @@ title: Referral Program We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. -In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot), USDC/DAI (Ethereum) or aUSD (Acala). +In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). diff --git a/maintenance/maintenance-template.md b/maintenance/maintenance-template.md index 742bfd8b913..56ed521e59d 100644 --- a/maintenance/maintenance-template.md +++ b/maintenance/maintenance-template.md @@ -5,7 +5,7 @@ > See the [Maintenance Grants Process](https://github.com/w3f/Grants-Program#hammer_and_wrench-maintenance-grants) on how to submit a proposal. - **Team Name:** Legal name of your team (e.g. JsonCorp) -- **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (aUSD/USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* From 64c8bac13b6598284ed2188e9c5d093267bb6fc5 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Tue, 21 Feb 2023 14:35:13 -0500 Subject: [PATCH 100/665] Update application index (#1557) IPFS Utilities first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 353a3e8b1ec..68baad7aec0 100644 --- a/applications/index.md +++ b/applications/index.md @@ -74,7 +74,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | -| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☐ | ☐ | +| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | From c405925056d9cad4075fb624e28a77457f7b0e5d Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 21 Feb 2023 20:43:21 +0100 Subject: [PATCH 101/665] npm update --- package-lock.json | 25561 +++++++++++++------------------------------- 1 file changed, 7137 insertions(+), 18424 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7146ccdfaa4..854cc8357c6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,7 +1,7 @@ { "name": "grants", "version": "0.0.0", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -20,26 +20,25 @@ "pretty-quick": "^3.1.3", "prism-react-renderer": "^1.2.1", "react": "^17.0.1", + "react-countup": "^6.4.0", "react-dom": "^17.0.1", "url-loader": "^4.1.1" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", - "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", - "license": "MIT", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", + "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.7.4" } }, "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", - "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", - "license": "MIT", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", + "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", "dependencies": { - "@algolia/autocomplete-shared": "1.7.2" + "@algolia/autocomplete-shared": "1.7.4" }, "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -47,151 +46,134 @@ } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", - "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==", - "license": "MIT" + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", + "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" }, "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", - "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz", + "integrity": "sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw==", "dependencies": { - "@algolia/cache-common": "4.14.2" + "@algolia/cache-common": "4.14.3" } }, "node_modules/@algolia/cache-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", - "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==", - "license": "MIT" + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.3.tgz", + "integrity": "sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q==" }, "node_modules/@algolia/cache-in-memory": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", - "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz", + "integrity": "sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg==", "dependencies": { - "@algolia/cache-common": "4.14.2" + "@algolia/cache-common": "4.14.3" } }, "node_modules/@algolia/client-account": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", - "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.3.tgz", + "integrity": "sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/client-analytics": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", - "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.3.tgz", + "integrity": "sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/client-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", - "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.3.tgz", + "integrity": "sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw==", "dependencies": { - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/client-personalization": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", - "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.3.tgz", + "integrity": "sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/client-search": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", - "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.3.tgz", + "integrity": "sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A==", "dependencies": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" + "@algolia/client-common": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/@algolia/events": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==", - "license": "MIT" + "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" }, "node_modules/@algolia/logger-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", - "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==", - "license": "MIT" + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.3.tgz", + "integrity": "sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw==" }, "node_modules/@algolia/logger-console": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", - "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.3.tgz", + "integrity": "sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw==", "dependencies": { - "@algolia/logger-common": "4.14.2" + "@algolia/logger-common": "4.14.3" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", - "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz", + "integrity": "sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q==", "dependencies": { - "@algolia/requester-common": "4.14.2" + "@algolia/requester-common": "4.14.3" } }, "node_modules/@algolia/requester-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", - "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==", - "license": "MIT" + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.3.tgz", + "integrity": "sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw==" }, "node_modules/@algolia/requester-node-http": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", - "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz", + "integrity": "sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA==", "dependencies": { - "@algolia/requester-common": "4.14.2" + "@algolia/requester-common": "4.14.3" } }, "node_modules/@algolia/transporter": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", - "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", - "license": "MIT", + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.3.tgz", + "integrity": "sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w==", "dependencies": { - "@algolia/cache-common": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/requester-common": "4.14.2" + "@algolia/cache-common": "4.14.3", + "@algolia/logger-common": "4.14.3", + "@algolia/requester-common": "4.14.3" } }, "node_modules/@ampproject/remapping": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.1.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -200,24 +182,10 @@ "node": ">=6.0.0" } }, - "node_modules/@ampproject/remapping/node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "license": "MIT", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "license": "MIT", "dependencies": { "@babel/highlight": "^7.18.6" }, @@ -226,33 +194,32 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", + "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", + "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", "dependencies": { - "@ampproject/remapping": "^2.1.0", + "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/generator": "^7.21.0", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.21.0", + "@babel/helpers": "^7.21.0", + "@babel/parser": "^7.21.0", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", + "json5": "^2.2.2", "semver": "^6.3.0" }, "engines": { @@ -263,47 +230,45 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", + "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", "dependencies": { - "@babel/types": "^7.20.5", + "@babel/types": "^7.21.0", "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@babel/helper-annotate-as-pure": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -315,7 +280,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "license": "MIT", "dependencies": { "@babel/helper-explode-assignable-expression": "^7.18.6", "@babel/types": "^7.18.9" @@ -325,14 +289,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", "dependencies": { - "@babel/compat-data": "^7.20.0", + "@babel/compat-data": "^7.20.5", "@babel/helper-validator-option": "^7.18.6", "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", "semver": "^6.3.0" }, "engines": { @@ -342,18 +306,26 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", + "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/helper-split-export-declaration": "^7.18.6" }, "engines": { @@ -364,13 +336,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", + "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" + "regexpu-core": "^5.3.1" }, "engines": { "node": ">=6.9.0" @@ -383,7 +354,6 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.17.7", "@babel/helper-plugin-utils": "^7.16.7", @@ -396,34 +366,18 @@ "@babel/core": "^7.4.0-0" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/@babel/helper-environment-visitor": { "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -432,7 +386,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -441,13 +394,12 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -457,7 +409,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -466,12 +417,11 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dependencies": { - "@babel/types": "^7.18.9" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -481,7 +431,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -490,19 +439,18 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", + "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", "@babel/helper-module-imports": "^7.18.6", "@babel/helper-simple-access": "^7.20.2", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -512,7 +460,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -524,7 +471,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -533,7 +479,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-environment-visitor": "^7.18.9", @@ -548,16 +493,16 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -567,7 +512,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.20.2" }, @@ -579,7 +523,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "license": "MIT", "dependencies": { "@babel/types": "^7.20.0" }, @@ -591,7 +534,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "license": "MIT", "dependencies": { "@babel/types": "^7.18.6" }, @@ -603,7 +545,6 @@ "version": "7.19.4", "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "license": "MIT", "engines": { "node": ">=6.9.0" } @@ -612,43 +553,40 @@ "version": "7.19.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "license": "MIT", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dependencies": { "@babel/helper-function-name": "^7.19.0", "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", + "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", "dependencies": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.0", + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -658,7 +596,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.18.6", "chalk": "^2.0.0", @@ -672,7 +609,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -684,7 +620,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -698,7 +633,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -706,14 +640,12 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/@babel/highlight/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -722,7 +654,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", "engines": { "node": ">=4" } @@ -731,7 +662,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -740,9 +670,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==", + "version": "7.21.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", + "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -754,7 +684,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -766,14 +695,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", + "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-proposal-optional-chaining": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -783,13 +711,12 @@ } }, "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-remap-async-to-generator": "^7.18.9", "@babel/plugin-syntax-async-generators": "^7.8.4" }, @@ -804,7 +731,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -817,13 +743,12 @@ } }, "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -837,7 +762,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3" @@ -853,7 +777,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" @@ -869,7 +792,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-json-strings": "^7.8.3" @@ -882,12 +804,11 @@ } }, "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -901,7 +822,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" @@ -917,7 +837,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-numeric-separator": "^7.10.4" @@ -930,16 +849,15 @@ } }, "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" + "@babel/plugin-transform-parameters": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -952,7 +870,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" @@ -965,13 +882,12 @@ } }, "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -985,7 +901,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "license": "MIT", "dependencies": { "@babel/helper-create-class-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -998,14 +913,13 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", + "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1019,7 +933,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1035,7 +948,6 @@ "version": "7.8.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1047,7 +959,6 @@ "version": "7.12.13", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.12.13" }, @@ -1059,7 +970,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1074,7 +984,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1086,7 +995,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.3" }, @@ -1098,7 +1006,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -1113,7 +1020,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1122,12 +1028,14 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "license": "MIT", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -1137,7 +1045,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1149,7 +1056,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1161,7 +1067,6 @@ "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.10.4" }, @@ -1173,7 +1078,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1185,7 +1089,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1197,7 +1100,6 @@ "version": "7.8.3", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.8.0" }, @@ -1209,7 +1111,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1224,7 +1125,6 @@ "version": "7.14.5", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.14.5" }, @@ -1239,7 +1139,6 @@ "version": "7.20.0", "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -1251,12 +1150,11 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1266,14 +1164,13 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" }, "engines": { "node": ">=6.9.0" @@ -1286,7 +1183,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1298,10 +1194,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1313,18 +1208,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", + "@babel/helper-compilation-targets": "^7.20.7", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-optimise-call-expression": "^7.18.6", "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", + "@babel/helper-replace-supers": "^7.20.7", "@babel/helper-split-export-declaration": "^7.18.6", "globals": "^11.1.0" }, @@ -1336,12 +1230,12 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" }, "engines": { "node": ">=6.9.0" @@ -1351,10 +1245,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", + "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1369,7 +1262,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1385,7 +1277,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1400,7 +1291,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "license": "MIT", "dependencies": { "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1413,12 +1303,11 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1431,7 +1320,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "license": "MIT", "dependencies": { "@babel/helper-compilation-targets": "^7.18.9", "@babel/helper-function-name": "^7.18.9", @@ -1448,7 +1336,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1463,7 +1350,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1475,13 +1361,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "license": "MIT", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1491,14 +1376,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "license": "MIT", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", + "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", "dependencies": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1508,14 +1392,13 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "license": "MIT", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dependencies": { "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/helper-validator-identifier": "^7.19.1" }, "engines": { @@ -1529,7 +1412,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "license": "MIT", "dependencies": { "@babel/helper-module-transforms": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1542,13 +1424,12 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "license": "MIT", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" }, "engines": { "node": ">=6.9.0" @@ -1561,7 +1442,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1576,7 +1456,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-replace-supers": "^7.18.6" @@ -1589,10 +1468,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", + "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1607,7 +1485,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1622,7 +1499,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.20.2" }, @@ -1637,7 +1513,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1649,16 +1524,15 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", + "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" + "@babel/types": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -1671,7 +1545,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "license": "MIT", "dependencies": { "@babel/plugin-transform-react-jsx": "^7.18.6" }, @@ -1682,26 +1555,10 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-transform-react-jsx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-transform-react-pure-annotations": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "license": "MIT", "dependencies": { "@babel/helper-annotate-as-pure": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1714,13 +1571,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "license": "MIT", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" }, "engines": { "node": ">=6.9.0" @@ -1733,7 +1589,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1745,13 +1600,12 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", + "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", "dependencies": { "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", + "@babel/helper-plugin-utils": "^7.20.2", "babel-plugin-polyfill-corejs2": "^0.3.3", "babel-plugin-polyfill-corejs3": "^0.6.0", "babel-plugin-polyfill-regenerator": "^0.4.1", @@ -1764,11 +1618,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/plugin-transform-shorthand-properties": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1780,13 +1641,12 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" }, "engines": { "node": ">=6.9.0" @@ -1799,7 +1659,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6" }, @@ -1814,7 +1673,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1829,7 +1687,6 @@ "version": "7.18.9", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1841,12 +1698,11 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", + "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.20.2", + "@babel/helper-create-class-features-plugin": "^7.21.0", "@babel/helper-plugin-utils": "^7.20.2", "@babel/plugin-syntax-typescript": "^7.20.0" }, @@ -1861,7 +1717,6 @@ "version": "7.18.10", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.9" }, @@ -1876,7 +1731,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "license": "MIT", "dependencies": { "@babel/helper-create-regexp-features-plugin": "^7.18.6", "@babel/helper-plugin-utils": "^7.18.6" @@ -1892,7 +1746,6 @@ "version": "7.20.2", "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.20.1", "@babel/helper-compilation-targets": "^7.20.0", @@ -1977,11 +1830,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", @@ -1997,7 +1857,6 @@ "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "^7.18.6", "@babel/helper-validator-option": "^7.18.6", @@ -2014,14 +1873,13 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", + "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-option": "^7.21.0", + "@babel/plugin-transform-typescript": "^7.21.0" }, "engines": { "node": ">=6.9.0" @@ -2030,58 +1888,60 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" + }, "node_modules/@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dependencies": { - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "license": "MIT", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", + "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", "dependencies": { "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" + "regenerator-runtime": "^0.13.11" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "license": "MIT", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", + "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", + "@babel/generator": "^7.21.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", + "@babel/helper-function-name": "^7.21.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", + "@babel/parser": "^7.21.0", + "@babel/types": "^7.21.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -2089,33 +1949,10 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", + "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", "dependencies": { "@babel/helper-string-parser": "^7.19.4", "@babel/helper-validator-identifier": "^7.19.1", @@ -2128,34 +1965,38 @@ "node_modules/@braintree/sanitize-url": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==", - "license": "MIT" + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" } }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@docsearch/css": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", - "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==", - "license": "MIT" + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", + "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" }, "node_modules/@docsearch/react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", - "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", - "license": "MIT", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", + "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", "dependencies": { - "@algolia/autocomplete-core": "1.7.2", - "@algolia/autocomplete-preset-algolia": "1.7.2", - "@docsearch/css": "3.3.0", + "@algolia/autocomplete-core": "1.7.4", + "@algolia/autocomplete-preset-algolia": "1.7.4", + "@docsearch/css": "3.3.3", "algoliasearch": "^4.0.0" }, "peerDependencies": { @@ -2176,10 +2017,9 @@ } }, "node_modules/@docusaurus/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", - "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.3.1.tgz", + "integrity": "sha512-0Jd4jtizqnRAr7svWaBbbrCCN8mzBNd2xFLoT/IM7bGfFie5y58oz97KzXliwiLY3zWjqMXjQcuP1a5VgCv2JA==", "dependencies": { "@babel/core": "^7.18.6", "@babel/generator": "^7.18.7", @@ -2191,13 +2031,13 @@ "@babel/runtime": "^7.18.6", "@babel/runtime-corejs3": "^7.18.6", "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", + "@docusaurus/cssnano-preset": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-common": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "@slorber/static-site-generator-webpack-plugin": "^4.0.7", "@svgr/webpack": "^6.2.1", "autoprefixer": "^10.4.7", @@ -2218,7 +2058,7 @@ "del": "^6.1.1", "detect-port": "^1.3.0", "escape-html": "^1.0.3", - "eta": "^1.12.3", + "eta": "^2.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "html-minifier-terser": "^6.1.0", @@ -2264,34 +2104,25 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/core/node_modules/@svgr/hast-util-to-babel-ast": { + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/core/node_modules/@svgr/plugin-jsx": { + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", "engines": { "node": ">=10" }, @@ -2300,15 +2131,155 @@ "url": "https://github.com/sponsors/gregberge" }, "peerDependencies": { - "@svgr/core": "^6.0.0" + "@babel/core": "^7.0.0-0" } }, - "node_modules/@docusaurus/core/node_modules/@svgr/plugin-svgo": { + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-svg-dynamic-title": { "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "license": "MIT", - "dependencies": { + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/hast-util-to-babel-ast": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", + "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", + "dependencies": { + "@babel/types": "^7.20.0", + "entities": "^4.4.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/plugin-jsx": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", + "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/hast-util-to-babel-ast": "^6.5.1", + "svg-parser": "^2.0.4" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@svgr/core": "^6.0.0" + } + }, + "node_modules/@docusaurus/core/node_modules/@svgr/plugin-svgo": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", + "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", + "dependencies": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", "svgo": "^2.8.0" @@ -2328,7 +2299,6 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.19.6", "@babel/plugin-transform-react-constant-elements": "^7.18.12", @@ -2347,35 +2317,118 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@docusaurus/core/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", + "node_modules/@docusaurus/core/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/@docusaurus/core/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, "engines": { - "node": ">= 6" + "node": ">=8.0.0" } }, - "node_modules/@docusaurus/core/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", + "node_modules/@docusaurus/core/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "lru-cache": "^6.0.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@docusaurus/core/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/@docusaurus/core/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" }, "bin": { - "semver": "bin/semver.js" + "svgo": "bin/svgo" }, "engines": { - "node": ">=10" + "node": ">=10.13.0" + } + }, + "node_modules/@docusaurus/core/node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", - "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.3.1.tgz", + "integrity": "sha512-7mIhAROES6CY1GmCjR4CZkUfjTL6B3u6rKHK0ChQl2d1IevYXq/k/vFgvOrJfcKxiObpMnE9+X6R2Wt1KqxC6w==", "dependencies": { "cssnano-preset-advanced": "^5.3.8", "postcss": "^8.4.14", @@ -2387,10 +2440,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", - "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.3.1.tgz", + "integrity": "sha512-2lAV/olKKVr9qJhfHFCaqBIl8FgYjbUFwgUnX76+cULwQYss+42ZQ3grHGFvI0ocN2X55WcYe64ellQXz7suqg==", "dependencies": { "chalk": "^4.1.2", "tslib": "^2.4.0" @@ -2400,15 +2452,14 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", - "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.3.1.tgz", + "integrity": "sha512-Gzga7OsxQRpt3392K9lv/bW4jGppdLFJh3luKRknCKSAaZrmVkOQv2gvCn8LAOSZ3uRg5No7AgYs/vpL8K94lA==", "dependencies": { "@babel/parser": "^7.18.8", "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.2.0", - "@docusaurus/utils": "2.2.0", + "@docusaurus/logger": "2.3.1", + "@docusaurus/utils": "2.3.1", "@mdx-js/mdx": "^1.6.22", "escape-html": "^1.0.3", "file-loader": "^6.2.0", @@ -2431,32 +2482,13 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/mdx-loader/node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", - "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", - "license": "MIT", + "node_modules/@docusaurus/module-type-aliases": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.3.1.tgz", + "integrity": "sha512-6KkxfAVOJqIUynTRb/tphYCl+co3cP0PlHiMDbi+SzmYxMdgIrwYqH9yAnGSDoN6Jk2ZE/JY/Azs/8LPgKP48A==", "dependencies": { "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.2.0", + "@docusaurus/types": "2.3.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2470,18 +2502,17 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", - "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.3.1.tgz", + "integrity": "sha512-f5LjqX+9WkiLyGiQ41x/KGSJ/9bOjSD8lsVhPvYeUYHCtYpuiDKfhZE07O4EqpHkBx4NQdtQDbp+aptgHSTuiw==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-common": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "cheerio": "^1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^10.1.0", @@ -2501,18 +2532,17 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", - "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.3.1.tgz", + "integrity": "sha512-DxztTOBEruv7qFxqUtbsqXeNcHqcVEIEe+NQoI1oi2DBmKBhW/o0MIal8lt+9gvmpx3oYtlwmLOOGepxZgJGkw==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/module-type-aliases": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "@types/react-router-config": "^5.0.6", "combine-promises": "^1.1.0", "fs-extra": "^10.1.0", @@ -2532,16 +2562,15 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", - "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.3.1.tgz", + "integrity": "sha512-E80UL6hvKm5VVw8Ka8YaVDtO6kWWDVUK4fffGvkpQ/AJQDOg99LwOXKujPoICC22nUFTsZ2Hp70XvpezCsFQaA==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "fs-extra": "^10.1.0", "tslib": "^2.4.0", "webpack": "^5.73.0" @@ -2555,14 +2584,13 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", - "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.3.1.tgz", + "integrity": "sha512-Ujpml1Ppg4geB/2hyu2diWnO49az9U2bxM9Shen7b6qVcyFisNJTkVG2ocvLC7wM1efTJcUhBO6zAku2vKJGMw==", "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", + "@docusaurus/core": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", "fs-extra": "^10.1.0", "react-json-view": "^1.21.3", "tslib": "^2.4.0" @@ -2576,14 +2604,13 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", - "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.3.1.tgz", + "integrity": "sha512-OHip0GQxKOFU8n7gkt3TM4HOYTXPCFDjqKbMClDD3KaDnyTuMp/Zvd9HSr770lLEscgPWIvzhJByRAClqsUWiQ==", "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/core": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "tslib": "^2.4.0" }, "engines": { @@ -2595,14 +2622,31 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", - "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.3.1.tgz", + "integrity": "sha512-uXtDhfu4+Hm+oqWUySr3DNI5cWC/rmP6XJyAk83Heor3dFjZqDwCbkX8yWPywkRiWev3Dk/rVF8lEn0vIGVocA==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=16.14" + }, + "peerDependencies": { + "react": "^16.8.4 || ^17.0.0", + "react-dom": "^16.8.4 || ^17.0.0" + } + }, + "node_modules/@docusaurus/plugin-google-tag-manager": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.3.1.tgz", + "integrity": "sha512-Ww2BPEYSqg8q8tJdLYPFFM3FMDBCVhEM4UUqKzJaiRMx3NEoly3qqDRAoRDGdIhlC//Rf0iJV9cWAoq2m6k3sw==", "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/core": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "tslib": "^2.4.0" }, "engines": { @@ -2614,17 +2658,16 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", - "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.3.1.tgz", + "integrity": "sha512-8Yxile/v6QGYV9vgFiYL+8d2N4z4Er3pSHsrD08c5XI8bUXxTppMwjarDUTH/TRTfgAWotRbhJ6WZLyajLpozA==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-common": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "fs-extra": "^10.1.0", "sitemap": "^7.1.1", "tslib": "^2.4.0" @@ -2638,23 +2681,23 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", - "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/plugin-debug": "2.2.0", - "@docusaurus/plugin-google-analytics": "2.2.0", - "@docusaurus/plugin-google-gtag": "2.2.0", - "@docusaurus/plugin-sitemap": "2.2.0", - "@docusaurus/theme-classic": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-search-algolia": "2.2.0", - "@docusaurus/types": "2.2.0" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.3.1.tgz", + "integrity": "sha512-OQ5W0AHyfdUk0IldwJ3BlnZ1EqoJuu2L2BMhqLbqwNWdkmzmSUvlFLH1Pe7CZSQgB2YUUC/DnmjbPKk/qQD0lQ==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/plugin-content-blog": "2.3.1", + "@docusaurus/plugin-content-docs": "2.3.1", + "@docusaurus/plugin-content-pages": "2.3.1", + "@docusaurus/plugin-debug": "2.3.1", + "@docusaurus/plugin-google-analytics": "2.3.1", + "@docusaurus/plugin-google-gtag": "2.3.1", + "@docusaurus/plugin-google-tag-manager": "2.3.1", + "@docusaurus/plugin-sitemap": "2.3.1", + "@docusaurus/theme-classic": "2.3.1", + "@docusaurus/theme-common": "2.3.1", + "@docusaurus/theme-search-algolia": "2.3.1", + "@docusaurus/types": "2.3.1" }, "engines": { "node": ">=16.14" @@ -2668,7 +2711,6 @@ "version": "5.5.2", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "license": "MIT", "dependencies": { "@types/react": "*", "prop-types": "^15.6.2" @@ -2678,23 +2720,22 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", - "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-translations": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.3.1.tgz", + "integrity": "sha512-SelSIDvyttb7ZYHj8vEUhqykhAqfOPKk+uP0z85jH72IMC58e7O8DIlcAeBv+CWsLbNIl9/Hcg71X0jazuxJug==", + "dependencies": { + "@docusaurus/core": "2.3.1", + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/module-type-aliases": "2.3.1", + "@docusaurus/plugin-content-blog": "2.3.1", + "@docusaurus/plugin-content-docs": "2.3.1", + "@docusaurus/plugin-content-pages": "2.3.1", + "@docusaurus/theme-common": "2.3.1", + "@docusaurus/theme-translations": "2.3.1", + "@docusaurus/types": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-common": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "@mdx-js/react": "^1.6.22", "clsx": "^1.2.1", "copy-text-to-clipboard": "^3.0.1", @@ -2718,17 +2759,16 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", - "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", - "license": "MIT", - "dependencies": { - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/utils": "2.2.0", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.3.1.tgz", + "integrity": "sha512-RYmYl2OR2biO+yhmW1aS5FyEvnrItPINa+0U2dMxcHpah8reSCjQ9eJGRmAgkZFchV1+aIQzXOI1K7LCW38O0g==", + "dependencies": { + "@docusaurus/mdx-loader": "2.3.1", + "@docusaurus/module-type-aliases": "2.3.1", + "@docusaurus/plugin-content-blog": "2.3.1", + "@docusaurus/plugin-content-docs": "2.3.1", + "@docusaurus/plugin-content-pages": "2.3.1", + "@docusaurus/utils": "2.3.1", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -2736,6 +2776,7 @@ "parse-numeric-range": "^1.3.0", "prism-react-renderer": "^1.3.5", "tslib": "^2.4.0", + "use-sync-external-store": "^1.2.0", "utility-types": "^3.10.0" }, "engines": { @@ -2747,23 +2788,22 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", - "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.3.1.tgz", + "integrity": "sha512-JdHaRqRuH1X++g5fEMLnq7OtULSGQdrs9AbhcWRQ428ZB8/HOiaN6mj3hzHvcD3DFgu7koIVtWPQnvnN7iwzHA==", "dependencies": { "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-translations": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", + "@docusaurus/core": "2.3.1", + "@docusaurus/logger": "2.3.1", + "@docusaurus/plugin-content-docs": "2.3.1", + "@docusaurus/theme-common": "2.3.1", + "@docusaurus/theme-translations": "2.3.1", + "@docusaurus/utils": "2.3.1", + "@docusaurus/utils-validation": "2.3.1", "algoliasearch": "^4.13.1", "algoliasearch-helper": "^3.10.0", "clsx": "^1.2.1", - "eta": "^1.12.3", + "eta": "^2.0.0", "fs-extra": "^10.1.0", "lodash": "^4.17.21", "tslib": "^2.4.0", @@ -2778,10 +2818,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", - "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.3.1.tgz", + "integrity": "sha512-BsBZzAewJabVhoGG1Ij2u4pMS3MPW6gZ6sS4pc+Y7czevRpzxoFNJXRtQDVGe7mOpv/MmRmqg4owDK+lcOTCVQ==", "dependencies": { "fs-extra": "^10.1.0", "tslib": "^2.4.0" @@ -2791,10 +2830,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", - "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.3.1.tgz", + "integrity": "sha512-PREbIRhTaNNY042qmfSE372Jb7djZt+oVTZkoqHJ8eff8vOIc2zqqDqBVc5BhOfpZGPTrE078yy/torUEZy08A==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -2810,23 +2848,14 @@ "react-dom": "^16.8.4 || ^17.0.0" } }, - "node_modules/@docusaurus/types/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/@docusaurus/utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", - "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.3.1.tgz", + "integrity": "sha512-9WcQROCV0MmrpOQDXDGhtGMd52DHpSFbKLfkyaYumzbTstrbA5pPOtiGtxK1nqUHkiIv8UwexS54p0Vod2I1lg==", "dependencies": { - "@docusaurus/logger": "2.2.0", + "@docusaurus/logger": "2.3.1", "@svgr/webpack": "^6.2.1", + "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", "fs-extra": "^10.1.0", "github-slugger": "^1.4.0", @@ -2854,10 +2883,9 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", - "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.3.1.tgz", + "integrity": "sha512-pVlRpXkdNcxmKNxAaB1ya2hfCEvVsLDp2joeM6K6uv55Oc5nVIqgyYSgSNKZyMdw66NnvMfsu0RBylcwZQKo9A==", "dependencies": { "tslib": "^2.4.0" }, @@ -2874,13 +2902,12 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", - "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", - "license": "MIT", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.3.1.tgz", + "integrity": "sha512-7n0208IG3k1HVTByMHlZoIDjjOFC8sbViHVXJx0r3Q+3Ezrx+VQ1RZ/zjNn6lT+QBCRCXlnlaoJ8ug4HIVgQ3w==", "dependencies": { - "@docusaurus/logger": "2.2.0", - "@docusaurus/utils": "2.2.0", + "@docusaurus/logger": "2.3.1", + "@docusaurus/utils": "2.3.1", "joi": "^17.6.0", "js-yaml": "^4.1.0", "tslib": "^2.4.0" @@ -2889,11 +2916,144 @@ "node": ">=16.14" } }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-add-jsx-attribute": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", + "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", + "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-svg-dynamic-title": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", + "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-svg-em-dimensions": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", + "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-transform-react-native-svg": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", + "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-transform-svg-component": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", + "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/babel-preset": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", + "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", + "dependencies": { + "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", + "@svgr/babel-plugin-remove-jsx-attribute": "*", + "@svgr/babel-plugin-remove-jsx-empty-expression": "*", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", + "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", + "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", + "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", + "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@docusaurus/utils/node_modules/@svgr/core": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", + "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", + "dependencies": { + "@babel/core": "^7.19.6", + "@svgr/babel-preset": "^6.5.1", + "@svgr/plugin-jsx": "^6.5.1", + "camelcase": "^6.2.0", + "cosmiconfig": "^7.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/gregberge" + } + }, "node_modules/@docusaurus/utils/node_modules/@svgr/hast-util-to-babel-ast": { "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "license": "MIT", "dependencies": { "@babel/types": "^7.20.0", "entities": "^4.4.0" @@ -2910,7 +3070,6 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "license": "MIT", "dependencies": { "@babel/core": "^7.19.6", "@svgr/babel-preset": "^6.5.1", @@ -2932,7 +3091,6 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "license": "MIT", "dependencies": { "cosmiconfig": "^7.0.1", "deepmerge": "^4.2.2", @@ -2953,7 +3111,6 @@ "version": "6.5.1", "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.19.6", "@babel/plugin-transform-react-constant-elements": "^7.18.12", @@ -2972,78 +3129,178 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", - "license": "BSD-3-Clause" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0" + "node_modules/@docusaurus/utils/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, - "node_modules/@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "license": "MIT", + "node_modules/@docusaurus/utils/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dependencies": { - "@sinclair/typebox": "^0.24.1" + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "node_modules/@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "license": "MIT", + "node_modules/@docusaurus/utils/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dependencies": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.0.0" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "license": "MIT", + "node_modules/@docusaurus/utils/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, - "engines": { - "node": ">=6.0.0" + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" + "node_modules/@docusaurus/utils/node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/@jridgewell/set-array": { + "node_modules/@docusaurus/utils/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/@docusaurus/utils/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/@docusaurus/utils/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/@docusaurus/utils/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", + "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", + "dependencies": { + "@sinclair/typebox": "^0.25.16" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", + "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", + "dependencies": { + "@jest/schemas": "^29.4.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "license": "MIT", "engines": { "node": ">=6.0.0" } @@ -3052,23 +3309,33 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "license": "MIT" + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" @@ -3077,14 +3344,12 @@ "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", - "license": "MIT" + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" }, "node_modules/@mdx-js/mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "license": "MIT", "dependencies": { "@babel/core": "7.12.9", "@babel/plugin-syntax-jsx": "7.12.1", @@ -3115,7 +3380,6 @@ "version": "7.12.9", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "license": "MIT", "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/generator": "^7.12.5", @@ -3142,57 +3406,21 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@mdx-js/mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "license": "MIT" - }, - "node_modules/@mdx-js/mdx/node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "license": "MIT", + "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "@babel/helper-plugin-utils": "^7.10.4" }, "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/@mdx-js/mdx/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "@babel/core": "^7.0.0-0" } }, - "node_modules/@mdx-js/mdx/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, "node_modules/@mdx-js/mdx/node_modules/semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "license": "ISC", "bin": { "semver": "bin/semver" } @@ -3201,16 +3429,31 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, + "node_modules/@mdx-js/mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/@mdx-js/react": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -3223,7 +3466,6 @@ "version": "1.6.22", "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" @@ -3233,7 +3475,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -3246,7 +3487,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "license": "MIT", "engines": { "node": ">= 8" } @@ -3255,7 +3495,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -3267,41 +3506,81 @@ "node_modules/@polka/url": { "version": "1.0.0-next.21", "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==", - "license": "MIT" + "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" + }, + "node_modules/@rollup/plugin-babel": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", + "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@rollup/pluginutils": "^5.0.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + }, + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", + "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } }, "node_modules/@sideway/address": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.0.0" } }, "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==", - "license": "BSD-3-Clause" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" }, "node_modules/@sideway/pinpoint": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", - "license": "BSD-3-Clause" + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" }, "node_modules/@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==", - "license": "MIT" + "version": "0.25.23", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", + "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==" }, "node_modules/@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "license": "MIT", "engines": { "node": ">=6" } @@ -3310,7 +3589,6 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "license": "MIT", "dependencies": { "eval": "^0.1.8", "p-map": "^4.0.0", @@ -3321,147 +3599,114 @@ } }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "license": "MIT", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "license": "MIT", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", + "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "license": "MIT", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", + "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "license": "MIT", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", + "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "license": "MIT", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", + "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "license": "MIT", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", + "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "license": "MIT", - "engines": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", + "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", + "engines": { "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "license": "MIT", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", + "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "license": "MIT", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", + "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" + "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", + "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", + "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", + "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", + "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", + "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", + "@svgr/babel-plugin-transform-svg-component": "^5.5.0" }, "engines": { "node": ">=10" @@ -3469,58 +3714,16 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } }, "node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "license": "MIT", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", + "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", + "@svgr/plugin-jsx": "^5.5.0", "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core/node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" + "cosmiconfig": "^7.0.0" }, "engines": { "node": ">=10" @@ -3528,16 +3731,12 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" } }, "node_modules/@svgr/hast-util-to-babel-ast": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "license": "MIT", "dependencies": { "@babel/types": "^7.12.6" }, @@ -3553,7 +3752,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "license": "MIT", "dependencies": { "@babel/core": "^7.12.3", "@svgr/babel-preset": "^5.5.0", @@ -3568,24 +3766,15 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@svgr/plugin-svgo": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", + "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", + "dependencies": { + "cosmiconfig": "^7.0.0", + "deepmerge": "^4.2.2", + "svgo": "^1.2.2" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -3594,24 +3783,20 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@svgr/webpack": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", + "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/plugin-transform-react-constant-elements": "^7.12.1", + "@babel/preset-env": "^7.12.1", + "@babel/preset-react": "^7.12.5", + "@svgr/core": "^5.5.0", + "@svgr/plugin-jsx": "^5.5.0", + "@svgr/plugin-svgo": "^5.5.0", + "loader-utils": "^2.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -3620,433 +3805,72 @@ "url": "https://github.com/sponsors/gregberge" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "license": "MIT", - "engines": { - "node": ">=10" + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=6" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "license": "MIT", + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node": ">=10.13.0" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" } }, - "node_modules/@svgr/plugin-jsx/node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "license": "MIT", + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "@types/node": "*" } }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "license": "MIT", + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" + "@types/node": "*" } }, - "node_modules/@svgr/plugin-svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", + "node_modules/@types/connect-history-api-fallback": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", + "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@types/express-serve-static-core": "*", + "@types/node": "*" } }, - "node_modules/@svgr/plugin-svgo/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", + "node_modules/@types/eslint": { + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz", + "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/@svgr/plugin-svgo/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", - "license": "BSD-2-Clause" - }, - "node_modules/@svgr/plugin-svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", - "license": "CC0-1.0" - }, - "node_modules/@svgr/plugin-svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@svgr/plugin-svgo/node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "license": "MIT", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "license": "MIT", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack/node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "license": "MIT", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "license": "MIT", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "license": "ISC", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "license": "MIT", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "license": "MIT", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "@types/estree": "*", + "@types/json-schema": "*" } }, "node_modules/@types/eslint-scope": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" @@ -4055,26 +3879,23 @@ "node_modules/@types/estree": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==", - "license": "MIT" + "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" }, "node_modules/@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "license": "MIT", + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", "dependencies": { "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", + "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", "@types/serve-static": "*" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "license": "MIT", + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", "dependencies": { "@types/node": "*", "@types/qs": "*", @@ -4085,7 +3906,6 @@ "version": "2.3.4", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "license": "MIT", "dependencies": { "@types/unist": "*" } @@ -4093,20 +3913,17 @@ "node_modules/@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", - "license": "MIT" + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", - "license": "MIT" + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" }, "node_modules/@types/http-proxy": { "version": "1.17.9", "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4114,14 +3931,12 @@ "node_modules/@types/istanbul-lib-coverage": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "license": "MIT" + "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" }, "node_modules/@types/istanbul-lib-report": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "license": "MIT", "dependencies": { "@types/istanbul-lib-coverage": "*" } @@ -4130,7 +3945,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "license": "MIT", "dependencies": { "@types/istanbul-lib-report": "*" } @@ -4138,14 +3952,12 @@ "node_modules/@types/json-schema": { "version": "7.0.11", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "license": "MIT" + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, "node_modules/@types/mdast": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "license": "MIT", "dependencies": { "@types/unist": "*" } @@ -4153,62 +3965,52 @@ "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==", - "license": "MIT" + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "license": "MIT" + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" }, "node_modules/@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", - "license": "MIT" + "version": "18.14.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", + "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" }, "node_modules/@types/parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "license": "MIT" + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" }, "node_modules/@types/parse5": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==", - "license": "MIT" + "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" }, "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "license": "MIT" + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" }, "node_modules/@types/q": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", - "license": "MIT" + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "license": "MIT" + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" }, "node_modules/@types/range-parser": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", - "license": "MIT" + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, "node_modules/@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "license": "MIT", + "version": "18.0.28", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", + "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -4216,10 +4018,9 @@ } }, "node_modules/@types/react-router": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", - "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", - "license": "MIT", + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", + "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*" @@ -4229,7 +4030,6 @@ "version": "5.0.6", "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "license": "MIT", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -4240,7 +4040,6 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "license": "MIT", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -4250,14 +4049,12 @@ "node_modules/@types/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "license": "MIT" + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" }, "node_modules/@types/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4265,14 +4062,12 @@ "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "license": "MIT" + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, "node_modules/@types/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "license": "MIT", "dependencies": { "@types/express": "*" } @@ -4281,7 +4076,6 @@ "version": "1.15.0", "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "license": "MIT", "dependencies": { "@types/mime": "*", "@types/node": "*" @@ -4291,7 +4085,6 @@ "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "license": "MIT", "dependencies": { "@types/node": "*" } @@ -4299,23 +4092,20 @@ "node_modules/@types/unist": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", - "license": "MIT" + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" }, "node_modules/@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "license": "MIT", + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", + "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "license": "MIT", + "version": "17.0.22", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", + "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", "dependencies": { "@types/yargs-parser": "*" } @@ -4323,14 +4113,12 @@ "node_modules/@types/yargs-parser": { "version": "21.0.0", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "license": "MIT" + "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" }, "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "license": "MIT", "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" @@ -4339,26 +4127,22 @@ "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", - "license": "MIT" + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" }, "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", - "license": "MIT" + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", - "license": "MIT" + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" }, "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "license": "MIT", "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4368,14 +4152,12 @@ "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", - "license": "MIT" + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" }, "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4387,7 +4169,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } @@ -4396,7 +4177,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } @@ -4404,14 +4184,12 @@ "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", - "license": "MIT" + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" }, "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4427,7 +4205,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -4440,7 +4217,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", @@ -4452,7 +4228,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", @@ -4466,7 +4241,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "license": "MIT", "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" @@ -4475,20 +4249,17 @@ "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "license": "BSD-3-Clause" + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "license": "Apache-2.0" + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -4497,11 +4268,29 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "license": "MIT", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", "bin": { "acorn": "bin/acorn" }, @@ -4513,7 +4302,6 @@ "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "license": "MIT", "peerDependencies": { "acorn": "^8" } @@ -4522,16 +4310,14 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==", - "license": "MIT", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", "engines": { "node": ">= 10.0.0" } @@ -4540,7 +4326,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4553,7 +4338,6 @@ "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4565,42 +4349,75 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } }, "node_modules/algoliasearch": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", - "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", - "license": "MIT", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.14.2", - "@algolia/cache-common": "4.14.2", - "@algolia/cache-in-memory": "4.14.2", - "@algolia/client-account": "4.14.2", - "@algolia/client-analytics": "4.14.2", - "@algolia/client-common": "4.14.2", - "@algolia/client-personalization": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/logger-console": "4.14.2", - "@algolia/requester-browser-xhr": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/requester-node-http": "4.14.2", - "@algolia/transporter": "4.14.2" + "version": "4.14.3", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.3.tgz", + "integrity": "sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg==", + "dependencies": { + "@algolia/cache-browser-local-storage": "4.14.3", + "@algolia/cache-common": "4.14.3", + "@algolia/cache-in-memory": "4.14.3", + "@algolia/client-account": "4.14.3", + "@algolia/client-analytics": "4.14.3", + "@algolia/client-common": "4.14.3", + "@algolia/client-personalization": "4.14.3", + "@algolia/client-search": "4.14.3", + "@algolia/logger-common": "4.14.3", + "@algolia/logger-console": "4.14.3", + "@algolia/requester-browser-xhr": "4.14.3", + "@algolia/requester-common": "4.14.3", + "@algolia/requester-node-http": "4.14.3", + "@algolia/transporter": "4.14.3" } }, "node_modules/algoliasearch-helper": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", - "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", - "license": "MIT", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.3.tgz", + "integrity": "sha512-TbaEvLwiuGygHQIB8y+OsJKQQ40+JKUua5B91X66tMUHyyhbNHvqyr0lqd3wCoyKx7WybyQrC0WJvzoIeh24Aw==", "dependencies": { "@algolia/events": "^4.0.1" }, @@ -4612,11 +4429,28 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "license": "ISC", "dependencies": { "string-width": "^4.1.0" } }, + "node_modules/ansi-align/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/ansi-align/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -4624,7 +4458,6 @@ "engines": [ "node >= 0.8.0" ], - "license": "Apache-2.0", "bin": { "ansi-html": "bin/ansi-html" } @@ -4633,7 +4466,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4642,7 +4474,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4657,7 +4488,6 @@ "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -4669,35 +4499,30 @@ "node_modules/arg": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", - "license": "MIT" + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", - "license": "MIT" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4706,7 +4531,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", @@ -4725,7 +4549,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4733,14 +4556,12 @@ "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "license": "MIT" + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", "engines": { "node": ">= 4.0.0" } @@ -4759,7 +4580,6 @@ "url": "https://tidelift.com/funding/github/npm/autoprefixer" } ], - "license": "MIT", "dependencies": { "browserslist": "^4.21.4", "caniuse-lite": "^1.0.30001426", @@ -4778,11 +4598,21 @@ "postcss": "^8.1.0" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/axios": { "version": "0.25.0", "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "license": "MIT", "dependencies": { "follow-redirects": "^1.14.7" } @@ -4791,7 +4621,6 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "license": "MIT", "dependencies": { "find-cache-dir": "^3.3.1", "loader-utils": "^2.0.0", @@ -4806,29 +4635,31 @@ "webpack": ">=2" } }, - "node_modules/babel-loader/node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "license": "MIT", + "node_modules/babel-plugin-apply-mdx-type-prop": { + "version": "1.6.22", + "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", + "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" + "@babel/helper-plugin-utils": "7.10.4", + "@mdx-js/util": "1.6.22" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@babel/core": "^7.11.6" } }, + "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, "node_modules/babel-plugin-dynamic-import-node": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "license": "MIT", "dependencies": { "object.assign": "^4.1.0" } @@ -4837,7 +4668,6 @@ "version": "1.6.22", "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "license": "MIT", "dependencies": { "@babel/helper-plugin-utils": "7.10.4" }, @@ -4849,14 +4679,12 @@ "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { "version": "7.10.4", "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "license": "MIT" + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "license": "MIT", "dependencies": { "@babel/compat-data": "^7.17.7", "@babel/helper-define-polyfill-provider": "^0.3.3", @@ -4866,11 +4694,18 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/babel-plugin-polyfill-corejs3": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3", "core-js-compat": "^3.25.1" @@ -4883,7 +4718,6 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "license": "MIT", "dependencies": { "@babel/helper-define-polyfill-provider": "^0.3.3" }, @@ -4895,7 +4729,6 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -4904,26 +4737,22 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base16": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==", - "license": "MIT" + "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" }, "node_modules/batch": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", - "license": "MIT" + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" }, "node_modules/big.js": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "license": "MIT", "engines": { "node": "*" } @@ -4932,7 +4761,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "license": "MIT", "engines": { "node": ">=8" } @@ -4941,7 +4769,6 @@ "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -4965,16 +4792,38 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "license": "MIT", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", + "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", "dependencies": { "array-flatten": "^2.1.2", "dns-equal": "^1.0.0", @@ -4982,23 +4831,15 @@ "multicast-dns": "^7.2.5" } }, - "node_modules/bonjour-service/node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", - "license": "MIT" - }, "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, "node_modules/boxen": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^6.2.0", @@ -5016,61 +4857,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/boxen/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/boxen/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/boxen/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/boxen/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5080,7 +4870,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "license": "MIT", "dependencies": { "fill-range": "^7.0.1" }, @@ -5089,9 +4878,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "funding": [ { "type": "opencollective", @@ -5102,12 +4891,11 @@ "url": "https://tidelift.com/funding/github/npm/browserslist" } ], - "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" }, "bin": { "browserslist": "cli.js" @@ -5119,14 +4907,12 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "license": "MIT" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "license": "MIT", "engines": { "node": ">= 0.8" } @@ -5135,7 +4921,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -5153,7 +4938,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "license": "MIT", "engines": { "node": ">=8" } @@ -5162,7 +4946,6 @@ "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "license": "MIT", "engines": { "node": ">=8" } @@ -5171,7 +4954,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -5184,7 +4966,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "license": "MIT", "engines": { "node": ">=6" } @@ -5193,7 +4974,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -5203,7 +4983,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -5215,7 +4994,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "license": "MIT", "engines": { "node": ">= 6" } @@ -5224,7 +5002,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "license": "MIT", "dependencies": { "browserslist": "^4.0.0", "caniuse-lite": "^1.0.0", @@ -5233,9 +5010,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==", + "version": "1.0.30001457", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", + "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", "funding": [ { "type": "opencollective", @@ -5245,14 +5022,12 @@ "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" } - ], - "license": "CC-BY-4.0" + ] }, "node_modules/ccount": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5262,7 +5037,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5278,7 +5052,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5288,7 +5061,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5298,7 +5070,6 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5308,7 +5079,6 @@ "version": "1.0.0-rc.12", "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -5329,7 +5099,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -5342,22 +5111,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/cheerio-select/node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -5368,7 +5121,6 @@ "url": "https://paulmillr.com/funding/" } ], - "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -5389,22 +5141,28 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "license": "MIT", "engines": { "node": ">=6.0" } }, "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "license": "MIT" + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", + "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } }, "node_modules/clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "license": "MIT", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", + "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", "dependencies": { "source-map": "~0.6.0" }, @@ -5416,7 +5174,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "license": "MIT", "engines": { "node": ">=6" } @@ -5425,7 +5182,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "license": "MIT", "engines": { "node": ">=10" }, @@ -5437,7 +5193,6 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -5448,11 +5203,28 @@ "@colors/colors": "1.5.0" } }, + "node_modules/cli-table3/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/cli-table3/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -5466,7 +5238,6 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -5478,7 +5249,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "license": "MIT", "engines": { "node": ">=6" } @@ -5487,7 +5257,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "license": "MIT", "dependencies": { "@types/q": "^1.5.1", "chalk": "^2.4.1", @@ -5501,7 +5270,6 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -5513,7 +5281,6 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -5527,7 +5294,6 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -5535,14 +5301,12 @@ "node_modules/coa/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "license": "MIT" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "node_modules/coa/node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -5551,7 +5315,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "license": "MIT", "engines": { "node": ">=4" } @@ -5560,7 +5323,6 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -5572,7 +5334,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -5582,7 +5343,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5593,26 +5353,22 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "license": "MIT" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "license": "MIT" + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" }, "node_modules/colorette": { "version": "2.0.19", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==", - "license": "MIT" + "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" }, "node_modules/combine-promises": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "license": "MIT", "engines": { "node": ">=10" } @@ -5621,32 +5377,28 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "license": "MIT", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "engines": { - "node": ">= 10" + "node": ">= 6" } }, "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", - "license": "MIT" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" }, "node_modules/compressible": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -5654,11 +5406,18 @@ "node": ">= 0.6" } }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "node_modules/compressible/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -5672,23 +5431,33 @@ "node": ">= 0.8.0" } }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/compression/node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "license": "MIT" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -5705,7 +5474,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "license": "MIT", "engines": { "node": ">=0.8" } @@ -5713,23 +5481,20 @@ "node_modules/consola": { "version": "2.15.3", "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==", - "license": "MIT" + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "license": "MIT", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "engines": { "node": ">= 0.6" } @@ -5737,14 +5502,12 @@ "node_modules/convert-source-map": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "license": "MIT" + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "license": "MIT", "engines": { "node": ">= 0.6" } @@ -5752,14 +5515,12 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", - "license": "MIT" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/copy-text-to-clipboard": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -5771,7 +5532,6 @@ "version": "11.0.0", "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", "glob-parent": "^6.0.1", @@ -5791,11 +5551,36 @@ "webpack": "^5.1.0" } }, + "node_modules/copy-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, "node_modules/copy-webpack-plugin/node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -5804,10 +5589,9 @@ } }, "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "license": "MIT", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", + "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", "dependencies": { "dir-glob": "^3.0.1", "fast-glob": "^3.2.11", @@ -5822,11 +5606,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/copy-webpack-plugin/node_modules/slash": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "license": "MIT", "engines": { "node": ">=12" }, @@ -5835,23 +5641,21 @@ } }, "node_modules/core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.28.0.tgz", + "integrity": "sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" } }, "node_modules/core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "license": "MIT", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.28.0.tgz", + "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", "dependencies": { - "browserslist": "^4.21.4" + "browserslist": "^4.21.5" }, "funding": { "type": "opencollective", @@ -5859,11 +5663,10 @@ } }, "node_modules/core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==", + "version": "3.28.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz", + "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", "hasInstallScript": true, - "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -5872,14 +5675,20 @@ "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "license": "MIT" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "dependencies": { + "layout-base": "^1.0.0" + } }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -5891,11 +5700,15 @@ "node": ">=10" } }, + "node_modules/countup.js": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-2.4.2.tgz", + "integrity": "sha512-EExCcu5rd7ffBj65B3CVNuS1HddN1Y4WuTfJEuocJXwZlNnlXZQ4sD9M/Cq32ZS0zR38F9vGMCw/iFcVImrNbw==" + }, "node_modules/cross-fetch": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "license": "MIT", "dependencies": { "node-fetch": "2.6.7" } @@ -5904,7 +5717,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5918,7 +5730,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "license": "MIT", "engines": { "node": ">=8" } @@ -5927,7 +5738,6 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "license": "ISC", "engines": { "node": "^10 || ^12 || >=14" }, @@ -5936,13 +5746,12 @@ } }, "node_modules/css-loader": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", - "integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==", - "license": "MIT", + "version": "6.7.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", + "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.18", + "postcss": "^8.4.19", "postcss-modules-extract-imports": "^3.0.0", "postcss-modules-local-by-default": "^4.0.0", "postcss-modules-scope": "^3.0.0", @@ -5961,26 +5770,10 @@ "webpack": "^5.0.0" } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/css-minimizer-webpack-plugin": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "license": "MIT", "dependencies": { "cssnano": "^5.1.8", "jest-worker": "^29.1.2", @@ -6020,46 +5813,64 @@ } } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/jest-worker": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", - "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", - "license": "MIT", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dependencies": { - "@types/node": "*", - "jest-util": "^29.3.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/css-minimizer-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dependencies": { - "has-flag": "^4.0.0" + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">= 12.13.0" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "license": "BSD-2-Clause", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", "nth-check": "^2.0.1" }, "funding": { @@ -6069,68 +5880,14 @@ "node_modules/css-select-base-adapter": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", - "license": "MIT" - }, - "node_modules/css-select/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/css-select/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/css-select/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" }, "node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "license": "MIT", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dependencies": { - "mdn-data": "2.0.14", + "mdn-data": "2.0.4", "source-map": "^0.6.1" }, "engines": { @@ -6141,7 +5898,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -6153,7 +5909,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -6162,12 +5917,11 @@ } }, "node_modules/cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "license": "MIT", + "version": "5.1.15", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", "dependencies": { - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "lilconfig": "^2.0.3", "yaml": "^1.10.2" }, @@ -6183,13 +5937,12 @@ } }, "node_modules/cssnano-preset-advanced": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", - "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", - "license": "MIT", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", + "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", "dependencies": { "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.13", + "cssnano-preset-default": "^5.2.14", "postcss-discard-unused": "^5.1.0", "postcss-merge-idents": "^5.1.1", "postcss-reduce-idents": "^5.2.0", @@ -6203,22 +5956,21 @@ } }, "node_modules/cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "license": "MIT", + "version": "5.2.14", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", "dependencies": { "css-declaration-sorter": "^6.3.1", "cssnano-utils": "^3.1.0", "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", + "postcss-colormin": "^5.3.1", "postcss-convert-values": "^5.1.3", "postcss-discard-comments": "^5.1.2", "postcss-discard-duplicates": "^5.1.0", "postcss-discard-empty": "^5.1.1", "postcss-discard-overridden": "^5.1.0", "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", + "postcss-merge-rules": "^5.1.4", "postcss-minify-font-values": "^5.1.0", "postcss-minify-gradients": "^5.1.1", "postcss-minify-params": "^5.1.4", @@ -6233,7 +5985,7 @@ "postcss-normalize-url": "^5.1.0", "postcss-normalize-whitespace": "^5.1.1", "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", + "postcss-reduce-initial": "^5.1.2", "postcss-reduce-transforms": "^5.1.0", "postcss-svgo": "^5.1.0", "postcss-unique-selectors": "^5.1.1" @@ -6249,7 +6001,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "license": "MIT", "engines": { "node": "^10 || ^12 || >=14.0" }, @@ -6261,7 +6012,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "license": "MIT", "dependencies": { "css-tree": "^1.1.2" }, @@ -6269,17 +6019,79 @@ "node": ">=8.0.0" } }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "license": "MIT" + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" + }, + "node_modules/cytoscape": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.23.0.tgz", + "integrity": "sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==", + "dependencies": { + "heap": "^0.2.6", + "lodash": "^4.17.21" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" }, "node_modules/d3": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.6.1.tgz", - "integrity": "sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==", - "license": "ISC", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.2.tgz", + "integrity": "sha512-WXty7qOGSHb7HR7CfOzwN1Gw04MUOzN8qh9ZUsvwycIMb4DYMpY9xczZ6jUorGtO6bR9BPMPaueIKwiDxu9uiQ==", "dependencies": { "d3-array": "3", "d3-axis": "3", @@ -6317,16 +6129,20 @@ } }, "node_modules/d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==", - "license": "BSD-3-Clause" + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } }, "node_modules/d3-axis": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "license": "ISC", "engines": { "node": ">=12" } @@ -6335,7 +6151,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -6347,133 +6162,29 @@ "node": ">=12" } }, - "node_modules/d3-brush/node_modules/d3-color": { + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/d3-brush/node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush/node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "license": "ISC", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord/node_modules/d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==", - "license": "BSD-3-Clause" - }, "node_modules/d3-contour": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.0.tgz", - "integrity": "sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==", - "license": "ISC", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", "dependencies": { "d3-array": "^3.2.0" }, @@ -6481,23 +6192,10 @@ "node": ">=12" } }, - "node_modules/d3-contour/node_modules/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/d3-delaunay": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "license": "ISC", "dependencies": { "delaunator": "5" }, @@ -6506,72 +6204,29 @@ } }, "node_modules/d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "node_modules/d3-dsv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", - "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", - "license": "BSD-3-Clause", - "dependencies": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json", - "csv2tsv": "bin/dsv2dsv", - "dsv2dsv": "bin/dsv2dsv", - "dsv2json": "bin/dsv2json", - "json2csv": "bin/json2dsv", - "json2dsv": "bin/json2dsv", - "json2tsv": "bin/json2dsv", - "tsv2csv": "bin/dsv2dsv", - "tsv2json": "bin/dsv2json" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "engines": { + "node": ">=12" } }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "license": "ISC", + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", "dependencies": { - "d3-dsv": "1 - 3" + "d3-dispatch": "1 - 3", + "d3-selection": "3" }, "engines": { "node": ">=12" } }, - "node_modules/d3-fetch/node_modules/d3-dsv": { + "node_modules/d3-dsv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "license": "ISC", "dependencies": { "commander": "7", "iconv-lite": "0.6", @@ -6592,23 +6247,37 @@ "node": ">=12" } }, - "node_modules/d3-fetch/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "d3-dsv": "1 - 3" }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, "node_modules/d3-force": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", @@ -6618,44 +6287,18 @@ "node": ">=12" } }, - "node_modules/d3-force/node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force/node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force/node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", "engines": { "node": ">=12" } }, - "node_modules/d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==", - "license": "BSD-3-Clause" - }, "node_modules/d3-geo": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", - "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", - "license": "ISC", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", "dependencies": { "d3-array": "2.5.0 - 3" }, @@ -6663,62 +6306,53 @@ "node": ">=12" } }, - "node_modules/d3-geo/node_modules/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "license": "ISC", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/d3-hierarchy": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "license": "BSD-3-Clause", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", "dependencies": { - "d3-color": "1" + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" } }, "node_modules/d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", - "license": "BSD-3-Clause" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "engines": { + "node": ">=12" + } }, "node_modules/d3-polygon": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==", - "license": "BSD-3-Clause" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "engines": { + "node": ">=12" + } }, "node_modules/d3-random": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "license": "ISC", "engines": { "node": ">=12" } @@ -6727,7 +6361,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "license": "ISC", "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", @@ -6743,7 +6376,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "license": "ISC", "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" @@ -6752,74 +6384,29 @@ "node": ">=12" } }, - "node_modules/d3-scale-chromatic/node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "engines": { "node": ">=12" } }, - "node_modules/d3-scale/node_modules/d3-array": { + "node_modules/d3-shape": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", "dependencies": { - "internmap": "1 - 2" + "d3-path": "^3.1.0" }, "engines": { "node": ">=12" } }, - "node_modules/d3-scale/node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale/node_modules/d3-format": { + "node_modules/d3-time": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale/node_modules/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", "dependencies": { "d3-array": "2 - 3" }, @@ -6827,11 +6414,10 @@ "node": ">=12" } }, - "node_modules/d3-scale/node_modules/d3-time-format": { + "node_modules/d3-time-format": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "license": "ISC", "dependencies": { "d3-time": "1 - 3" }, @@ -6839,79 +6425,36 @@ "node": ">=12" } }, - "node_modules/d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-shape": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz", - "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==", - "license": "ISC", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape/node_modules/d3-path": { + "node_modules/d3-timer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", "engines": { "node": ">=12" } }, - "node_modules/d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==", - "license": "BSD-3-Clause" - }, - "node_modules/d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-time": "1" - } - }, - "node_modules/d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==", - "license": "BSD-3-Clause" - }, "node_modules/d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "license": "BSD-3-Clause", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", "dependencies": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" } }, - "node_modules/d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==", - "license": "BSD-3-Clause" - }, "node_modules/d3-zoom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "license": "ISC", "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", @@ -6923,14733 +6466,1444 @@ "node": ">=12" } }, - "node_modules/d3-zoom/node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-zoom/node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/dagre-d3-es": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.8.tgz", + "integrity": "sha512-eykdoYQ4FwCJinEYS0gPL2f2w+BPbSLvnQSJ3Ye1vAoPjdkq6xIMKBv+UkICd3qZE26wBKIn3p+6n0QC7R1LyA==", + "dependencies": { + "d3": "^7.8.2", + "lodash-es": "^4.17.21" } }, - "node_modules/d3-zoom/node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" + "ms": "2.1.2" }, "engines": { - "node": ">=12" - } - }, - "node_modules/d3-zoom/node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=12" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/d3-zoom/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", "dependencies": { - "d3-color": "1 - 3" + "mimic-response": "^1.0.0" }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/d3-zoom/node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "engines": { - "node": ">=12" + "node": ">=4.0.0" } }, - "node_modules/d3-zoom/node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", + "node_modules/deepmerge": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", + "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/d3-zoom/node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" + "execa": "^5.0.0" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" + "node": ">= 10" } }, - "node_modules/d3/node_modules/d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "license": "ISC", + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dependencies": { - "internmap": "1 - 2" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/d3/node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "license": "ISC", + "node_modules/default-gateway/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/d3/node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "license": "ISC", + "node_modules/default-gateway/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "engines": { - "node": ">=12" + "node": ">=10.17.0" } }, - "node_modules/d3/node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "license": "ISC", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/d3/node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "license": "ISC", + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=12" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/d3/node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "license": "BSD-3-Clause", + "node_modules/del": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", + "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", + "dependencies": { + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/d3/node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/delaunator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", + "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", + "dependencies": { + "robust-predicates": "^3.0.0" } }, - "node_modules/d3/node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "license": "ISC", - "dependencies": { - "d3-color": "1 - 3" - }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "engines": { - "node": ">=12" + "node": ">= 0.8" } }, - "node_modules/d3/node_modules/d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3/node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "license": "ISC", + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { - "node": ">=12" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/d3/node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/d3/node_modules/d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "license": "ISC", + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" + }, + "node_modules/detect-port": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", + "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", "dependencies": { - "d3-array": "2 - 3" + "address": "^1.0.1", + "debug": "4" }, - "engines": { - "node": ">=12" + "bin": { + "detect": "bin/detect-port.js", + "detect-port": "bin/detect-port.js" } }, - "node_modules/d3/node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "license": "ISC", + "node_modules/detect-port-alt": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", + "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", "dependencies": { - "d3-time": "1 - 3" + "address": "^1.0.1", + "debug": "^2.6.0" + }, + "bin": { + "detect": "bin/detect-port", + "detect-port": "bin/detect-port" }, "engines": { - "node": ">=12" + "node": ">= 4.2.1" } }, - "node_modules/d3/node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "license": "ISC", - "engines": { - "node": ">=12" + "node_modules/detect-port-alt/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/d3/node_modules/d3-transition": { + "node_modules/detect-port-alt/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/dir-glob": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "license": "ISC", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" + "path-type": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" + "node": ">=8" } }, - "node_modules/d3/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" + }, + "node_modules/dns-packet": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", + "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" + "@leichtgewicht/ip-codec": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "license": "MIT", - "dependencies": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "node_modules/dagre-d3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", - "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", - "license": "MIT", - "dependencies": { - "d3": "^5.14", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "node_modules/dagre-d3/node_modules/d3": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", - "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, - "node_modules/dagre-d3/node_modules/d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==", - "license": "BSD-3-Clause" - }, - "node_modules/dagre-d3/node_modules/d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", - "license": "BSD-3-Clause", + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "utila": "~0.4" } }, - "node_modules/dagre-d3/node_modules/d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "license": "BSD-3-Clause", + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dependencies": { - "d3-array": "1", - "d3-path": "1" + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "node_modules/dagre-d3/node_modules/d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "license": "BSD-3-Clause", + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dependencies": { - "d3-array": "^1.1.1" + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "node_modules/dagre-d3/node_modules/d3-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", - "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", - "license": "BSD-3-Clause", + "node_modules/dompurify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", + "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" + }, + "node_modules/domutils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", + "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", "dependencies": { - "d3-dsv": "1" + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.1" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/dagre-d3/node_modules/d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "license": "BSD-3-Clause", + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", "dependencies": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" + "no-case": "^3.0.4", + "tslib": "^2.0.3" } }, - "node_modules/dagre-d3/node_modules/d3-geo": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", - "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", - "license": "BSD-3-Clause", + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dependencies": { - "d3-array": "1" + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/dagre-d3/node_modules/d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==", - "license": "BSD-3-Clause" + "node_modules/dot-prop/node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } }, - "node_modules/dagre-d3/node_modules/d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==", - "license": "BSD-3-Clause" + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" }, - "node_modules/dagre-d3/node_modules/d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==", - "license": "BSD-3-Clause" + "node_modules/duplexer3": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", + "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" }, - "node_modules/dagre-d3/node_modules/d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, - "node_modules/dagre-d3/node_modules/d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-color": "1", - "d3-interpolate": "1" + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.305", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", + "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==" + }, + "node_modules/elkjs": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", + "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" } }, - "node_modules/dagre-d3/node_modules/d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-path": "1" + "node_modules/emoticon": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", + "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/dagre-d3/node_modules/d3-zoom": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", - "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", - "license": "BSD-3-Clause", - "dependencies": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" } }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { - "ms": "2.0.0" + "once": "^1.4.0" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "license": "MIT", + "node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dependencies": { - "mimic-response": "^1.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=4" + "node": ">=10.13.0" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", + "node_modules/entities": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", + "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", "engines": { - "node": ">=4.0.0" + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "license": "BSD-2-Clause", + "node_modules/es-abstract": { + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", "dependencies": { - "execa": "^5.0.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { - "node": ">= 10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "license": "MIT", + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">= 0.4" } }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "license": "MIT", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/default-gateway/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "license": "Apache-2.0", + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { - "node": ">=10.17.0" + "node": ">=6" } }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "license": "MIT" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "license": "MIT", + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", "engines": { "node": ">=8" } }, - "node_modules/define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "license": "MIT", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "license": "ISC", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dependencies": { - "robust-predicates": "^3.0.0" + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" } }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "license": "MIT", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": ">= 0.8" + "node": ">=4.0" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "license": "MIT", + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=4.0" } }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.5.4" + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eta": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.0.tgz", + "integrity": "sha512-NqE7S2VmVwgMS8yBxsH4VgNQjNjLq1gfGU0u9I6Cjh468nPRMoDfGdK9n1p/3Dvsw3ebklDkZsFAnKJ9sefjBA==", + "engines": { + "node": ">=6.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/eta-dev/eta?sponsor=1" } }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", - "license": "MIT" + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "license": "MIT", + "node_modules/eval": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", + "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", "dependencies": { - "address": "^1.0.1", - "debug": "4" + "@types/node": "*", + "require-like": ">= 0.1.1" }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" + "engines": { + "node": ">= 0.8" } }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "engines": { - "node": ">= 4.2.1" + "node": ">=0.8.x" } }, - "node_modules/detect-port/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", + "node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dependencies": { - "ms": "2.1.2" + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/detect-port/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "license": "MIT", + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dependencies": { - "path-type": "^4.0.0" + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" }, "engines": { - "node": ">=8" + "node": ">= 0.10.0" } }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", - "license": "MIT" + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "license": "MIT", + "node_modules/express/node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" + "safe-buffer": "5.2.1" }, "engines": { - "node": ">=6" + "node": ">= 0.6" } }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "license": "MIT", + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "utila": "~0.4" + "ms": "2.0.0" } }, - "node_modules/dom-serializer": { + "node_modules/express/node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/express/node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/express/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "is-extendable": "^0.1.0" }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", "dependencies": { - "domelementtype": "^2.3.0" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" + "node": ">=8.6.0" } }, - "node_modules/dompurify": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", - "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==", - "license": "(MPL-2.0 OR Apache-2.0)" + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, - "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "license": "BSD-2-Clause", + "node_modules/fast-url-parser": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", + "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" + "punycode": "^1.3.2" } }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "license": "MIT", + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" + "reusify": "^1.0.4" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "license": "MIT", + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dependencies": { - "is-obj": "^2.0.0" + "websocket-driver": ">=0.5.1" }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/fbemitter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", + "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", + "dependencies": { + "fbjs": "^3.0.0" } }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "license": "MIT" - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", - "license": "BSD-3-Clause" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", - "license": "MIT" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", - "license": "ISC" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "node_modules/fbjs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", + "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", + "dependencies": { + "cross-fetch": "^3.1.5", + "fbjs-css-vars": "^1.0.0", + "loose-envify": "^1.0.0", + "object-assign": "^4.1.0", + "promise": "^7.1.1", + "setimmediate": "^1.0.5", + "ua-parser-js": "^0.7.30" } }, - "node_modules/encodeurl": { + "node_modules/fbjs-css-vars": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } + "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", + "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" }, - "node_modules/enhanced-resolve": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz", - "integrity": "sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g==", - "license": "MIT", + "node_modules/feed": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", + "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", "dependencies": { - "graceful-fs": "^4.2.9", - "tapable": "^2.2.0" + "xml-js": "^1.6.11" }, "engines": { - "node": ">=10.13.0" + "node": ">=0.4.0" } }, - "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "license": "BSD-2-Clause", + "node_modules/file-loader": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", + "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", + "dependencies": { + "loader-utils": "^2.0.0", + "schema-utils": "^3.0.0" + }, "engines": { - "node": ">=0.12" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" } }, - "node_modules/es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "license": "MIT", + "node_modules/file-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dependencies": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 0.4" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "license": "MIT" - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", - "license": "MIT" + "node_modules/filesize": { + "version": "8.0.7", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", + "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", + "engines": { + "node": ">= 0.4.0" + } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "license": "MIT", + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "license": "MIT", + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", - "license": "MIT" + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "license": "MIT", + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "license": "BSD-2-Clause", + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "license": "BSD-2-Clause", + "node_modules/flux": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", + "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", "dependencies": { - "estraverse": "^5.2.0" + "fbemitter": "^3.0.0", + "fbjs": "^3.0.1" }, - "engines": { - "node": ">=4.0" + "peerDependencies": { + "react": "^15.0.2 || ^16.0.0 || ^17.0.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "license": "BSD-2-Clause", + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "engines": { "node": ">=4.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==", - "license": "MIT", - "engines": { - "node": ">=6.0.0" }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "license": "MIT", - "engines": { - "node": ">=0.8.x" + "is-callable": "^1.1.3" } }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", + "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" + "@babel/code-frame": "^7.8.3", + "@types/json-schema": "^7.0.5", + "chalk": "^4.1.0", + "chokidar": "^3.4.2", + "cosmiconfig": "^6.0.0", + "deepmerge": "^4.2.2", + "fs-extra": "^9.0.0", + "glob": "^7.1.6", + "memfs": "^3.1.2", + "minimatch": "^3.0.4", + "schema-utils": "2.7.0", + "semver": "^7.3.2", + "tapable": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=10", + "yarn": ">=1.0.0" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" + "peerDependencies": { + "eslint": ">= 6", + "typescript": ">= 2.7", + "vue-template-compiler": "*", + "webpack": ">= 4" }, - "engines": { - "node": ">= 0.10.0" + "peerDependenciesMeta": { + "eslint": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } } }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", + "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", "dependencies": { - "safe-buffer": "5.2.1" + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.7.2" }, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", - "license": "MIT" - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "license": "MIT" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { - "is-extendable": "^0.1.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/fast-clone": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", - "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==", - "license": "MIT" - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "license": "MIT", + "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", + "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@types/json-schema": "^7.0.4", + "ajv": "^6.12.2", + "ajv-keywords": "^3.4.1" }, "engines": { - "node": ">=8.6.0" + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "license": "MIT" - }, - "node_modules/fast-url-parser": { + "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "license": "MIT", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fast-url-parser/node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "license": "Apache-2.0", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "license": "BSD-3-Clause", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "license": "MIT", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==", - "license": "MIT" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "license": "MIT", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", - "license": "BSD-3-Clause", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "license": "MIT", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==", - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "license": "MIT" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", - "license": "ISC" - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "license": "BSD-2-Clause" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "license": "MIT", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "license": "MIT", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "license": "ISC" - }, - "node_modules/graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.15" - } - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", - "license": "MIT" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "license": "MIT", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", - "license": "MIT" - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "license": "MIT", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "license": "BSD-3-Clause", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==", - "license": "MIT" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "license": "MIT", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "license": "MIT", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "license": "BSD-2-Clause" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "license": "MIT", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", - "license": "MIT" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "license": "MIT", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "license": "MIT", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.42", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", - "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==", - "license": "MIT" - }, - "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "license": "MIT", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "license": "MIT", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "license": "MIT", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "license": "MIT", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "license": "MIT" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "license": "MIT" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "license": "ISC" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "license": "MIT", - "dependencies": { - "@jest/types": "^29.3.1", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util/node_modules/ci-info": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz", - "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", - "license": "BSD-3-Clause", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "license": "MIT", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "license": "MIT" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "license": "MIT", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==", - "license": "MIT" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "license": "MIT" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==", - "license": "MIT" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "license": "MIT" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", - "license": "MIT" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "license": "MIT", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "license": "MIT", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "license": "CC0-1.0" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", - "license": "MIT" - }, - "node_modules/mdx-mermaid": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz", - "integrity": "sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w==", - "license": "MIT", - "peerDependencies": { - "mermaid": ">=8.11.0", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", - "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", - "license": "MIT" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz", - "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==", - "license": "MIT", - "dependencies": { - "@braintree/sanitize-url": "^6.0.0", - "d3": "^7.0.0", - "dagre": "^0.8.5", - "dagre-d3": "^0.6.4", - "dompurify": "2.4.0", - "fast-clone": "^1.5.13", - "graphlib": "^2.1.8", - "khroma": "^2.0.0", - "lodash": "^4.17.21", - "moment-mini": "^2.24.0", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.2", - "uuid": "^9.0.0" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "license": "MIT", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz", - "integrity": "sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw==", - "license": "MIT", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "license": "ISC" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment-mini": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", - "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==", - "license": "MIT" - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "license": "MIT", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "license": "MIT", - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "license": "MIT" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", - "license": "MIT" - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==", - "license": "MIT" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", - "license": "MIT" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "license": "MIT", - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", - "license": "MIT" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "license": "(WTFPL OR MIT)", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "license": "MIT", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "license": "MIT", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==", - "license": "ISC" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "license": "MIT", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", - "license": "(WTFPL OR MIT)" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==", - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.16.6", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "license": "MIT", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.7" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-loader/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "license": "MIT", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "license": "MIT", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "license": "MIT", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", - "license": "MIT", - "dependencies": { - "sort-css-media-queries": "2.1.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.16" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "license": "MIT", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "license": "MIT", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "license": "MIT" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "license": "MIT", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", - "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==", - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "license": "MIT", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-quick": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz", - "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", - "license": "MIT", - "dependencies": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "bin": { - "pretty-quick": "bin/pretty-quick.js" - }, - "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "prettier": ">=2.0.0" - } - }, - "node_modules/pretty-quick/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "license": "MIT", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "license": "MIT" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "license": "MIT", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "license": "MIT", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "license": "MIT", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==", - "license": "MIT" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "license": "MIT", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "license": "MIT", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "license": "MIT" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==", - "license": "MIT" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "license": "Apache-2.0", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "license": "MIT" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "license": "MIT", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "license": "MIT" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "license": "MIT", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router/node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "license": "MIT", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", - "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "license": "MIT" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "license": "MIT" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "license": "MIT", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "license": "MIT", - "dependencies": { - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "license": "MIT", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "license": "MIT", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==", - "license": "MIT" - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "license": "MIT", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "license": "MIT", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==", - "license": "MIT" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread/node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/remark-mdx/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/remark-mdx/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "license": "MIT", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "license": "MIT", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "license": "MIT", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "license": "BSD-2-Clause", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "license": "MIT", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", - "license": "MIT" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "license": "MIT", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==", - "license": "Unlicense" - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==", - "license": "BSD-3-Clause" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - } - }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", - "license": "BSD-3-Clause" - }, - "node_modules/rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "license": "ISC" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "license": "MIT" - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "license": "MIT", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", - "license": "MIT" - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "license": "MIT", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "license": "MIT", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "license": "MIT", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "license": "BSD-3-Clause", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "license": "MIT", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "license": "MIT", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-handler/node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "license": "MIT", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "license": "MIT", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "license": "MIT", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "license": "MIT" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "license": "ISC" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "license": "MIT", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", - "license": "MIT" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "license": "ISC" - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "license": "MIT", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "license": "MIT" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "license": "MIT", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==", - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "license": "MIT", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", - "license": "MIT", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/spdy-transport/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/spdy-transport/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/spdy/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/spdy/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "license": "MIT" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "license": "BSD-3-Clause" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "license": "MIT" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz", - "integrity": "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==", - "license": "MIT" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "license": "BSD-2-Clause", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "license": "MIT", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "license": "MIT", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==", - "license": "MIT" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", - "license": "MIT" - }, - "node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "license": "MIT", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "license": "BSD-2-Clause", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", - "license": "MIT" - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==", - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "license": "MIT", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "license": "MIT", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "license": "MIT", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "license": "MIT", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "license": "MIT", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==", - "license": "MIT" - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "license": "BSD-2-Clause", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "license": "MIT", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "license": "MIT", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "license": "MIT", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "license": "MIT", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "license": "MIT", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "license": "MIT" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "license": "MIT", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", - "license": "MIT" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", - "license": "MIT" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "license": "MIT", - "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "license": "MIT", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "license": "MIT", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "license": "MIT", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", - "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", - "license": "MIT", - "dependencies": { - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "license": "MIT", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "license": "MIT", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "license": "MIT", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "license": "MIT" - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "license": "Apache-2.0", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "license": "Apache-2.0", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "license": "MIT", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "license": "MIT", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/widest-line/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/widest-line/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/widest-line/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "license": "MIT", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - }, - "dependencies": { - "@algolia/autocomplete-core": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.2.tgz", - "integrity": "sha512-eclwUDC6qfApNnEfu1uWcL/rudQsn59tjEoUYZYE2JSXZrHLRjBUGMxiCoknobU2Pva8ejb0eRxpIYDtVVqdsw==", - "requires": { - "@algolia/autocomplete-shared": "1.7.2" - } - }, - "@algolia/autocomplete-preset-algolia": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.2.tgz", - "integrity": "sha512-+RYEG6B0QiGGfRb2G3MtPfyrl0dALF3cQNTWBzBX6p5o01vCCGTTinAm2UKG3tfc2CnOMAtnPLkzNZyJUpnVJw==", - "requires": { - "@algolia/autocomplete-shared": "1.7.2" - } - }, - "@algolia/autocomplete-shared": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.2.tgz", - "integrity": "sha512-QCckjiC7xXHIUaIL3ektBtjJ0w7tTA3iqKcAE/Hjn1lZ5omp7i3Y4e09rAr9ZybqirL7AbxCLLq0Ra5DDPKeug==" - }, - "@algolia/cache-browser-local-storage": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.2.tgz", - "integrity": "sha512-FRweBkK/ywO+GKYfAWbrepewQsPTIEirhi1BdykX9mxvBPtGNKccYAxvGdDCumU1jL4r3cayio4psfzKMejBlA==", - "requires": { - "@algolia/cache-common": "4.14.2" - } - }, - "@algolia/cache-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.2.tgz", - "integrity": "sha512-SbvAlG9VqNanCErr44q6lEKD2qoK4XtFNx9Qn8FK26ePCI8I9yU7pYB+eM/cZdS9SzQCRJBbHUumVr4bsQ4uxg==" - }, - "@algolia/cache-in-memory": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.2.tgz", - "integrity": "sha512-HrOukWoop9XB/VFojPv1R5SVXowgI56T9pmezd/djh2JnVN/vXswhXV51RKy4nCpqxyHt/aGFSq2qkDvj6KiuQ==", - "requires": { - "@algolia/cache-common": "4.14.2" - } - }, - "@algolia/client-account": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.2.tgz", - "integrity": "sha512-WHtriQqGyibbb/Rx71YY43T0cXqyelEU0lB2QMBRXvD2X0iyeGl4qMxocgEIcbHyK7uqE7hKgjT8aBrHqhgc1w==", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-analytics": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.2.tgz", - "integrity": "sha512-yBvBv2mw+HX5a+aeR0dkvUbFZsiC4FKSnfqk9rrfX+QrlNOKEhCG0tJzjiOggRW4EcNqRmaTULIYvIzQVL2KYQ==", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.2.tgz", - "integrity": "sha512-43o4fslNLcktgtDMVaT5XwlzsDPzlqvqesRi4MjQz2x4/Sxm7zYg5LRYFol1BIhG6EwxKvSUq8HcC/KxJu3J0Q==", - "requires": { - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-personalization": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.2.tgz", - "integrity": "sha512-ACCoLi0cL8CBZ1W/2juehSltrw2iqsQBnfiu/Rbl9W2yE6o2ZUb97+sqN/jBqYNQBS+o0ekTMKNkQjHHAcEXNw==", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/client-search": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.2.tgz", - "integrity": "sha512-L5zScdOmcZ6NGiVbLKTvP02UbxZ0njd5Vq9nJAmPFtjffUSOGEp11BmD2oMJ5QvARgx2XbX4KzTTNS5ECYIMWw==", - "requires": { - "@algolia/client-common": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "@algolia/logger-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.2.tgz", - "integrity": "sha512-/JGlYvdV++IcMHBnVFsqEisTiOeEr6cUJtpjz8zc0A9c31JrtLm318Njc72p14Pnkw3A/5lHHh+QxpJ6WFTmsA==" - }, - "@algolia/logger-console": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.2.tgz", - "integrity": "sha512-8S2PlpdshbkwlLCSAB5f8c91xyc84VM9Ar9EdfE9UmX+NrKNYnWR1maXXVDQQoto07G1Ol/tYFnFVhUZq0xV/g==", - "requires": { - "@algolia/logger-common": "4.14.2" - } - }, - "@algolia/requester-browser-xhr": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.2.tgz", - "integrity": "sha512-CEh//xYz/WfxHFh7pcMjQNWgpl4wFB85lUMRyVwaDPibNzQRVcV33YS+63fShFWc2+42YEipFGH2iPzlpszmDw==", - "requires": { - "@algolia/requester-common": "4.14.2" - } - }, - "@algolia/requester-common": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.2.tgz", - "integrity": "sha512-73YQsBOKa5fvVV3My7iZHu1sUqmjjfs9TteFWwPwDmnad7T0VTCopttcsM3OjLxZFtBnX61Xxl2T2gmG2O4ehg==" - }, - "@algolia/requester-node-http": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.2.tgz", - "integrity": "sha512-oDbb02kd1o5GTEld4pETlPZLY0e+gOSWjWMJHWTgDXbv9rm/o2cF7japO6Vj1ENnrqWvLBmW1OzV9g6FUFhFXg==", - "requires": { - "@algolia/requester-common": "4.14.2" - } - }, - "@algolia/transporter": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.2.tgz", - "integrity": "sha512-t89dfQb2T9MFQHidjHcfhh6iGMNwvuKUvojAj+JsrHAGbuSy7yE4BylhLX6R0Q1xYRoC4Vvv+O5qIw/LdnQfsQ==", - "requires": { - "@algolia/cache-common": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/requester-common": "4.14.2" - } - }, - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - } - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz", - "integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==" - }, - "@babel/core": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.5.tgz", - "integrity": "sha512-UdOWmk4pNWTm/4DlPUl/Pt4Gz4rcEMb7CY0Y3eJl5Yz1vI8ZJGmHWaVE55LoxRjdpx0z259GE9U5STA9atUinQ==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-module-transforms": "^7.20.2", - "@babel/helpers": "^7.20.5", - "@babel/parser": "^7.20.5", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.1", - "semver": "^6.3.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/generator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.5.tgz", - "integrity": "sha512-jl7JY2Ykn9S0yj4DQP82sYvPU+T3g0HFcWTqDLqiuA9tGRNIj9VfbtXGAYTTkyNEnQk1jkMGOdYka8aG/lulCA==", - "requires": { - "@babel/types": "^7.20.5", - "@jridgewell/gen-mapping": "^0.3.2", - "jsesc": "^2.5.1" - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz", - "integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==", - "requires": { - "@babel/compat-data": "^7.20.0", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.20.2.tgz", - "integrity": "sha512-k22GoYRAHPYr9I+Gvy2ZQlAe5mGy8BqWst2wRt8cwIufWTxrsVshhIBvYNqC80N0GSFWTsqRVexOtfzlgOEDvA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.19.0.tgz", - "integrity": "sha512-htnV+mHX32DF81amCDrwIDr8nrp1PTm+3wfBN9/v8QJOLEioOCOG7qNyq0nHeFiWbT3Eb7gsPwEmV64UCQ1jzw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.1.0" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", - "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", - "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", - "requires": { - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.2.tgz", - "integrity": "sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.1", - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.19.1.tgz", - "integrity": "sha512-T7ahH7wV0Hfs46SFh5Jz3s0B6+o8g3c+7TMxu7xKfmHikg7EAZ3I2Qk9LFhjxXq8sL7UkP5JflezNwoZa8WvWw==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.18.9", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/traverse": "^7.19.1", - "@babel/types": "^7.19.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", - "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" - }, - "@babel/helper-wrap-function": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.19.0.tgz", - "integrity": "sha512-txX8aN8CZyYGTwcLhlk87KRqncAzhh5TpQamZUa0/u3an36NtDpUP6bQgBCBcLeBs09R/OwQu3OjK0k/HwfNDg==", - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.19.0", - "@babel/types": "^7.19.0" - } - }, - "@babel/helpers": { - "version": "7.20.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.6.tgz", - "integrity": "sha512-Pf/OjgfgFRW5bApskEz5pvidpim7tEDPlFtKcNRXWmfHGn9IEI2W2flqRQXTFb7gIPTyK++N6rVHuwKut4XK6w==", - "requires": { - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.5.tgz", - "integrity": "sha512-r27t/cy/m9uKLXQNWWebeCUHgnAZq0CpG1OwKRxzJMP1vpSU4bSIK2hq+/cp0bQxetkXx38n09rNu8jVkcK/zA==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.18.9.tgz", - "integrity": "sha512-AHrP9jadvH7qlOj6PINbgSuphjQUAK7AOT7DPjBo9EHoLhQTnnK5u45e1Hd4DbSQEO9nqPWtQ89r+XEOWFScKg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-proposal-optional-chaining": "^7.18.9" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.1.tgz", - "integrity": "sha512-Gh5rchzSwE4kC+o/6T8waD0WHEQIsDmjltY8WnWRXHUdH8axZhuH86Ov9M72YhJfDrZseQwuuWaaIT/TmePp3g==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.18.6.tgz", - "integrity": "sha512-+I3oIiNxrCpup3Gi8n5IGMwj0gOCAjcJUSQEcotNnCCPMEnixawOQ+KeJPlgfjzx+FKQ1QSyZOWe7wmoJp7vhw==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.18.9.tgz", - "integrity": "sha512-128YbMpjCrP35IOExw2Fq+x55LMP42DzhOhX2aNNIdI9avSWl2PI0yuBWarr3RYpZBSPtabfadkH2yeRiMD61Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.2.tgz", - "integrity": "sha512-Ks6uej9WFK+fvIMesSqbAto5dD8Dz4VuuFvGJFKgIGSkJuRGcrwGECPA1fDgQK3/DbExBJpEkTeYeB8geIFCSQ==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.1" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.18.9.tgz", - "integrity": "sha512-v5nwt4IqBXihxGsW2QmCWMDS3B3bzGIk/EQVZz2ei7f3NJl8NzAJVvUmpDW5q1CRNY+Beb/k58UAH1Km1N411w==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.18.6.tgz", - "integrity": "sha512-9Rysx7FOctvT5ouj5JODjAFAkgGoudQuLPamZb0v1TGLpapdNaftzifU8NTWQm0IRjqoYypdrSmyWgkocDQ8Dw==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.18.6.tgz", - "integrity": "sha512-9S9X9RUefzrsHZmKMbDXxweEH+YlE8JJEuat9FdvW9Qh1cw7W64jELCtWNkPBPX5En45uy28KGvA/AySqUh8CQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", - "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-remap-async-to-generator": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.20.2.tgz", - "integrity": "sha512-y5V15+04ry69OV2wULmwhEA6jwSWXO1TwAtIwiPXcvHcoOQUqpyMVd2bDsQJMW8AurjulIyUV8kDqtjSwHy1uQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.20.2.tgz", - "integrity": "sha512-9rbPp0lCVVoagvtEyQKSo5L8oo0nQS/iif+lwlAz29MccX2642vWDlSZK+2T2buxbopotId2ld7zZAzRfz9j1g==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.19.1", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.18.9.tgz", - "integrity": "sha512-+i0ZU1bCDymKakLxn5srGHrsAPRELC2WIbzwjLhHW9SIE1cPYkLCL0NlnXMZaM1vhfgA2+M7hySk42VBvrkBRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.2.tgz", - "integrity": "sha512-mENM+ZHrvEgxLTBXUiQ621rRXZes3KWUv6NdQlrnr1TkWVw+hUjQBZuP2X32qKlrlG2BzgR95gkuCRSkJl8vIw==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.18.8.tgz", - "integrity": "sha512-yEfTRnjuskWYo0k1mHUqrVWaZwrdq8AYbfrpqULOJOaucGSp4mNMVps+YtA8byoevxS/urwU75vyhQIxcCgiBQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.19.6.tgz", - "integrity": "sha512-uG3od2mXvAtIFQIh0xrpLH6r5fpSQN04gIVovl+ODLdUMANokxQLZnPBHcjmv3GxRjnqwLuHvppjjcelqUFZvg==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.19.6.tgz", - "integrity": "sha512-8PIa1ym4XRTKuSsOUXqDG0YaOlEuTVvHMe5JCfgBMOtHvJKw/4NGovEGN33viISshG/rZNVrACiBmPQLvWN8xQ==", - "requires": { - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-simple-access": "^7.19.4" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.19.6.tgz", - "integrity": "sha512-fqGLBepcc3kErfR9R3DnVpURmckXP7gj7bAlrTQyBxrigFqszZCkFkcoxzCp2v32XmwXLvbw+8Yq9/b+QqksjQ==", - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.19.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.19.1.tgz", - "integrity": "sha512-oWk9l9WItWBQYS4FgXD4Uyy5kq898lvkXpXQxoJEY1RnvPk4R/Dvu2ebXU9q8lP+rlMwUQTFf2Ok6d78ODa0kw==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.19.0", - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.3.tgz", - "integrity": "sha512-oZg/Fpx0YDrj13KsLyO8I/CX3Zdw7z0O9qOd95SqcoIzuqy/WTGWvePeHAnZCN54SfdyjHcb1S30gc8zlzlHcA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-react-jsx": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.19.0.tgz", - "integrity": "sha512-UVEvX3tXie3Szm3emi1+G63jyw1w5IcMY0FSKM+CRnKRI5Mr1YbCNgsSTwoTwKphQEG9P+QqmuRFneJPZuHNhg==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.19.0" - }, - "dependencies": { - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - } - } - }, - "@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "requires": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - } - }, - "@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.18.6.tgz", - "integrity": "sha512-poqRI2+qiSdeldcz4wTSTXBRryoq3Gc70ye7m7UD5Ww0nE29IXqMl6r7Nd15WBgRd74vloEMlShtH6CKxVzfmQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "regenerator-transform": "^0.15.0" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-runtime": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.19.6.tgz", - "integrity": "sha512-PRH37lz4JU156lYFW1p8OxE5i7d6Sl/zV58ooyr+q1J1lnQPyg5tIiXlIwNVhJaY4W3TmOtdc8jqdXQcB1v5Yw==", - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.19.0", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.19.0.tgz", - "integrity": "sha512-RsuMk7j6n+r752EtzyScnWkQyuJdli6LdO5Klv8Yx0OfPVTcQkIUfS8clx5e9yHXzlnhOZF3CbQ8C2uP5j074w==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.18.9" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.20.2.tgz", - "integrity": "sha512-jvS+ngBfrnTUBfOQq8NfGnSbF9BrqlR6hjJ2yVxMkmO5nL/cdifNbI30EfjRlN4g5wYWNnMPyj5Sa6R1pbLeag==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.20.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - } - }, - "@babel/preset-typescript": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.18.6.tgz", - "integrity": "sha512-s9ik86kXBAnD760aybBucdpnLsAt0jK1xqJn2juOn9lkOvSHV60os5hxoVJsPzMQxvnUJFAlkont2DvvaYEBtQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-typescript": "^7.18.6" - } - }, - "@babel/runtime": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.1.tgz", - "integrity": "sha512-mrzLkl6U9YLF8qpqI7TB82PESyEGjm/0Ly91jG575eVxMMlb8fYfOXFZIJ8XfLrJZQbm7dlKry2bJmXBUEkdFg==", - "requires": { - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/runtime-corejs3": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.20.1.tgz", - "integrity": "sha512-CGulbEDcg/ND1Im7fUNRZdGXmX2MTWVVZacQi/6DiKE5HNwZ3aVTm5PV4lO8HHz0B2h8WQyvKKjbX5XgTtydsg==", - "requires": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.10" - } - }, - "@babel/template": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", - "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.10", - "@babel/types": "^7.18.10" - } - }, - "@babel/traverse": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.5.tgz", - "integrity": "sha512-WM5ZNN3JITQIq9tFZaw1ojLU3WgWdtkxnhM1AegMS+PvHjkM5IXjmYEGY7yukz5XS4sJyEf2VzWjI8uAavhxBQ==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.5", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.19.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.20.5", - "@babel/types": "^7.20.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "@babel/types": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.5.tgz", - "integrity": "sha512-c9fst/h2/dcF7H+MJKZ2T0KjEQ8hY/BNnDk/H3XY8C4Aw/eWQXWn/lWntHF9ooUBnGmEvbfGrTgLWc+um0YDUg==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true - }, - "@docsearch/css": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.0.tgz", - "integrity": "sha512-rODCdDtGyudLj+Va8b6w6Y85KE85bXRsps/R4Yjwt5vueXKXZQKYw0aA9knxLBT6a/bI/GMrAcmCR75KYOM6hg==" - }, - "@docsearch/react": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.0.tgz", - "integrity": "sha512-fhS5adZkae2SSdMYEMVg6pxI5a/cE+tW16ki1V0/ur4Fdok3hBRkmN/H8VvlXnxzggkQIIRIVvYPn00JPjen3A==", - "requires": { - "@algolia/autocomplete-core": "1.7.2", - "@algolia/autocomplete-preset-algolia": "1.7.2", - "@docsearch/css": "3.3.0", - "algoliasearch": "^4.0.0" - } - }, - "@docusaurus/core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.2.0.tgz", - "integrity": "sha512-Vd6XOluKQqzG12fEs9prJgDtyn6DPok9vmUWDR2E6/nV5Fl9SVkhEQOBxwObjk3kQh7OY7vguFaLh0jqdApWsA==", - "requires": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^1.12.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "dependencies": { - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "requires": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - } - }, - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "@docusaurus/cssnano-preset": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.2.0.tgz", - "integrity": "sha512-mAAwCo4n66TMWBH1kXnHVZsakW9VAXJzTO4yZukuL3ro4F+JtkMwKfh42EG75K/J/YIFQG5I/Bzy0UH/hFxaTg==", - "requires": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/logger": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.2.0.tgz", - "integrity": "sha512-DF3j1cA5y2nNsu/vk8AG7xwpZu6f5MKkPPMaaIbgXLnWGfm6+wkOeW7kNrxnM95YOhKUkJUophX69nGUnLsm0A==", - "requires": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - } - }, - "@docusaurus/mdx-loader": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.2.0.tgz", - "integrity": "sha512-X2bzo3T0jW0VhUU+XdQofcEeozXOTmKQMvc8tUnWRdTnCvj4XEcBVdC3g+/jftceluiwSTNRAX4VBOJdNt18jA==", - "requires": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "dependencies": { - "unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "requires": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - } - } - } - }, - "@docusaurus/module-type-aliases": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.2.0.tgz", - "integrity": "sha512-wDGW4IHKoOr9YuJgy7uYuKWrDrSpsUSDHLZnWQYM9fN7D5EpSmYHjFruUpKWVyxLpD/Wh0rW8hYZwdjJIQUQCQ==", - "requires": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.2.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - } - }, - "@docusaurus/plugin-content-blog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.2.0.tgz", - "integrity": "sha512-0mWBinEh0a5J2+8ZJXJXbrCk1tSTNf7Nm4tYAl5h2/xx+PvH/Bnu0V+7mMljYm/1QlDYALNIIaT/JcoZQFUN3w==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-docs": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.2.0.tgz", - "integrity": "sha512-BOazBR0XjzsHE+2K1wpNxz5QZmrJgmm3+0Re0EVPYFGW8qndCWGNtXW/0lGKhecVPML8yyFeAmnUCIs7xM2wPw==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-content-pages": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.2.0.tgz", - "integrity": "sha512-+OTK3FQHk5WMvdelz8v19PbEbx+CNT6VSpx7nVOvMNs5yJCKvmqBJBQ2ZSxROxhVDYn+CZOlmyrC56NSXzHf6g==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - } - }, - "@docusaurus/plugin-debug": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.2.0.tgz", - "integrity": "sha512-p9vOep8+7OVl6r/NREEYxf4HMAjV8JMYJ7Bos5fCFO0Wyi9AZEo0sCTliRd7R8+dlJXZEgcngSdxAUo/Q+CJow==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-analytics": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.2.0.tgz", - "integrity": "sha512-+eZVVxVeEnV5nVQJdey9ZsfyEVMls6VyWTIj8SmX0k5EbqGvnIfET+J2pYEuKQnDIHxy+syRMoRM6AHXdHYGIg==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-google-gtag": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.2.0.tgz", - "integrity": "sha512-6SOgczP/dYdkqUMGTRqgxAS1eTp6MnJDAQMy8VCF1QKbWZmlkx4agHDexihqmYyCujTYHqDAhm1hV26EET54NQ==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/plugin-sitemap": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.2.0.tgz", - "integrity": "sha512-0jAmyRDN/aI265CbWZNZuQpFqiZuo+5otk2MylU9iVrz/4J7gSc+ZJ9cy4EHrEsW7PV8s1w18hIEsmcA1YgkKg==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - } - }, - "@docusaurus/preset-classic": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.2.0.tgz", - "integrity": "sha512-yKIWPGNx7BT8v2wjFIWvYrS+nvN04W+UameSFf8lEiJk6pss0kL6SG2MRvyULiI3BDxH+tj6qe02ncpSPGwumg==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/plugin-debug": "2.2.0", - "@docusaurus/plugin-google-analytics": "2.2.0", - "@docusaurus/plugin-google-gtag": "2.2.0", - "@docusaurus/plugin-sitemap": "2.2.0", - "@docusaurus/theme-classic": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-search-algolia": "2.2.0", - "@docusaurus/types": "2.2.0" - } - }, - "@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { - "@types/react": "*", - "prop-types": "^15.6.2" - } - }, - "@docusaurus/theme-classic": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.2.0.tgz", - "integrity": "sha512-kjbg/qJPwZ6H1CU/i9d4l/LcFgnuzeiGgMQlt6yPqKo0SOJIBMPuz7Rnu3r/WWbZFPi//o8acclacOzmXdUUEg==", - "requires": { - "@docusaurus/core": "2.2.0", - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-translations": "2.2.0", - "@docusaurus/types": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-common": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.42", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-common": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.2.0.tgz", - "integrity": "sha512-R8BnDjYoN90DCL75gP7qYQfSjyitXuP9TdzgsKDmSFPNyrdE3twtPNa2dIN+h+p/pr+PagfxwWbd6dn722A1Dw==", - "requires": { - "@docusaurus/mdx-loader": "2.2.0", - "@docusaurus/module-type-aliases": "2.2.0", - "@docusaurus/plugin-content-blog": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/plugin-content-pages": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-search-algolia": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.2.0.tgz", - "integrity": "sha512-2h38B0tqlxgR2FZ9LpAkGrpDWVdXZ7vltfmTdX+4RsDs3A7khiNsmZB+x/x6sA4+G2V2CvrsPMlsYBy5X+cY1w==", - "requires": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.2.0", - "@docusaurus/logger": "2.2.0", - "@docusaurus/plugin-content-docs": "2.2.0", - "@docusaurus/theme-common": "2.2.0", - "@docusaurus/theme-translations": "2.2.0", - "@docusaurus/utils": "2.2.0", - "@docusaurus/utils-validation": "2.2.0", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^1.12.3", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - } - }, - "@docusaurus/theme-translations": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.2.0.tgz", - "integrity": "sha512-3T140AG11OjJrtKlY4pMZ5BzbGRDjNs2co5hJ6uYJG1bVWlhcaFGqkaZ5lCgKflaNHD7UHBHU9Ec5f69jTdd6w==", - "requires": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - } - }, - "@docusaurus/types": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.2.0.tgz", - "integrity": "sha512-b6xxyoexfbRNRI8gjblzVOnLr4peCJhGbYGPpJ3LFqpi5nsFfoK4mmDLvWdeah0B7gmJeXabN7nQkFoqeSdmOw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - }, - "dependencies": { - "commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==" - } - } - }, - "@docusaurus/utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.2.0.tgz", - "integrity": "sha512-oNk3cjvx7Tt1Lgh/aeZAmFpGV2pDr5nHKrBVx6hTkzGhrnMuQqLt6UPlQjdYQ3QHXwyF/ZtZMO1D5Pfi0lu7SA==", - "requires": { - "@docusaurus/logger": "2.2.0", - "@svgr/webpack": "^6.2.1", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "dependencies": { - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - } - }, - "@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "requires": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - } - }, - "@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "requires": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - } - } - } - }, - "@docusaurus/utils-common": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.2.0.tgz", - "integrity": "sha512-qebnerHp+cyovdUseDQyYFvMW1n1nv61zGe5JJfoNQUnjKuApch3IVsz+/lZ9a38pId8kqehC1Ao2bW/s0ntDA==", - "requires": { - "tslib": "^2.4.0" - } - }, - "@docusaurus/utils-validation": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.2.0.tgz", - "integrity": "sha512-I1hcsG3yoCkasOL5qQAYAfnmVoLei7apugT6m4crQjmDGxq+UkiRrq55UqmDDyZlac/6ax/JC0p+usZ6W4nVyg==", - "requires": { - "@docusaurus/logger": "2.2.0", - "@docusaurus/utils": "2.2.0", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - } - }, - "@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@jest/schemas": { - "version": "29.0.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.0.0.tgz", - "integrity": "sha512-3Ab5HgYIIAnS0HjqJHQYZS+zXc4tUmTmBH3z83ajI6afXp8X3ZtdLX+nXx+I7LNkJD7uN9LAVhgnjDgZa2z0kA==", - "requires": { - "@sinclair/typebox": "^0.24.1" - } - }, - "@jest/types": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.3.1.tgz", - "integrity": "sha512-d0S0jmmTpjnhCmNpApgX3jrUZgZ22ivKJRvL2lli5hpCRoNnp1f85r2/wpKfXuYu8E7Jjh1hGfhPyup1NM5AmA==", - "requires": { - "@jest/schemas": "^29.0.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "requires": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } - } - }, - "@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "requires": {} - }, - "@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==" - }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } - }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" - }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } - }, - "@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "requires": { - "@hapi/hoek": "^9.0.0" - } - }, - "@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "@sinclair/typebox": { - "version": "0.24.51", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", - "integrity": "sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==" - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, - "@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "requires": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - } - }, - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-6.5.0.tgz", - "integrity": "sha512-8zYdkym7qNyfXpWvu4yq46k41pyNM9SOstoWhKlm+IfdCE1DdnRKeMUPsWIEO/DEkaWxJ8T9esNdG3QwQ93jBA==", - "requires": {} - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-6.5.0.tgz", - "integrity": "sha512-NFdxMq3xA42Kb1UbzCVxplUc0iqSyM9X8kopImvFnB+uSDdzIHOdbs1op8ofAvVRtbg4oZiyRl3fTYeKcOe9Iw==", - "requires": {} - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "requires": {} - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "requires": {} - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "requires": {} - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "requires": {} - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "requires": {} - }, - "@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - } - }, - "@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "dependencies": { - "@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "requires": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - } - }, - "@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "requires": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - } - } - } - }, - "@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "requires": { - "@babel/types": "^7.12.6" - } - }, - "@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "requires": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==" - }, - "@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==" - }, - "@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==" - }, - "@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==" - }, - "@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==" - }, - "@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==" - }, - "@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==" - }, - "@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==" - }, - "@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "requires": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - } - } - } - }, - "@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "requires": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "requires": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==" - }, - "dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "requires": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - }, - "dependencies": { - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - } - } - }, - "domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "requires": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "requires": { - "boolbase": "~1.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "requires": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - } - } - } - }, - "@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "requires": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "dependencies": { - "@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "requires": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - } - } - } - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" - }, - "@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "requires": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "requires": { - "@types/node": "*" - } - }, - "@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "requires": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "@types/eslint": { - "version": "8.4.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.10.tgz", - "integrity": "sha512-Sl/HOqN8NKPmhWo2VBEPm0nvHnu2LL3v9vKo8MEq0EtbJ4eVzGPl41VNPvn5E1i5poMk4/XD8UriLHpJvEP/Nw==", - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "requires": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "@types/express": { - "version": "4.17.14", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.14.tgz", - "integrity": "sha512-TEbt+vaPFQ+xpxFLFssxUDXj5cWCxZJjIcB7Yg0k0GMHGtgtQgpvx/MUQUeAkNbA9AAGrwkAsoeItdTgS7FMyg==", - "requires": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.18", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "@types/express-serve-static-core": { - "version": "4.17.31", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.31.tgz", - "integrity": "sha512-DxMhY+NAsTwMMFHBTtJFNp5qiHKJ7TeqOo23zVEM9alT1Ml27Q3xcTH0xwxn7Q0BbMcVEJOs/7aQtUWupUQN3Q==", - "requires": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "requires": { - "@types/unist": "*" - } - }, - "@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "requires": { - "@types/unist": "*" - } - }, - "@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "@types/node": { - "version": "18.11.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", - "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==" - }, - "@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "@types/react": { - "version": "18.0.25", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.25.tgz", - "integrity": "sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==", - "requires": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "@types/react-router": { - "version": "5.1.19", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.19.tgz", - "integrity": "sha512-Fv/5kb2STAEMT3wHzdKQK2z8xKq38EDIGVrutYLmQVVLe+4orDFquU52hQrULnEHinMKv9FSA6lf9+uNT1ITtA==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "requires": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "requires": { - "@types/node": "*" - } - }, - "@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "requires": { - "@types/express": "*" - } - }, - "@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "requires": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "requires": { - "@types/node": "*" - } - }, - "@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "@types/ws": { - "version": "8.5.3", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", - "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", - "requires": { - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "17.0.13", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.13.tgz", - "integrity": "sha512-9sWaruZk2JGxIQU+IhI1fhPYRcQ0UuTNuKuCW9bR5fp7qi2Llf7WDzNa17Cy7TKnh3cdxDOiyTu6gaLS0eDatg==", - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "requires": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "requires": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "requires": { - "@xtuc/long": "4.2.2" - } - }, - "@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "requires": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==" - }, - "acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "requires": {} - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==" - }, - "address": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.1.tgz", - "integrity": "sha512-B+6bi5D34+fDYENiH5qOlA0cV2rAGKuWZ9LeyUUehbXy8e0VS9e498yO0Jeeh+iM+6KbfudHTFjXw2MmJD4QRA==" - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "requires": {} - }, - "algoliasearch": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.2.tgz", - "integrity": "sha512-ngbEQonGEmf8dyEh5f+uOIihv4176dgbuOZspiuhmTTBRBuzWu3KCGHre6uHj5YyuC7pNvQGzB6ZNJyZi0z+Sg==", - "requires": { - "@algolia/cache-browser-local-storage": "4.14.2", - "@algolia/cache-common": "4.14.2", - "@algolia/cache-in-memory": "4.14.2", - "@algolia/client-account": "4.14.2", - "@algolia/client-analytics": "4.14.2", - "@algolia/client-common": "4.14.2", - "@algolia/client-personalization": "4.14.2", - "@algolia/client-search": "4.14.2", - "@algolia/logger-common": "4.14.2", - "@algolia/logger-console": "4.14.2", - "@algolia/requester-browser-xhr": "4.14.2", - "@algolia/requester-common": "4.14.2", - "@algolia/requester-node-http": "4.14.2", - "@algolia/transporter": "4.14.2" - } - }, - "algoliasearch-helper": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.1.tgz", - "integrity": "sha512-mvsPN3eK4E0bZG0/WlWJjeqe/bUD2KOEVOl0GyL/TGXn6wcpZU8NOuztGHCUKXkyg5gq6YzUakVTmnmSSO5Yiw==", - "requires": { - "@algolia/events": "^4.0.1" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==" - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==" - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" - }, - "array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - } - }, - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" - }, - "asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" - }, - "autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "requires": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - } - }, - "axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "requires": { - "follow-redirects": "^1.14.7" - } - }, - "babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "requires": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "dependencies": { - "schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "requires": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "requires": { - "object.assign": "^4.1.0" - } - }, - "babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "requires": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - } - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==" - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" - }, - "body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } - } - }, - "bonjour-service": { - "version": "1.0.14", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.0.14.tgz", - "integrity": "sha512-HIMbgLnk1Vqvs6B4Wq5ep7mxvj9sGz5d1JJyDNSGNIdA/w2MCz6GTjWTdjqOJV1bEPj+6IkxDvWNFKEBxNt4kQ==", - "requires": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - }, - "dependencies": { - "array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - } - } - }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "requires": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", - "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", - "requires": { - "caniuse-lite": "^1.0.30001400", - "electron-to-chromium": "^1.4.251", - "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.9" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" - }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - }, - "camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" - }, - "caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "requires": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "caniuse-lite": { - "version": "1.0.30001434", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz", - "integrity": "sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA==" - }, - "ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==" - }, - "character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==" - }, - "character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==" - }, - "cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "requires": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - } - }, - "cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "requires": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "dependencies": { - "css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "clean-css": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.1.tgz", - "integrity": "sha512-lCr8OHhiWCTw4v8POJovCoh4T7I9U11yVsPjMWWnnMmp9ZowCxyad1Pathle/9HjaDp+fdQKjO9fQydE6RHTZg==", - "requires": { - "source-map": "~0.6.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" - }, - "cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==" - }, - "cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "requires": { - "@colors/colors": "1.5.0", - "string-width": "^4.2.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==" - }, - "coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "requires": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==" - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - }, - "combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==" - }, - "comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==" - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "requires": { - "mime-db": ">= 1.43.0 < 2" - } - }, - "compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "requires": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "dependencies": { - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - } - } - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==" - }, - "consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==" - }, - "copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "requires": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "dependencies": { - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "requires": { - "is-glob": "^4.0.3" - } - }, - "globby": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.2.tgz", - "integrity": "sha512-LKSDZXToac40u8Q1PQtZihbNdTYSNMuWe+K5l+oa6KgDzSvVrHXlJy40hUP522RjAIoNLJYBJi7ow+rbFpIhHQ==", - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - } - }, - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==" - } - } - }, - "core-js": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.26.1.tgz", - "integrity": "sha512-21491RRQVzUn0GGM9Z1Jrpr6PNPxPi+Za8OM9q4tksTSnlbXXGKK1nXNg/QvwFYettXvSX6zWKCtHHfjN4puyA==" - }, - "core-js-compat": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.26.1.tgz", - "integrity": "sha512-622/KzTudvXCDLRw70iHW4KKs1aGpcRcowGWyYJr2DEBfRrd6hNJybxSWJFuZYD4ma86xhrwDDHxmDaIq4EA8A==", - "requires": { - "browserslist": "^4.21.4" - } - }, - "core-js-pure": { - "version": "3.26.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.26.1.tgz", - "integrity": "sha512-VVXcDpp/xJ21KdULRq/lXdLzQAtX7+37LzpyfFM973il0tWSsDEoyzG38G14AjTpK9VTfiNM9jnFauq/CpaWGQ==" - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - } - }, - "cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "requires": { - "node-fetch": "2.6.7" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" - }, - "css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "requires": {} - }, - "css-loader": { - "version": "6.7.2", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.2.tgz", - "integrity": "sha512-oqGbbVcBJkm8QwmnNzrFrWTnudnRZC+1eXikLJl0n4ljcfotgRifpg2a1lKy8jTrc4/d9A/ap1GFq1jDKG7J+Q==", - "requires": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.18", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, - "css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "requires": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "jest-worker": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.3.1.tgz", - "integrity": "sha512-lY4AnnmsEWeiXirAIA0c9SDPbuCBq8IYuDVL8PMm0MZ2PEs2yPvRA/J64QBXuZp7CYKrDM/rmNrc9/i3KJQncw==", - "requires": { - "@types/node": "*", - "jest-util": "^29.3.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - } - } - }, - "css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "requires": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - } - }, - "css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" - }, - "cssnano": { - "version": "5.1.14", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", - "integrity": "sha512-Oou7ihiTocbKqi0J1bB+TRJIQX5RMR3JghA8hcWSw9mjBLQ5Y3RWqEDoYG3sRNlAbCIXpqMoZGbq5KDR3vdzgw==", - "requires": { - "cssnano-preset-default": "^5.2.13", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - } - }, - "cssnano-preset-advanced": { - "version": "5.3.9", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.9.tgz", - "integrity": "sha512-njnh4pp1xCsibJcEHnWZb4EEzni0ePMqPuPNyuWT4Z+YeXmsgqNuTPIljXFEXhxGsWs9183JkXgHxc1TcsahIg==", - "requires": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.13", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - } - }, - "cssnano-preset-default": { - "version": "5.2.13", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.13.tgz", - "integrity": "sha512-PX7sQ4Pb+UtOWuz8A1d+Rbi+WimBIxJTRyBdgGp1J75VU0r/HFQeLnMYgHiCAp6AR4rqrc7Y4R+1Rjk3KJz6DQ==", - "requires": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.0", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.3", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.1", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - } - }, - "cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "requires": {} - }, - "csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "requires": { - "css-tree": "^1.1.2" - } - }, - "csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "d3": { - "version": "7.6.1", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.6.1.tgz", - "integrity": "sha512-txMTdIHFbcpLx+8a0IFhZsbp+PfBBPt8yfbmukZTQFroKuFqIwqswF0qE5JXWefylaAVpSXFoKm3yP+jpNLFLw==", - "requires": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "dependencies": { - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-array": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz", - "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==" - }, - "d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==" - }, - "d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "dependencies": { - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - } - } - }, - "d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "requires": { - "d3-path": "1 - 3" - }, - "dependencies": { - "d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==" - } - } - }, - "d3-collection": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz", - "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==" - }, - "d3-color": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", - "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" - }, - "d3-contour": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.0.tgz", - "integrity": "sha512-7aQo0QHUTu/Ko3cP9YK9yUTxtoDEiDGwnBHyLxG5M4vqlBkO/uixMRele3nfsfj6UXOcuReVpVXzAboGraYIJw==", - "requires": { - "d3-array": "^3.2.0" - }, - "dependencies": { - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - } - } - }, - "d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "requires": { - "delaunator": "5" - } - }, - "d3-dispatch": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.6.tgz", - "integrity": "sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==" - }, - "d3-drag": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.5.tgz", - "integrity": "sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==", - "requires": { - "d3-dispatch": "1", - "d3-selection": "1" - } - }, - "d3-dsv": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.2.0.tgz", - "integrity": "sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==", - "requires": { - "commander": "2", - "iconv-lite": "0.4", - "rw": "1" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } - } - }, - "d3-ease": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.7.tgz", - "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" - }, - "d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "requires": { - "d3-dsv": "1 - 3" - }, - "dependencies": { - "d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "requires": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - } - }, - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "dependencies": { - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==" - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - } - } - }, - "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" - }, - "d3-geo": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.0.1.tgz", - "integrity": "sha512-Wt23xBych5tSy9IYAM1FR2rWIBFWa52B/oF/GYe5zbdHrg08FU8+BuI6X4PvTwPDdqdAdq04fuWJpELtsaEjeA==", - "requires": { - "d3-array": "2.5.0 - 3" - }, - "dependencies": { - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - } - } - }, - "d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==" - }, - "d3-interpolate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz", - "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", - "requires": { - "d3-color": "1" - } - }, - "d3-path": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" - }, - "d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==" - }, - "d3-quadtree": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.7.tgz", - "integrity": "sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==" - }, - "d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==" - }, - "d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "requires": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "dependencies": { - "d3-array": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.0.tgz", - "integrity": "sha512-3yXFQo0oG3QCxbF06rMPFyGRMGJNS7NvsV1+2joOjbBE+9xvWQ8+GcMJAjRCzw06zQ3/arXeJgbPYcjUCuC+3g==", - "requires": { - "internmap": "1 - 2" - } - }, - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-time": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.0.0.tgz", - "integrity": "sha512-zmV3lRnlaLI08y9IMRXSDshQb5Nj77smnfpnd2LrBa/2K281Jijactokeak14QacHs/kKq0AQ121nidNYlarbQ==", - "requires": { - "d3-array": "2 - 3" - } - }, - "d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "requires": { - "d3-time": "1 - 3" - } - } - } - }, - "d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "requires": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "dependencies": { - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - } - } - }, - "d3-selection": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.4.2.tgz", - "integrity": "sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==" - }, - "d3-shape": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.1.0.tgz", - "integrity": "sha512-tGDh1Muf8kWjEDT/LswZJ8WF85yDZLvVJpYU9Nq+8+yW1Z5enxrmXOhTArlkaElU+CTn0OTVNli+/i+HP45QEQ==", - "requires": { - "d3-path": "1 - 3" - }, - "dependencies": { - "d3-path": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.0.1.tgz", - "integrity": "sha512-gq6gZom9AFZby0YLduxT1qmrp4xpBA1YZr19OI717WIdKE2OM5ETq5qrHLb301IgxhLwcuxvGZVLeeWc/k1I6w==" - } - } - }, - "d3-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz", - "integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==" - }, - "d3-time-format": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz", - "integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==", - "requires": { - "d3-time": "1" - } - }, - "d3-timer": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.10.tgz", - "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" - }, - "d3-transition": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.3.2.tgz", - "integrity": "sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==", - "requires": { - "d3-color": "1", - "d3-dispatch": "1", - "d3-ease": "1", - "d3-interpolate": "1", - "d3-selection": "^1.1.0", - "d3-timer": "1" - } - }, - "d3-voronoi": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.4.tgz", - "integrity": "sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==" - }, - "d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "dependencies": { - "d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" - }, - "d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==" - }, - "d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "requires": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - } - }, - "d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==" - }, - "d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "requires": { - "d3-color": "1 - 3" - } - }, - "d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==" - }, - "d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==" - }, - "d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "requires": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - } - } - } - }, - "dagre": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", - "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", - "requires": { - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - } - }, - "dagre-d3": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/dagre-d3/-/dagre-d3-0.6.4.tgz", - "integrity": "sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==", - "requires": { - "d3": "^5.14", - "dagre": "^0.8.5", - "graphlib": "^2.1.8", - "lodash": "^4.17.15" - }, - "dependencies": { - "d3": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/d3/-/d3-5.16.0.tgz", - "integrity": "sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==", - "requires": { - "d3-array": "1", - "d3-axis": "1", - "d3-brush": "1", - "d3-chord": "1", - "d3-collection": "1", - "d3-color": "1", - "d3-contour": "1", - "d3-dispatch": "1", - "d3-drag": "1", - "d3-dsv": "1", - "d3-ease": "1", - "d3-fetch": "1", - "d3-force": "1", - "d3-format": "1", - "d3-geo": "1", - "d3-hierarchy": "1", - "d3-interpolate": "1", - "d3-path": "1", - "d3-polygon": "1", - "d3-quadtree": "1", - "d3-random": "1", - "d3-scale": "2", - "d3-scale-chromatic": "1", - "d3-selection": "1", - "d3-shape": "1", - "d3-time": "1", - "d3-time-format": "2", - "d3-timer": "1", - "d3-transition": "1", - "d3-voronoi": "1", - "d3-zoom": "1" - } - }, - "d3-axis": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.12.tgz", - "integrity": "sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==" - }, - "d3-brush": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.1.6.tgz", - "integrity": "sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - }, - "d3-chord": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.6.tgz", - "integrity": "sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==", - "requires": { - "d3-array": "1", - "d3-path": "1" - } - }, - "d3-contour": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-1.3.2.tgz", - "integrity": "sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==", - "requires": { - "d3-array": "^1.1.1" - } - }, - "d3-fetch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-1.2.0.tgz", - "integrity": "sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==", - "requires": { - "d3-dsv": "1" - } - }, - "d3-force": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.2.1.tgz", - "integrity": "sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==", - "requires": { - "d3-collection": "1", - "d3-dispatch": "1", - "d3-quadtree": "1", - "d3-timer": "1" - } - }, - "d3-geo": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.12.1.tgz", - "integrity": "sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==", - "requires": { - "d3-array": "1" - } - }, - "d3-hierarchy": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz", - "integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==" - }, - "d3-polygon": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.6.tgz", - "integrity": "sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==" - }, - "d3-random": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.2.tgz", - "integrity": "sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==" - }, - "d3-scale": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz", - "integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==", - "requires": { - "d3-array": "^1.2.0", - "d3-collection": "1", - "d3-format": "1", - "d3-interpolate": "1", - "d3-time": "1", - "d3-time-format": "2" - } - }, - "d3-scale-chromatic": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-1.5.0.tgz", - "integrity": "sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==", - "requires": { - "d3-color": "1", - "d3-interpolate": "1" - } - }, - "d3-shape": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", - "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", - "requires": { - "d3-path": "1" - } - }, - "d3-zoom": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.8.3.tgz", - "integrity": "sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==", - "requires": { - "d3-dispatch": "1", - "d3-drag": "1", - "d3-interpolate": "1", - "d3-selection": "1", - "d3-transition": "1" - } - } - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "requires": { - "execa": "^5.0.0" - }, - "dependencies": { - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" - } - } - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==" - }, - "define-properties": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", - "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", - "requires": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - } - }, - "del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "requires": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - } - }, - "delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "requires": { - "robust-predicates": "^3.0.0" - } - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "requires": { - "repeat-string": "^1.5.4" - } - }, - "detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "requires": { - "address": "^1.0.1", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "requires": { - "address": "^1.0.1", - "debug": "^2.6.0" - } - }, - "dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "requires": { - "path-type": "^4.0.0" - } - }, - "dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "requires": { - "@leichtgewicht/ip-codec": "^2.0.1" - } - }, - "dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "requires": { - "utila": "~0.4" - } - }, - "dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "requires": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - } - }, - "domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" - }, - "domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "requires": { - "domelementtype": "^2.3.0" - } - }, - "dompurify": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.0.tgz", - "integrity": "sha512-Be9tbQMZds4a3C6xTmz68NlMfeONA//4dOavl/1rNw50E+/QO0KVpbcU0PcaW0nsQxurXls9ZocqFxk8R2mWEA==" - }, - "domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "requires": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - } - }, - "dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - }, - "dependencies": { - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - } - } - }, - "duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "electron-to-chromium": { - "version": "1.4.284", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", - "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" - }, - "emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "requires": { - "once": "^1.4.0" - } - }, - "enhanced-resolve": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.11.0.tgz", - "integrity": "sha512-0Gcraf7gAJSQoPg+bTSXNhuzAYtXqLc4C011vb8S3B8XUSEkGYNBk20c68X9291VF4vvsCD8SPkr6Mza+DwU+g==", - "requires": { - "graceful-fs": "^4.2.9", - "tapable": "^2.2.0" - } - }, - "entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==" - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.20.4", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz", - "integrity": "sha512-0UtvRN79eMe2L+UNEF1BwRe364sj/DXhQ/k5FmivgoSdpM90b8Jc0mDzKMGo7QS0BVbOP/bTwBKNnDc9rNzaPA==", - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.5", - "string.prototype.trimstart": "^1.0.5", - "unbox-primitive": "^1.0.2" - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" - }, - "eta": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/eta/-/eta-1.12.3.tgz", - "integrity": "sha512-qHixwbDLtekO/d51Yr4glcaUJCIjGVJyTzuqV4GPlgZo1YpgOKG+avQynErZIYrfM6JIJdtiG2Kox8tbb+DoGg==" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" - }, - "eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "requires": { - "@types/node": "*", - "require-like": ">= 0.1.1" - } - }, - "eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "dependencies": { - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - } - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "requires": { - "is-extendable": "^0.1.0" - } - }, - "fast-clone": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/fast-clone/-/fast-clone-1.5.13.tgz", - "integrity": "sha512-0ez7coyFBQFjZtId+RJqJ+EQs61w9xARfqjqK0AD9vIUkSxWD4HvPt80+5evebZ1tTnv1GYKrPTipx7kOW5ipA==" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "requires": { - "punycode": "^1.3.2" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - } - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "requires": { - "reusify": "^1.0.4" - } - }, - "faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "requires": { - "websocket-driver": ">=0.5.1" - } - }, - "fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "requires": { - "fbjs": "^3.0.0" - } - }, - "fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "requires": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "requires": { - "xml-js": "^1.6.11" - } - }, - "file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "requires": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } - } - }, - "filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==" - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", - "requires": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" - }, - "fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "requires": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "dependencies": { - "cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "requires": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - } - }, - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "requires": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" - } + "node": ">=6" } }, - "forwarded": { + "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } }, - "fraction.js": { + "node_modules/fraction.js": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } }, - "fresh": { + "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } }, - "fs-extra": { + "node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "requires": { + "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" } }, - "fs-monkey": { + "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "function.prototype.name": { + "node_modules/function.prototype.name": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "es-abstract": "^1.19.0", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "functions-have-names": { + "node_modules/functions-have-names": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "gensync": { + "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } }, - "get-intrinsic": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", - "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", - "requires": { + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-own-enumerable-property-symbols": { + "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, - "get-stream": { + "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { + "dependencies": { "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "get-symbol-description": { + "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "github-slugger": { + "node_modules/github-slugger": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" }, - "glob": { + "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { + "dependencies": { "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" } }, - "glob-to-regexp": { + "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" }, - "global-dirs": { + "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "requires": { + "dependencies": { "ini": "2.0.0" }, - "dependencies": { - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-dirs/node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" } }, - "global-modules": { + "node_modules/global-modules": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "requires": { + "dependencies": { "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "global-prefix": { + "node_modules/global-prefix": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "requires": { + "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", "which": "^1.3.1" }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "requires": { - "isexe": "^2.0.0" - } - } + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "globals": { + "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "globby": { + "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "requires": { + "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "got": { + "node_modules/got": { "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "requires": { + "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", "cacheable-request": "^6.0.0", @@ -21662,122 +7916,166 @@ "to-readable-stream": "^1.0.0", "url-parse-lax": "^3.0.0" }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/got/node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - } + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "graceful-fs": { + "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, - "graphlib": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", - "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", - "requires": { - "lodash": "^4.17.15" - } - }, - "gray-matter": { + "node_modules/gray-matter": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "requires": { + "dependencies": { "js-yaml": "^3.13.1", "kind-of": "^6.0.2", "section-matter": "^1.0.0", "strip-bom-string": "^1.0.0" }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/gray-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } + "sprintf-js": "~1.0.2" } }, - "gzip-size": { + "node_modules/gray-matter/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "requires": { + "dependencies": { "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "handle-thing": { + "node_modules/handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-bigints": { + "node_modules/has-bigints": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-flag": { + "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } }, - "has-property-descriptors": { + "node_modules/has-property-descriptors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "requires": { + "dependencies": { "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-tostringtag": { + "node_modules/has-tostringtag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-yarn": { + "node_modules/has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } }, - "hast-to-hyperscript": { + "node_modules/hast-to-hyperscript": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "requires": { + "dependencies": { "@types/unist": "^2.0.3", "comma-separated-tokens": "^1.0.0", "property-information": "^5.3.0", @@ -21785,31 +8083,43 @@ "style-to-object": "^0.3.0", "unist-util-is": "^4.0.0", "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hast-util-from-parse5": { + "node_modules/hast-util-from-parse5": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "requires": { + "dependencies": { "@types/parse5": "^5.0.0", "hastscript": "^6.0.0", "property-information": "^5.0.0", "vfile": "^4.0.0", "vfile-location": "^3.2.0", "web-namespaces": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hast-util-parse-selector": { + "node_modules/hast-util-parse-selector": { "version": "2.2.5", "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==" + "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "hast-util-raw": { + "node_modules/hast-util-raw": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "requires": { + "dependencies": { "@types/hast": "^2.0.0", "hast-util-from-parse5": "^6.0.0", "hast-util-to-parse5": "^6.0.0", @@ -21821,48 +8131,66 @@ "xtend": "^4.0.0", "zwitch": "^1.0.0" }, - "dependencies": { - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hast-util-to-parse5": { + "node_modules/hast-util-raw/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, + "node_modules/hast-util-to-parse5": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "requires": { + "dependencies": { "hast-to-hyperscript": "^9.0.0", "property-information": "^5.0.0", "web-namespaces": "^1.0.0", "xtend": "^4.0.0", "zwitch": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "hastscript": { + "node_modules/hastscript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "requires": { + "dependencies": { "@types/hast": "^2.0.0", "comma-separated-tokens": "^1.0.0", "hast-util-parse-selector": "^2.0.0", "property-information": "^5.0.0", "space-separated-tokens": "^1.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "he": { + "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==" + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "bin": { + "he": "bin/he" + } }, - "history": { + "node_modules/heap": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", + "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" + }, + "node_modules/history": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "requires": { + "dependencies": { "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", "resolve-pathname": "^3.0.0", @@ -21871,69 +8199,67 @@ "value-equal": "^1.0.1" } }, - "hoist-non-react-statics": { + "node_modules/hoist-non-react-statics": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "requires": { + "dependencies": { "react-is": "^16.7.0" } }, - "hpack.js": { + "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "requires": { + "dependencies": { "inherits": "^2.0.1", "obuf": "^1.0.0", "readable-stream": "^2.0.1", "wbuf": "^1.1.0" - }, + } + }, + "node_modules/hpack.js/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "html-entities": { + "node_modules/html-entities": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" }, - "html-minifier-terser": { + "node_modules/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "requires": { + "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", "commander": "^8.3.0", @@ -21942,767 +8268,1178 @@ "relateurl": "^0.2.7", "terser": "^5.10.0" }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==" - } + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-minifier-terser/node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "engines": { + "node": ">= 12" } }, - "html-tags": { + "node_modules/html-tags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==" + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "html-void-elements": { + "node_modules/html-void-elements": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==" + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "html-webpack-plugin": { + "node_modules/html-webpack-plugin": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "requires": { + "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", "lodash": "^4.17.21", "pretty-error": "^4.0.0", "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "webpack": "^5.20.0" } }, - "htmlparser2": { + "node_modules/htmlparser2": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "requires": { + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "entities": "^4.3.0" } }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, - "http-deceiver": { + "node_modules/http-deceiver": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, - "http-errors": { + "node_modules/http-errors": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { + "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" } }, - "http-parser-js": { + "node_modules/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" }, - "http-proxy": { + "node_modules/http-proxy": { "version": "1.18.1", "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "requires": { + "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" } }, - "http-proxy-middleware": { + "node_modules/http-proxy-middleware": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "requires": { + "dependencies": { "@types/http-proxy": "^1.17.8", "http-proxy": "^1.18.1", "is-glob": "^4.0.1", "is-plain-obj": "^3.0.0", "micromatch": "^4.0.2" }, - "dependencies": { - "is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==" + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true } } }, - "human-signals": { + "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/human-signals": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "icss-utils": { + "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "ignore": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "engines": { + "node": ">= 4" + } }, - "image-size": { + "node_modules/image-size": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "requires": { + "dependencies": { "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=14.0.0" } }, - "immer": { - "version": "9.0.16", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.16.tgz", - "integrity": "sha512-qenGE7CstVm1NrHQbMh8YaSzTZTFNP3zPqr3YU0S0UY441j4bJTg4A2Hh5KAhwgaiU6ZZ1Ar6y/2f4TblnMReQ==" + "node_modules/immer": { + "version": "9.0.19", + "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", + "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "import-lazy": { + "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==" + "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", + "engines": { + "node": ">=4" + } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } }, - "indent-string": { + "node_modules/indent-string": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "engines": { + "node": ">=8" + } }, - "infima": { + "node_modules/infima": { "version": "0.2.0-alpha.42", "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", - "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==" + "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", + "engines": { + "node": ">=12" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { + "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, - "inline-style-parser": { + "node_modules/inline-style-parser": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "requires": { - "get-intrinsic": "^1.1.0", + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dependencies": { + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" } }, - "internmap": { + "node_modules/internmap": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==" + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "engines": { + "node": ">=12" + } }, - "interpret": { + "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==" + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "engines": { + "node": ">= 0.10" + } }, - "invariant": { + "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "requires": { + "dependencies": { "loose-envify": "^1.0.0" } }, - "ipaddr.js": { + "node_modules/ipaddr.js": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==" + "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", + "engines": { + "node": ">= 10" + } }, - "is-alphabetical": { + "node_modules/is-alphabetical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==" + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-alphanumerical": { + "node_modules/is-alphanumerical": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "requires": { + "dependencies": { "is-alphabetical": "^1.0.0", "is-decimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" }, - "is-bigint": { + "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "requires": { + "dependencies": { "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-boolean-object": { + "node_modules/is-boolean-object": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-buffer": { + "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==" + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "engines": { + "node": ">=4" + } }, - "is-callable": { + "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-ci": { + "node_modules/is-ci": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { + "dependencies": { "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" } }, - "is-core-module": { + "node_modules/is-ci/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/is-core-module": { "version": "2.11.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-date-object": { + "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-decimal": { + "node_modules/is-decimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==" + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-docker": { + "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==" + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-extendable": { + "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-hexadecimal": { + "node_modules/is-hexadecimal": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==" + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-installed-globally": { + "node_modules/is-installed-globally": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "requires": { + "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "is-negative-zero": { + "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "is-npm": { + "node_modules/is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } }, - "is-number-object": { + "node_modules/is-number-object": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-obj": { + "node_modules/is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==" + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "engines": { + "node": ">=0.10.0" + } }, - "is-path-cwd": { + "node_modules/is-path-cwd": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==" + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "engines": { + "node": ">=6" + } }, - "is-path-inside": { + "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } }, - "is-plain-obj": { + "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==" + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "engines": { + "node": ">=8" + } }, - "is-plain-object": { + "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-regex": { + "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-regexp": { + "node_modules/is-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==" + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "engines": { + "node": ">=0.10.0" + } }, - "is-root": { + "node_modules/is-root": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==" + "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", + "engines": { + "node": ">=6" + } }, - "is-shared-array-buffer": { + "node_modules/is-shared-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-stream": { + "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-string": { + "node_modules/is-string": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "requires": { + "dependencies": { "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-symbol": { + "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "requires": { + "dependencies": { "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-typedarray": { + "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" }, - "is-weakref": { + "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-whitespace-character": { + "node_modules/is-whitespace-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==" + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-word-character": { + "node_modules/is-word-character": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==" + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "is-wsl": { + "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "requires": { + "dependencies": { "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-yarn-global": { + "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, - "isarray": { + "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, - "isobject": { + "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "jest-util": { - "version": "29.3.1", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", - "integrity": "sha512-7YOVZaiX7RJLv76ZfHt4nbNEzzTRiMW/IiOG7ZOKmTXmoGBxUDefgMAxQubu6WPVqP5zSzAdZG0FfLcC7HOIFQ==", - "requires": { - "@jest/types": "^29.3.1", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jest-util": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", + "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", + "dependencies": { + "@jest/types": "^29.4.3", "@types/node": "*", "chalk": "^4.0.0", "ci-info": "^3.2.0", "graceful-fs": "^4.2.9", "picomatch": "^2.2.3" }, - "dependencies": { - "ci-info": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.6.2.tgz", - "integrity": "sha512-lVZdhvbEudris15CLytp2u6Y0p5EKfztae9Fqa189MfNmln9F33XuH69v5fvNfiRN5/0eAUz2yJL3mo+nhaRKg==" - } + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "requires": { + "node_modules/jest-worker": { + "version": "29.4.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", + "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", + "dependencies": { "@types/node": "*", + "jest-util": "^29.4.3", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "joi": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.7.0.tgz", - "integrity": "sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==", - "requires": { + "node_modules/joi": { + "version": "17.8.3", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", + "integrity": "sha512-q5Fn6Tj/jR8PfrLrx4fpGH4v9qM6o+vDUfD4/3vxxyg34OmKcNqYZ1qn2mpLza96S8tL0p0rIw2gOZX+/cTg9w==", + "dependencies": { "@hapi/hoek": "^9.0.0", "@hapi/topo": "^5.0.0", "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", + "@sideway/formula": "^3.0.1", "@sideway/pinpoint": "^2.0.0" } }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "js-yaml": { + "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { + "dependencies": { "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsesc": { + "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, - "json-buffer": { + "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" }, - "json-parse-even-better-errors": { + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, - "json5": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", - "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } }, - "jsonfile": { + "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "requires": { - "graceful-fs": "^4.1.6", + "dependencies": { "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "keyv": { + "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { + "dependencies": { "json-buffer": "3.0.0" } }, - "khroma": { + "node_modules/khroma": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" }, - "kind-of": { + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } }, - "kleur": { + "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "engines": { + "node": ">=6" + } }, - "klona": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", - "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "engines": { + "node": ">= 8" + } }, - "latest-version": { + "node_modules/latest-version": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { + "dependencies": { "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" } }, - "leven": { + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + }, + "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } }, - "lilconfig": { + "node_modules/lilconfig": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } }, - "lines-and-columns": { + "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" }, - "loader-runner": { + "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==" + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "engines": { + "node": ">=6.11.5" + } }, - "loader-utils": { + "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "requires": { + "dependencies": { "big.js": "^5.2.2", "emojis-list": "^3.0.0", "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" } }, - "locate-path": { + "node_modules/locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "requires": { + "dependencies": { "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.curry": { + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" }, - "lodash.debounce": { + "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" }, - "lodash.flow": { + "node_modules/lodash.flow": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" }, - "lodash.memoize": { + "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" }, - "lodash.uniq": { + "node_modules/lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" }, - "loose-envify": { + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lower-case": { + "node_modules/lower-case": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { + "dependencies": { "tslib": "^2.0.3" } }, - "lowercase-keys": { + "node_modules/lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" } }, - "make-dir": { + "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { + "dependencies": { "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "markdown-escapes": { + "node_modules/markdown-escapes": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==" + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "mdast-squeeze-paragraphs": { + "node_modules/mdast-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "requires": { + "dependencies": { "unist-util-remove": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-definitions": { + "node_modules/mdast-util-definitions": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "requires": { + "dependencies": { "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-to-hast": { + "node_modules/mdast-util-to-hast": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "requires": { + "dependencies": { "@types/mdast": "^3.0.0", "@types/unist": "^2.0.0", "mdast-util-definitions": "^4.0.0", @@ -22711,968 +9448,1624 @@ "unist-util-generated": "^1.0.0", "unist-util-position": "^3.0.0", "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "mdast-util-to-string": { + "node_modules/mdast-util-to-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==" + "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" }, - "mdurl": { + "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" }, - "mdx-mermaid": { + "node_modules/mdx-mermaid": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz", "integrity": "sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w==", - "requires": {} + "peerDependencies": { + "mermaid": ">=8.11.0", + "react": "^16.8.4 || ^17.0.0 || ^18.0.0", + "unist-util-visit": "^2.0.0" + } }, - "media-typer": { + "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } }, - "memfs": { - "version": "3.4.12", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.12.tgz", - "integrity": "sha512-BcjuQn6vfqP+k100e0E9m61Hyqa//Brp+I3f0OBmN0ATHlFA8vx3Lt8z57R3u2bPqe3WGDBC+nF72fTH7isyEw==", - "requires": { + "node_modules/memfs": { + "version": "3.4.13", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", + "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", + "dependencies": { "fs-monkey": "^1.0.3" + }, + "engines": { + "node": ">= 4.0.0" } }, - "merge-descriptors": { + "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, - "merge-stream": { + "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "merge2": { + "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } }, - "mermaid": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.2.2.tgz", - "integrity": "sha512-6s7eKMqFJGS+0MYjmx8f6ZigqKBJVoSx5ql2gw6a4Aa+WJ49QiEJg7gPwywaBg3DZMs79UP7trESp4+jmaQccw==", - "requires": { + "node_modules/mermaid": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.0.tgz", + "integrity": "sha512-4PWbOND7CNRbjHrdG3WUUGBreKAFVnMhdlPjttuUkeHbCQmAHkwzSh5dGwbrKmXGRaR4uTvfFVYzUcg++h0DkA==", + "dependencies": { "@braintree/sanitize-url": "^6.0.0", + "cytoscape": "^3.23.0", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.1.0", "d3": "^7.0.0", - "dagre": "^0.8.5", - "dagre-d3": "^0.6.4", - "dompurify": "2.4.0", - "fast-clone": "^1.5.13", - "graphlib": "^2.1.8", + "dagre-d3-es": "7.0.8", + "dompurify": "2.4.3", + "elkjs": "^0.8.2", "khroma": "^2.0.0", - "lodash": "^4.17.21", - "moment-mini": "^2.24.0", + "lodash-es": "^4.17.21", + "moment": "^2.29.4", "non-layered-tidy-tree-layout": "^2.0.2", "stylis": "^4.1.2", + "ts-dedent": "^2.2.0", "uuid": "^9.0.0" } }, - "methods": { + "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==" + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { + "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "mime": { + "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + "node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" + "node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { + "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } }, - "mimic-response": { + "node_modules/mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } }, - "mini-css-extract-plugin": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz", - "integrity": "sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw==", - "requires": { + "node_modules/mini-css-extract-plugin": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", + "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", + "dependencies": { "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "minimalistic-assert": { + "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" }, - "minimatch": { + "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", - "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "mkdirp": { + "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { + "dependencies": { "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "moment-mini": { + "node_modules/moment": { "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment-mini/-/moment-mini-2.29.4.tgz", - "integrity": "sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==" + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } }, - "mri": { + "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "engines": { + "node": ">=4" + } }, - "mrmime": { + "node_modules/mrmime": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "engines": { + "node": ">=10" + } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, - "multicast-dns": { + "node_modules/multicast-dns": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "requires": { + "dependencies": { "dns-packet": "^5.2.2", "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" } }, - "multimatch": { + "node_modules/multimatch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "requires": { + "dependencies": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" } }, - "nanoid": { + "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "negotiator": { + "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, - "no-case": { + "node_modules/no-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { + "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" } }, - "node-emoji": { + "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "requires": { + "dependencies": { "lodash": "^4.17.21" } }, - "node-fetch": { + "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node-forge": { + "node_modules/node-forge": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==" + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } }, - "node-releases": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", - "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + "node_modules/node-releases": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" }, - "non-layered-tidy-tree-layout": { + "node_modules/non-layered-tidy-tree-layout": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" }, - "normalize-path": { + "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } }, - "normalize-range": { + "node_modules/normalize-range": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } }, - "normalize-url": { + "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "npm-run-path": { + "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { + "dependencies": { "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "nprogress": { + "node_modules/nprogress": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" }, - "nth-check": { + "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "requires": { + "dependencies": { "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } }, - "object-inspect": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.getownpropertydescriptors": { + "node_modules/object.getownpropertydescriptors": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "requires": { + "dependencies": { "array.prototype.reduce": "^1.0.5", "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.values": { + "node_modules/object.values": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "obuf": { + "node_modules/obuf": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" }, - "on-finished": { + "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { + "dependencies": { "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "on-headers": { + "node_modules/on-headers": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { + "dependencies": { "wrappy": "1" } }, - "onetime": { + "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { + "dependencies": { "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "open": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", - "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", - "requires": { + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "opener": { + "node_modules/opener": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==" + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "bin": { + "opener": "bin/opener-bin.js" + } }, - "p-cancelable": { + "node_modules/p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } }, - "p-limit": { + "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { + "dependencies": { "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "requires": { + "dependencies": { "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "p-map": { + "node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "requires": { + "dependencies": { "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-retry": { + "node_modules/p-retry": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "requires": { + "dependencies": { "@types/retry": "0.12.0", "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" } }, - "p-try": { + "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } }, - "package-json": { + "node_modules/package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "requires": { + "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", "registry-url": "^5.0.0", "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" } }, - "param-case": { + "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "requires": { + "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-entities": { + "node_modules/parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "requires": { + "dependencies": { "character-entities": "^1.0.0", "character-entities-legacy": "^1.0.0", "character-reference-invalid": "^1.0.0", "is-alphanumerical": "^1.0.0", "is-decimal": "^1.0.0", "is-hexadecimal": "^1.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "parse-json": { + "node_modules/parse-json": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", "json-parse-even-better-errors": "^2.3.0", "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "parse-numeric-range": { + "node_modules/parse-numeric-range": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" }, - "parse5": { + "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "requires": { + "dependencies": { "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "parse5-htmlparser2-tree-adapter": { + "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "requires": { + "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" } }, - "parseurl": { + "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } }, - "pascal-case": { + "node_modules/pascal-case": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { + "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" } }, - "path-exists": { + "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } }, - "path-is-inside": { + "node_modules/path-is-inside": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, - "path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + "node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dependencies": { + "isarray": "0.0.1" + } }, - "path-type": { + "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "requires": { + "dependencies": { "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "pkg-up": { + "node_modules/pkg-up": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "requires": { + "dependencies": { "find-up": "^3.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - } + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" } }, - "postcss": { - "version": "8.4.19", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.19.tgz", - "integrity": "sha512-h+pbPsyhlYj6N2ozBmHhHrs9DzGmbaarbLvWipMRO7RLS+v4onj26MPFXA5OBYFxyqYhUJK456SwDcY9H2/zsA==", - "requires": { + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { "nanoid": "^3.3.4", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" } }, - "postcss-calc": { + "node_modules/postcss-calc": { "version": "8.2.4", "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.9", "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" } }, - "postcss-colormin": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.0.tgz", - "integrity": "sha512-WdDO4gOFG2Z8n4P8TWBpshnL3JpmNmJwdnfP2gbk2qBA8PWwOYcmjmI/t3CmMeL72a7Hkd+x/Mg9O2/0rD54Pg==", - "requires": { - "browserslist": "^4.16.6", + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dependencies": { + "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "colord": "^2.9.1", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-convert-values": { + "node_modules/postcss-convert-values": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "requires": { + "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-discard-comments": { + "node_modules/postcss-discard-comments": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-duplicates": { + "node_modules/postcss-discard-duplicates": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-empty": { + "node_modules/postcss-discard-empty": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-overridden": { + "node_modules/postcss-discard-overridden": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-discard-unused": { + "node_modules/postcss-discard-unused": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-loader": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", - "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", - "requires": { + "node_modules/postcss-loader": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", + "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", + "dependencies": { "cosmiconfig": "^7.0.0", "klona": "^2.0.5", - "semver": "^7.3.7" + "semver": "^7.3.8" }, - "dependencies": { - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - } + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" } }, - "postcss-merge-idents": { + "node_modules/postcss-merge-idents": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "requires": { + "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-merge-longhand": { + "node_modules/postcss-merge-longhand": { "version": "5.1.7", "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0", "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-merge-rules": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.3.tgz", - "integrity": "sha512-LbLd7uFC00vpOuMvyZop8+vvhnfRGpp2S+IMQKeuOZZapPRY4SMq5ErjQeHbHsjCUgJkRNrlU+LmxsKIqPKQlA==", - "requires": { + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0", "cssnano-utils": "^3.1.0", "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-font-values": { + "node_modules/postcss-minify-font-values": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-gradients": { + "node_modules/postcss-minify-gradients": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "requires": { + "dependencies": { "colord": "^2.9.1", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-params": { + "node_modules/postcss-minify-params": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "requires": { + "dependencies": { "browserslist": "^4.21.4", "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-minify-selectors": { + "node_modules/postcss-minify-selectors": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-modules-extract-imports": { + "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "postcss-modules-local-by-default": { + "node_modules/postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "requires": { + "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-modules-scope": { + "node_modules/postcss-modules-scope": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-modules-values": { + "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "requires": { + "dependencies": { "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-normalize-charset": { + "node_modules/postcss-normalize-charset": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "postcss-normalize-display-values": { + "node_modules/postcss-normalize-display-values": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-positions": { + "node_modules/postcss-normalize-positions": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-repeat-style": { + "node_modules/postcss-normalize-repeat-style": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-string": { + "node_modules/postcss-normalize-string": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-timing-functions": { + "node_modules/postcss-normalize-timing-functions": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-unicode": { + "node_modules/postcss-normalize-unicode": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "requires": { + "dependencies": { "browserslist": "^4.21.4", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-url": { + "node_modules/postcss-normalize-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "requires": { + "dependencies": { "normalize-url": "^6.0.1", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-normalize-whitespace": { + "node_modules/postcss-normalize-whitespace": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-ordered-values": { + "node_modules/postcss-ordered-values": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "requires": { + "dependencies": { "cssnano-utils": "^3.1.0", "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-reduce-idents": { + "node_modules/postcss-reduce-idents": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-reduce-initial": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.1.tgz", - "integrity": "sha512-//jeDqWcHPuXGZLoolFrUXBDyuEGbr9S2rMo19bkTIjBQ4PqkaO+oI8wua5BOUxpfi97i3PCoInsiFIEBfkm9w==", - "requires": { + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dependencies": { "browserslist": "^4.21.4", "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-reduce-transforms": { + "node_modules/postcss-reduce-transforms": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-selector-parser": { + "node_modules/postcss-selector-parser": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "requires": { + "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "postcss-sort-media-queries": { + "node_modules/postcss-sort-media-queries": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", - "requires": { + "dependencies": { "sort-css-media-queries": "2.1.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.4.16" } }, - "postcss-svgo": { + "node_modules/postcss-svgo": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "requires": { + "dependencies": { "postcss-value-parser": "^4.2.0", "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/postcss-svgo/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/postcss-svgo/node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/postcss-svgo/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/postcss-svgo/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/postcss-svgo/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/postcss-svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/postcss-svgo/node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" + }, + "node_modules/postcss-svgo/node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" } }, - "postcss-unique-selectors": { + "node_modules/postcss-unique-selectors": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "postcss-value-parser": { + "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" }, - "postcss-zindex": { + "node_modules/postcss-zindex": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "requires": {} + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } }, - "prepend-http": { + "node_modules/prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" + "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", + "engines": { + "node": ">=4" + } }, - "prettier": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.0.tgz", - "integrity": "sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA==" + "node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } }, - "pretty-error": { + "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "requires": { + "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" } }, - "pretty-quick": { + "node_modules/pretty-quick": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz", "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", - "requires": { + "dependencies": { "chalk": "^3.0.0", "execa": "^4.0.0", "find-up": "^4.1.0", @@ -23680,217 +11073,310 @@ "mri": "^1.1.5", "multimatch": "^4.0.0" }, + "bin": { + "pretty-quick": "bin/pretty-quick.js" + }, + "engines": { + "node": ">=10.13" + }, + "peerDependencies": { + "prettier": ">=2.0.0" + } + }, + "node_modules/pretty-quick/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" } }, - "pretty-time": { + "node_modules/pretty-time": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==" + "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", + "engines": { + "node": ">=4" + } }, - "prism-react-renderer": { + "node_modules/prism-react-renderer": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "requires": {} + "peerDependencies": { + "react": ">=0.14.9" + } }, - "prismjs": { + "node_modules/prismjs": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==" + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "engines": { + "node": ">=6" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "promise": { + "node_modules/promise": { "version": "7.3.1", "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "requires": { + "dependencies": { "asap": "~2.0.3" } }, - "prompts": { + "node_modules/prompts": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "requires": { + "dependencies": { "kleur": "^3.0.3", "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" } }, - "prop-types": { + "node_modules/prop-types": { "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "requires": { + "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", "react-is": "^16.13.1" } }, - "property-information": { + "node_modules/property-information": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "requires": { + "dependencies": { "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "proxy-addr": { + "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { + "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" }, - "dependencies": { - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - } + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" } }, - "pump": { + "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { + "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" }, - "pupa": { + "node_modules/pupa": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { + "dependencies": { "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "pure-color": { + "node_modules/pure-color": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" }, - "q": { + "node_modules/q": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } }, - "qs": { + "node_modules/qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "requires": { + "dependencies": { "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "queue": { + "node_modules/queue": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "requires": { + "dependencies": { "inherits": "~2.0.3" } }, - "queue-microtask": { + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + "node_modules/range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", + "engines": { + "node": ">= 0.6" + } }, - "raw-body": { + "node_modules/raw-body": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { + "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - } + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "rc": { + "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "requires": { + "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, - "dependencies": { - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==" - } + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "engines": { + "node": ">=0.10.0" } }, - "react": { + "node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "react-base16-styling": { + "node_modules/react-base16-styling": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "requires": { + "dependencies": { "base16": "^1.0.0", "lodash.curry": "^4.0.1", "lodash.flow": "^3.3.0", "pure-color": "^1.2.0" } }, - "react-dev-utils": { + "node_modules/react-countup": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/react-countup/-/react-countup-6.4.1.tgz", + "integrity": "sha512-FxQ7qaNnnbA+Px9RebOZY4Tbawa1bhgpVPlUqRemZb90mh3f3OqyHVgr1SZqnJgaRxR3uEYqgkszgkDgFVCeEw==", + "dependencies": { + "@rollup/plugin-babel": "^6.0.2", + "countup.js": "^2.4.1" + }, + "peerDependencies": { + "react": ">= 16.3.0" + } + }, + "node_modules/react-dev-utils": { "version": "12.0.1", "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "requires": { + "dependencies": { "@babel/code-frame": "^7.16.0", "address": "^1.1.2", "browserslist": "^4.18.1", @@ -23916,122 +11402,172 @@ "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, + "engines": { + "node": ">=14" + } + }, + "node_modules/react-dev-utils/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==" - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/react-dev-utils/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/react-dev-utils/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "react-dom": { + "node_modules/react-dom": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "react-error-overlay": { + "node_modules/react-error-overlay": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" }, - "react-fast-compare": { + "node_modules/react-fast-compare": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" }, - "react-helmet-async": { + "node_modules/react-helmet-async": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "requires": { + "dependencies": { "@babel/runtime": "^7.12.5", "invariant": "^2.2.4", "prop-types": "^15.7.2", "react-fast-compare": "^3.2.0", "shallowequal": "^1.1.0" + }, + "peerDependencies": { + "react": "^16.6.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" } }, - "react-is": { + "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" }, - "react-json-view": { + "node_modules/react-json-view": { "version": "1.21.3", "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "requires": { + "dependencies": { "flux": "^4.0.1", "react-base16-styling": "^0.6.0", "react-lifecycles-compat": "^3.0.4", "react-textarea-autosize": "^8.3.2" + }, + "peerDependencies": { + "react": "^17.0.0 || ^16.3.0 || ^15.5.4", + "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" } }, - "react-lifecycles-compat": { + "node_modules/react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, - "react-loadable": { - "version": "npm:@docusaurus/react-loadable@5.5.2", + "node_modules/react-loadable": { + "name": "@docusaurus/react-loadable", + "version": "5.5.2", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "requires": { + "dependencies": { "@types/react": "*", "prop-types": "^15.6.2" + }, + "peerDependencies": { + "react": "*" } }, - "react-loadable-ssr-addon-v5-slorber": { + "node_modules/react-loadable-ssr-addon-v5-slorber": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "requires": { + "dependencies": { "@babel/runtime": "^7.10.3" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "react-loadable": "*", + "webpack": ">=4.41.1 || 5.x" } }, - "react-router": { + "node_modules/react-router": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "requires": { + "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "hoist-non-react-statics": "^3.1.0", @@ -24042,30 +11578,27 @@ "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" }, - "dependencies": { - "path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "requires": { - "isarray": "0.0.1" - } - } + "peerDependencies": { + "react": ">=15" } }, - "react-router-config": { + "node_modules/react-router-config": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "requires": { + "dependencies": { "@babel/runtime": "^7.1.2" + }, + "peerDependencies": { + "react": ">=15", + "react-router": ">=5" } }, - "react-router-dom": { + "node_modules/react-router-dom": { "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "requires": { + "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", "loose-envify": "^1.3.1", @@ -24073,167 +11606,212 @@ "react-router": "5.3.4", "tiny-invariant": "^1.0.2", "tiny-warning": "^1.0.0" + }, + "peerDependencies": { + "react": ">=15" } }, - "react-textarea-autosize": { + "node_modules/react-textarea-autosize": { "version": "8.4.0", "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", - "requires": { + "dependencies": { "@babel/runtime": "^7.10.2", "use-composed-ref": "^1.3.0", "use-latest": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { + "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "readdirp": { + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "reading-time": { + "node_modules/reading-time": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" }, - "rechoir": { + "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "requires": { + "dependencies": { "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "recursive-readdir": { + "node_modules/recursive-readdir": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "requires": { + "dependencies": { "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=6.0.0" } }, - "regenerate": { + "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" }, - "regenerate-unicode-properties": { + "node_modules/regenerate-unicode-properties": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "requires": { + "dependencies": { "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" } }, - "regenerator-runtime": { + "node_modules/regenerator-runtime": { "version": "0.13.11", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" }, - "regenerator-transform": { + "node_modules/regenerator-transform": { "version": "0.15.1", "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "requires": { + "dependencies": { "@babel/runtime": "^7.8.4" } }, - "regexp.prototype.flags": { + "node_modules/regexp.prototype.flags": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.3", "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "regexpu-core": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.2.2.tgz", - "integrity": "sha512-T0+1Zp2wjF/juXMrMxHxidqGYn8U4R+zleSJhX9tQ1PUsS8a9UtYfbsF9LdiVgNX3kiX8RNaKM42nfSgvFJjmw==", - "requires": { + "node_modules/regexpu-core": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", + "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", + "dependencies": { + "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", "regenerate-unicode-properties": "^10.1.0", - "regjsgen": "^0.7.1", "regjsparser": "^0.9.1", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" } }, - "registry-auth-token": { + "node_modules/registry-auth-token": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "requires": { + "dependencies": { "rc": "1.2.8" + }, + "engines": { + "node": ">=6.0.0" } }, - "registry-url": { + "node_modules/registry-url": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "requires": { + "dependencies": { "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" } }, - "regjsgen": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.7.1.tgz", - "integrity": "sha512-RAt+8H2ZEzHeYWxZ3H2z6tF18zyyOnlcdaafLrm21Bguj7uZy6ULibiAFdXEtKQY4Sy7wDTwDiOazasMLc4KPA==" - }, - "regjsparser": { + "node_modules/regjsparser": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "requires": { + "dependencies": { "jsesc": "~0.5.0" }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==" - } + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "bin": { + "jsesc": "bin/jsesc" } }, - "relateurl": { + "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==" + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "engines": { + "node": ">= 0.10" + } }, - "remark-emoji": { + "node_modules/remark-emoji": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "requires": { + "dependencies": { "emoticon": "^3.2.0", "node-emoji": "^1.10.0", "unist-util-visit": "^2.0.3" } }, - "remark-footnotes": { + "node_modules/remark-footnotes": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==" + "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "remark-mdx": { + "node_modules/remark-mdx": { "version": "1.6.22", "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "requires": { + "dependencies": { "@babel/core": "7.12.9", "@babel/helper-plugin-utils": "7.10.4", "@babel/plugin-proposal-object-rest-spread": "7.12.1", @@ -24243,82 +11821,108 @@ "remark-parse": "8.0.3", "unified": "9.2.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-mdx/node_modules/@babel/core": { + "version": "7.12.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", + "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", "dependencies": { - "@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "dependencies": { - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - } - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } + "@babel/code-frame": "^7.10.4", + "@babel/generator": "^7.12.5", + "@babel/helper-module-transforms": "^7.12.1", + "@babel/helpers": "^7.12.5", + "@babel/parser": "^7.12.7", + "@babel/template": "^7.12.7", + "@babel/traverse": "^7.12.9", + "@babel/types": "^7.12.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.19", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", + "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", + "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.12.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { + "version": "7.12.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", + "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/remark-mdx/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/remark-mdx/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/remark-mdx/node_modules/unified": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", + "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", + "dependencies": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-buffer": "^2.0.0", + "is-plain-obj": "^2.0.0", + "trough": "^1.0.0", + "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "remark-parse": { + "node_modules/remark-parse": { "version": "8.0.3", "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "requires": { + "dependencies": { "ccount": "^1.0.0", "collapse-white-space": "^1.0.2", "is-alphabetical": "^1.0.0", @@ -24335,336 +11939,480 @@ "unist-util-remove-position": "^2.0.0", "vfile-location": "^3.0.0", "xtend": "^4.0.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "remark-squeeze-paragraphs": { + "node_modules/remark-squeeze-paragraphs": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "requires": { + "dependencies": { "mdast-squeeze-paragraphs": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "renderkid": { + "node_modules/renderkid": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "requires": { + "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", "htmlparser2": "^6.1.0", "lodash": "^4.17.21", "strip-ansi": "^6.0.1" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/renderkid/node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" } + ], + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "repeat-string": { + "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } }, - "require-like": { + "node_modules/require-like": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==" + "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", + "engines": { + "node": "*" + } }, - "requires-port": { + "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" }, - "resolve": { + "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { + "dependencies": { "is-core-module": "^2.9.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } }, - "resolve-pathname": { + "node_modules/resolve-pathname": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" }, - "responselike": { + "node_modules/responselike": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "requires": { + "dependencies": { "lowercase-keys": "^1.0.0" } }, - "retry": { + "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } }, - "reusify": { + "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "robust-predicates": { + "node_modules/robust-predicates": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" }, - "rtl-detect": { + "node_modules/rtl-detect": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" }, - "rtlcss": { + "node_modules/rtlcss": { "version": "3.5.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "requires": { + "dependencies": { "find-up": "^5.0.0", "picocolors": "^1.0.0", "postcss": "^8.3.11", "strip-json-comments": "^3.1.1" }, + "bin": { + "rtlcss": "bin/rtlcss.js" + } + }, + "node_modules/rtlcss/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dependencies": { - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "requires": { - "p-limit": "^3.0.2" - } - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rtlcss/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "run-parallel": { + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "rw": { + "node_modules/rw": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" }, - "rxjs": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.7.tgz", - "integrity": "sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA==", - "requires": { + "node_modules/rxjs": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", + "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", + "dependencies": { "tslib": "^2.1.0" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "safe-regex-test": { + "node_modules/safe-regex-test": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.1.3", "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, - "sax": { + "node_modules/sax": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "scheduler": { + "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", "dependencies": { - "ajv": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.2.tgz", - "integrity": "sha512-E4bfmKAhGiSTvMfL1Myyycaub+cUEU2/IvpylXkUu7CHBkBj1f/ikdzbD7YQ6FKUbixDxeYvB/xY4fvyroDlQg==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "requires": { - "ajv": "^8.0.0" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - } + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "section-matter": { + "node_modules/section-matter": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "requires": { + "dependencies": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=4" } }, - "select-hose": { + "node_modules/select-hose": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" }, - "selfsigned": { + "node_modules/selfsigned": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "requires": { + "dependencies": { "node-forge": "^1" + }, + "engines": { + "node": ">=10" } }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } }, - "semver-diff": { + "node_modules/semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "requires": { + "dependencies": { "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "send": { + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { + "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", @@ -24679,27 +12427,49 @@ "range-parser": "~1.2.1", "statuses": "2.0.1" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } + "ms": "2.0.0" } }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "requires": { + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/send/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dependencies": { "randombytes": "^2.1.0" } }, - "serve-handler": { + "node_modules/serve-handler": { "version": "6.1.5", "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "requires": { + "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "fast-url-parser": "1.1.3", @@ -24708,33 +12478,18 @@ "path-is-inside": "1.0.2", "path-to-regexp": "2.2.1", "range-parser": "1.2.0" - }, - "dependencies": { - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "requires": { - "mime-db": "~1.33.0" - } - }, - "range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==" - } } }, - "serve-index": { + "node_modules/serve-handler/node_modules/path-to-regexp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", + "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" + }, + "node_modules/serve-index": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "requires": { + "dependencies": { "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", @@ -24743,716 +12498,1233 @@ "mime-types": "~2.1.17", "parseurl": "~1.3.2" }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" - }, - "http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==" - } + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "engines": { + "node": ">= 0.6" } }, - "serve-static": { + "node_modules/serve-static": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { + "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "parseurl": "~1.3.3", "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "setimmediate": { + "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" }, - "setprototypeof": { + "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, - "shallow-clone": { + "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { + "dependencies": { "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "shallowequal": { + "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } }, - "shell-quote": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.4.tgz", - "integrity": "sha512-8o/QEhSSRb1a5i7TFR0iM4G16Z0vYB2OQVs4G3aAFXjn3T6yEx8AZxy1PgDF7I00LZHYA3WxaSYIf5e5sAX8Rw==" + "node_modules/shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "shelljs": { + "node_modules/shelljs": { "version": "0.8.5", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "requires": { + "dependencies": { "glob": "^7.0.0", "interpret": "^1.0.0", "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" } }, - "side-channel": { + "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { + "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, - "sirv": { + "node_modules/sirv": { "version": "1.0.19", "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "requires": { + "dependencies": { "@polka/url": "^1.0.0-next.20", "mrmime": "^1.0.0", "totalist": "^1.0.0" + }, + "engines": { + "node": ">= 10" } }, - "sisteransi": { + "node_modules/sisteransi": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" }, - "sitemap": { + "node_modules/sitemap": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "requires": { + "dependencies": { "@types/node": "^17.0.5", "@types/sax": "^1.2.1", "arg": "^5.0.0", "sax": "^1.2.4" }, - "dependencies": { - "@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - } + "bin": { + "sitemap": "dist/cli.js" + }, + "engines": { + "node": ">=12.0.0", + "npm": ">=5.6.0" } }, - "slash": { + "node_modules/sitemap/node_modules/@types/node": { + "version": "17.0.45", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", + "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" + }, + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } }, - "sockjs": { + "node_modules/sockjs": { "version": "0.3.24", "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "requires": { + "dependencies": { "faye-websocket": "^0.11.3", "uuid": "^8.3.2", "websocket-driver": "^0.7.4" - }, - "dependencies": { - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - } } }, - "sort-css-media-queries": { + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/sort-css-media-queries": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==" + "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", + "engines": { + "node": ">= 6.3.0" + } }, - "source-map": { + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } }, - "source-map-js": { + "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "space-separated-tokens": { + "node_modules/space-separated-tokens": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==" + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "spdy": { + "node_modules/spdy": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "requires": { + "dependencies": { "debug": "^4.1.0", "handle-thing": "^2.0.0", "http-deceiver": "^1.2.7", "select-hose": "^2.0.0", "spdy-transport": "^3.0.0" }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "engines": { + "node": ">=6.0.0" } }, - "spdy-transport": { + "node_modules/spdy-transport": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "requires": { + "dependencies": { "debug": "^4.1.0", "detect-node": "^2.0.4", "hpack.js": "^2.1.6", "obuf": "^1.1.2", "readable-stream": "^3.0.6", "wbuf": "^1.7.3" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, - "sprintf-js": { + "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "stable": { + "node_modules/stable": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==" + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" }, - "state-toggle": { + "node_modules/state-toggle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==" + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "statuses": { + "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } }, - "std-env": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.1.tgz", - "integrity": "sha512-3H20QlwQsSm2OvAxWIYhs+j01MzzqwMwGiiO1NQaJYZgJZFPuAbf95/DiKRBSTYIJ2FeGUc+B/6mPGcWP9dO3Q==" + "node_modules/std-env": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.2.tgz", + "integrity": "sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==" }, - "string_decoder": { + "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { + "dependencies": { "safe-buffer": "~5.2.0" } }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "string.prototype.trimend": { + "node_modules/string.prototype.trimend": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "string.prototype.trimstart": { + "node_modules/string.prototype.trimstart": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.1.4", "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "stringify-object": { + "node_modules/stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "requires": { + "dependencies": { "get-own-enumerable-property-symbols": "^3.0.0", "is-obj": "^1.0.1", "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" } }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { + "dependencies": { "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "strip-bom-string": { + "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==" + "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", + "engines": { + "node": ">=0.10.0" + } }, - "strip-final-newline": { + "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "style-to-object": { + "node_modules/style-to-object": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "requires": { + "dependencies": { "inline-style-parser": "0.1.1" } }, - "stylehacks": { + "node_modules/stylehacks": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "requires": { + "dependencies": { "browserslist": "^4.21.4", "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" } }, - "stylis": { + "node_modules/stylis": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" }, - "supports-color": { + "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { + "dependencies": { "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "supports-preserve-symlinks-flag": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "svg-parser": { + "node_modules/svg-parser": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" }, - "svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "requires": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" + "node_modules/svgo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/svgo/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/svgo/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/svgo/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/svgo/node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/svgo/node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/svgo/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/svgo/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svgo/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/svgo/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/svgo/node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/svgo/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.16.4", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.4.tgz", + "integrity": "sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", + "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.14", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0", + "terser": "^5.14.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==" - }, - "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", - "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, + "node_modules/terser-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - } + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "requires": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "text-table": { + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, - "thunky": { + "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, - "tiny-invariant": { + "node_modules/tiny-invariant": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" }, - "tiny-warning": { + "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" }, - "to-fast-properties": { + "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "engines": { + "node": ">=4" + } }, - "to-readable-stream": { + "node_modules/to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "toidentifier": { + "node_modules/toidentifier": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } }, - "totalist": { + "node_modules/totalist": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" + "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", + "engines": { + "node": ">=6" + } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "trim": { + "node_modules/trim": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" }, - "trim-trailing-lines": { + "node_modules/trim-trailing-lines": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==" + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "trough": { + "node_modules/trough": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==" + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "tslib": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", - "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "engines": { + "node": ">=6.10" + } + }, + "node_modules/tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" }, - "type-fest": { + "node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==" + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "type-is": { + "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { + "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/type-is/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "typedarray-to-buffer": { + "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "requires": { + "dependencies": { "is-typedarray": "^1.0.0" } }, - "typescript": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.3.tgz", - "integrity": "sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==", - "peer": true + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "ua-parser-js": { - "version": "0.7.32", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.32.tgz", - "integrity": "sha512-f9BESNVhzlhEFf2CHMSj40NWOjYPl1YKYbrvIr/hFTDEmLq7SRbWvm7FcdcpCYT95zrOhC7gZSxjdnnTpBcwVw==" + "node_modules/ua-parser-js": { + "version": "0.7.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", + "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } }, - "unbox-primitive": { + "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "requires": { + "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "unherit": { + "node_modules/unherit": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "requires": { + "dependencies": { "inherits": "^2.0.0", "xtend": "^4.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, - "unicode-canonical-property-names-ecmascript": { + "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==" + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "engines": { + "node": ">=4" + } }, - "unicode-match-property-ecmascript": { + "node_modules/unicode-match-property-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "requires": { + "dependencies": { "unicode-canonical-property-names-ecmascript": "^2.0.0", "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "unicode-match-property-value-ecmascript": { + "node_modules/unicode-match-property-value-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==" + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "engines": { + "node": ">=4" + } }, - "unicode-property-aliases-ecmascript": { + "node_modules/unicode-property-aliases-ecmascript": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==" + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "engines": { + "node": ">=4" + } }, - "unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "requires": { + "node_modules/unified": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", + "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", + "dependencies": { "bail": "^1.0.0", "extend": "^3.0.0", "is-buffer": "^2.0.0", "is-plain-obj": "^2.0.0", "trough": "^1.0.0", "vfile": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unique-string": { + "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { + "dependencies": { "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "unist-builder": { + "node_modules/unist-builder": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==" + "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-generated": { + "node_modules/unist-util-generated": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==" + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-is": { + "node_modules/unist-util-is": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==" + "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-position": { + "node_modules/unist-util-position": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==" + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "unist-util-remove": { + "node_modules/unist-util-remove": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "requires": { + "dependencies": { "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-remove-position": { + "node_modules/unist-util-remove-position": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "requires": { + "dependencies": { "unist-util-visit": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-stringify-position": { + "node_modules/unist-util-stringify-position": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "requires": { + "dependencies": { "@types/unist": "^2.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-visit": { + "node_modules/unist-util-visit": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0", "unist-util-visit-parents": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "unist-util-visit-parents": { + "node_modules/unist-util-visit-parents": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "unist-util-is": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "universalify": { + "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } }, - "unpipe": { + "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } }, - "unquote": { + "node_modules/unquote": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" }, - "update-browserslist-db": { + "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "update-notifier": { + "node_modules/update-notifier": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "requires": { + "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", "configstore": "^5.0.1", @@ -25468,233 +13740,390 @@ "semver-diff": "^3.1.1", "xdg-basedir": "^4.0.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/update-notifier/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dependencies": { - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/update-notifier/node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-notifier/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "url-loader": { + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/url-loader": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "requires": { + "dependencies": { "loader-utils": "^2.0.0", "mime-types": "^2.1.27", "schema-utils": "^3.0.0" }, - "dependencies": { - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "file-loader": "*", + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "file-loader": { + "optional": true } } }, - "url-parse-lax": { + "node_modules/url-loader/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/url-loader/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/url-parse-lax": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "requires": { + "dependencies": { "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "use-composed-ref": { + "node_modules/use-composed-ref": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "requires": {} + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } }, - "use-isomorphic-layout-effect": { + "node_modules/use-isomorphic-layout-effect": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "requires": {} + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } }, - "use-latest": { + "node_modules/use-latest": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "requires": { + "dependencies": { "use-isomorphic-layout-effect": "^1.1.1" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "util.promisify": { + "node_modules/util.promisify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "requires": { + "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.2", "has-symbols": "^1.0.1", "object.getownpropertydescriptors": "^2.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "utila": { + "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" }, - "utility-types": { + "node_modules/utility-types": { "version": "3.10.0", "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" + "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", + "engines": { + "node": ">= 4" + } }, - "utils-merge": { + "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } }, - "uuid": { + "node_modules/uuid": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } }, - "value-equal": { + "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" }, - "vary": { + "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } }, - "vfile": { + "node_modules/vfile": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "is-buffer": "^2.0.0", "unist-util-stringify-position": "^2.0.0", "vfile-message": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "vfile-location": { + "node_modules/vfile-location": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==" + "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "vfile-message": { + "node_modules/vfile-message": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "requires": { + "dependencies": { "@types/unist": "^2.0.0", "unist-util-stringify-position": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "wait-on": { + "node_modules/wait-on": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "requires": { + "dependencies": { "axios": "^0.25.0", "joi": "^17.6.0", "lodash": "^4.17.21", "minimist": "^1.2.5", "rxjs": "^7.5.4" + }, + "bin": { + "wait-on": "bin/wait-on" + }, + "engines": { + "node": ">=10.0.0" } }, - "watchpack": { + "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "requires": { + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "wbuf": { + "node_modules/wbuf": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "requires": { + "dependencies": { "minimalistic-assert": "^1.0.0" } }, - "web-namespaces": { + "node_modules/web-namespaces": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==" + "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "webpack": { + "node_modules/webpack": { "version": "5.75.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "requires": { + "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", @@ -25720,29 +14149,28 @@ "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "requires": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - } + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-bundle-analyzer": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.7.0.tgz", - "integrity": "sha512-j9b8ynpJS4K+zfO5GGwsAcQX4ZHpWV+yRiHDiL+bE0XHJ8NiPYLTNVQdlFYWxtpg9lfAQNlwJg16J9AJtFSXRg==", - "requires": { + "node_modules/webpack-bundle-analyzer": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", + "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", "acorn-walk": "^8.0.0", "chalk": "^4.1.0", @@ -25752,280 +14180,565 @@ "opener": "^1.5.2", "sirv": "^1.0.7", "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "engines": { + "node": ">= 10" } }, - "webpack-dev-middleware": { + "node_modules/webpack-dev-middleware": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "requires": { + "dependencies": { "colorette": "^2.0.10", "memfs": "^3.4.3", "mime-types": "^2.1.31", "range-parser": "^1.2.1", "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", + "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "requires": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", + "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", + "engines": { + "node": ">=10.0.0" }, - "dependencies": { - "ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", - "requires": {} + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true } } }, - "webpack-merge": { + "node_modules/webpack-merge": { "version": "5.8.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "requires": { + "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "webpack-sources": { + "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==" + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" + }, + "node_modules/webpack/node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } }, - "webpackbar": { + "node_modules/webpackbar": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "requires": { + "dependencies": { "chalk": "^4.1.0", "consola": "^2.15.3", "pretty-time": "^1.1.0", "std-env": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "webpack": "3 || 4 || 5" } }, - "websocket-driver": { + "node_modules/websocket-driver": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "requires": { + "dependencies": { "http-parser-js": ">=0.5.1", "safe-buffer": ">=5.1.0", "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" } }, - "websocket-extensions": { + "node_modules/websocket-extensions": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==" + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-boxed-primitive": { + "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "requires": { + "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", "is-number-object": "^1.0.4", "is-string": "^1.0.5", "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "widest-line": { + "node_modules/widest-line": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "requires": { + "dependencies": { "string-width": "^5.0.1" }, - "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "wildcard": { + "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" }, - "wrap-ansi": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.0.1.tgz", - "integrity": "sha512-QFF+ufAqhoYHvoHdajT/Po7KoXVBPXS2bgjIam5isfWJPfIOnQZ50JtUiVvCv/sjgacf3yRrt2ZKUZ/V4itN4g==", - "requires": { + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", "strip-ansi": "^7.0.1" }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", + "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", "dependencies": { - "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" - }, - "ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - } - }, - "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "requires": { - "ansi-regex": "^6.0.1" - } - } + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "write-file-atomic": { + "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "requires": { + "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", "signal-exit": "^3.0.2", "typedarray-to-buffer": "^3.1.5" } }, - "ws": { + "node_modules/ws": { "version": "7.5.9", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "requires": {} + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } }, - "xdg-basedir": { + "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } }, - "xml-js": { + "node_modules/xml-js": { "version": "1.6.11", "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "requires": { + "dependencies": { "sax": "^1.2.4" + }, + "bin": { + "xml-js": "bin/cli.js" } }, - "xtend": { + "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" }, - "yaml": { + "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "zwitch": { + "node_modules/zwitch": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==" + "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } From f03d860aec198ac50c94d380eb832cd31306d18a Mon Sep 17 00:00:00 2001 From: Anwesh Date: Wed, 22 Feb 2023 20:25:03 +0530 Subject: [PATCH 102/665] feat(rfp): alternative javascript console for polkadot js API (#1545) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(rfp): add a new proposal alternative javascript console for polkadot js API * feat(rfp): add a new proposal alternative javascript console for polkadot js API * feat(rfp): add a new proposal alternative javascript console for polkadot js API * feat(rfp): add a new proposal alternative javascript console for polkadot js API * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Sebastian Müller * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/alternative-polkadot-js-api-console.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --------- Co-authored-by: Sebastian Müller Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- .../alternative-polkadot-js-api-console.md | 55 +++++++++++++++++++ docs/rfps.md | 1 + 2 files changed, 56 insertions(+) create mode 100644 docs/RFPs/Open/alternative-polkadot-js-api-console.md diff --git a/docs/RFPs/Open/alternative-polkadot-js-api-console.md b/docs/RFPs/Open/alternative-polkadot-js-api-console.md new file mode 100644 index 00000000000..b6be07084b4 --- /dev/null +++ b/docs/RFPs/Open/alternative-polkadot-js-api-console.md @@ -0,0 +1,55 @@ +# Alternative javascript console for Polkadot JS API + +* **Status:** Open (anyone is allowed to apply) +* **Proposer:** [muddlebee](https://github.com/muddlebee) +* **Projects you think this work could be useful for** [optional]: Javascript console at https://polkadot.js.org/apps/#/js + +## Project Description :page_facing_up: + +### Current State +We have a Javascript console on the Developer tab which is really useful for running Polkadot-JS API scripts [Polkadot-JS API docs](https://polkadot.js.org/docs/) + + +**Link** - [https://polkadot.js.org/apps/#/js](https://polkadot.js.org/apps/#/js), UI screenshot below + +![image](https://user-images.githubusercontent.com/8139783/197954316-1449075f-b8be-4a30-a759-873c15f8a14f.png) + + +**Current limitations of the above console**: +Cannot save code properly, not many keyboard shortcuts, cannot customize configurations. + +**Alternative polkadot js API playground** +1. [https://github.com/subdirectory/subshell](https://github.com/subdirectory/subshell) + + +### Proposed-RFP + +A new Polkadot-JS API playground with VS Code-like configurations like save the code, workspace, keyboard shortcuts, etc. +[https://polkadot.js.org/apps/#/js](https://polkadot.js.org/apps/#/js) + +some examples -> https://playground.substrate.dev/ +here we have to manually build and run our js bundles +![image](https://user-images.githubusercontent.com/8139783/198254152-abdd0f2e-62d4-4f0f-aad1-bcfdd6d48a74.png) + +**Why alternative javascript console for Polkadot-JS API**? + +Current polkadot js API console which I mentioned in beginning of this post, has some limitations, which we can overcome by creating a better version for smoother dev experience. + + + +## Deliverables :nut_and_bolt: + +The following items could be the initial deliverables of the project. Of course, improvements and additions are more than welcome. + +- Initial research: + - study how the current javascript console is developed at https://polkadot.js.org/apps/#/js + - understand the libaries currently integrated from [polkadot JS API docs](https://polkadot.js.org/docs/) + +- Development: + - design a new UI/UX with better experience than current javascript console with features like + - save code preferably with secure session management + - keyboard shortcuts + - [example](#Proposed-RFP) + + Any additional features which make the Polkadot-JS experience more productive and smoother are welcome. + diff --git a/docs/rfps.md b/docs/rfps.md index e83d623ced6..b96865d0671 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -65,6 +65,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | | [wallet-aggregator-library.md](RFPs/Open/wallet-aggregator-library.md) | 🟢 | 23.01.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | +| [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | ## :mailbox_with_mail: Suggest an RFP From 0a2e8ecd04318fb0b3c713ea4d08a1ed0c31217c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 23 Feb 2023 16:58:36 +0100 Subject: [PATCH 103/665] Remove fiat mention from FAQ --- docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index 57fe8cfcf8e..d427a34747b 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -58,7 +58,7 @@ title: FAQ Depending on the size of the grant, applications require two to five committee members to approve it. Since we have many different members with different backgrounds and specializations, it is possible that the committee disagrees and your application gets rejected even though one or two members approved it. The application is accepted once the pull request is merged. -### How do I apply if I want to keep information private or want to be paid in fiat? +### How do I apply if I want to keep information private? For special cases that do not fit the regular grants structure, we provide [a form](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). You can provide all application data by submitting this form, or submit the form with a reference to a pull request with data you are willing to make public. From c085bd05d6f194b4e222df30b48e55d7c6f0bce8 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 23 Feb 2023 14:29:42 -0500 Subject: [PATCH 104/665] Update index.md (#1565) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 68baad7aec0..85b911702c3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -224,7 +224,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stardust Labs Inc.](https://stardust.finance/) | [Uncollateralized Stablecoin Research and Design](./stardust.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | | [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | -| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☐ | ☐ | +| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./stable-asset.md) | [GitHub](https://github.com/nutsfinance/) | ☐ | ☒ | ☒ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | From 98fe4f314eda9306f1065fb6cd556c812b08a014 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 23 Feb 2023 22:54:27 +0100 Subject: [PATCH 105/665] simplify docs structure (#1561 * simplify docs structure * Remove more symlinks and fix links * Move maintenance to applications * More fixed links --- README.md | 8 ++--- applications/index.md | 24 ++++++++++++-- .../maintenance}/Substratesnap_Maintenance.md | 0 .../maintenance}/maintenance-template.md | 8 +++-- .../maintenance}/wasm-opt-for-rust.md | 0 docs/CODE_OF_CONDUCT.md | 1 - docs/Introduction/ideas.md | 4 +-- docs/Introduction/intro.md | 2 +- docs/README.md | 1 - docs/applications | 1 - docs/docs/faq.md | 1 - docs/docs/readme.md | 3 -- docs/index.md | 4 +++ docs/maintenance | 1 - docs/process.md | 3 +- docs/rfps.md | 10 +++--- docusaurus.config.js | 31 ++++++++++++++----- sidebars.js | 28 ++++++++--------- src/pages/index.js | 2 +- 19 files changed, 82 insertions(+), 50 deletions(-) rename {maintenance => applications/maintenance}/Substratesnap_Maintenance.md (100%) rename {maintenance => applications/maintenance}/maintenance-template.md (98%) rename {maintenance => applications/maintenance}/wasm-opt-for-rust.md (100%) delete mode 120000 docs/CODE_OF_CONDUCT.md delete mode 120000 docs/README.md delete mode 120000 docs/applications delete mode 120000 docs/docs/faq.md delete mode 100644 docs/docs/readme.md create mode 100644 docs/index.md delete mode 120000 docs/maintenance diff --git a/README.md b/README.md index c4b54011a0a..776bf88ac9f 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ The W3F Grants Program offers different grant levels to help you best depending 0. Please read our [FAQs](https://github.com/w3f/Grants-Program/blob/master/docs/faq.md), [category guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md), [announcement guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/announcement-guidelines.md) and [Terms & Conditions](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) to familiarize yourself with the subtleties of grants, applications and the program as a whole. 1. [Fork](https://github.com/w3f/Grants-Program/fork) this repository. - 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. + 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](applications/maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. 3. Name the new file after your project: `project_name.md`. 4. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. @@ -196,7 +196,7 @@ Ideas generally have better chances of being implemented if they're presented in 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [this one](.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). -7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. +7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. ## :hammer_and_wrench: Maintenance Grants @@ -322,8 +322,8 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) -- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) -- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) +- [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) +- [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) - [SubQuery Grants Programme](https://subquery.network/grants) diff --git a/applications/index.md b/applications/index.md index 85b911702c3..ea1d0c222de 100644 --- a/applications/index.md +++ b/applications/index.md @@ -12,6 +12,7 @@ Use this page for an overview of all public grants and their status. Use the sid > Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). ## Menu + - [2023](#2023): [17](#%EF%B8%8F-wave-17---first-quarter-2023) - [2022](#2022): [16](#%EF%B8%8F-wave-16---fourth-quarter-2022), [15](#%EF%B8%8F-wave-15---third-quarter-2022), [14](#%EF%B8%8F-wave-14---second-quarter-2022), [13](#%EF%B8%8F-wave-13---first-quarter-2022) - [2021](#2021): [12](#%EF%B8%8F-wave-12---fourth-quarter-2021), [11](#%EF%B8%8F-wave-11---third-quarter-2021), [10](#%EF%B8%8F-wave-10---second-quarter-2021), [9](#%EF%B8%8F-wave-9---first-quarter-2021) @@ -20,7 +21,8 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2023 -### 🏄‍♀️ Wave 17 - First Quarter 2023 +### 🏄‍♀️ Wave 17 - First Quarter 2023 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -59,6 +61,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2022 ### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -89,7 +92,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | -| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](../maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | +| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | @@ -104,6 +107,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 15 - Third Quarter 2022 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -149,12 +153,13 @@ Use this page for an overview of all public grants and their status. Use the sid | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 14 - Second Quarter 2022 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [TDSoftware](https://www.tdsoftware.de/) | [SubIdentity](./SubIdentity.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | -| [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | +| [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./maintenance/Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | | [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☐ | ☐ | | [Perun Network](https://perun.network/) | [Perun App Channels](./perun_app_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | | [ChainSafe Systems](https://chainsafe.io/) | [Privacy enhancement for Polkadot-js extension](./polkadot-js-extension-per-account-auth.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | @@ -191,6 +196,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 13 - First Quarter 2022 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -231,6 +237,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2021 ### 🏄‍♀️ Wave 12 - Fourth Quarter 2021 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -258,6 +265,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | ### 🏄‍♀️ Wave 11 - Third Quarter 2021 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -290,6 +298,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 10 - Second Quarter 2021 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -325,6 +334,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 9 - First Quarter 2021 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -381,6 +391,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2020 ### 🏄‍♀️ Wave 8 - Fourth Quarter 2020 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -430,6 +441,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 7 - Third Quarter 2020 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -467,6 +479,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 6 - Second Quarter 2020 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -506,6 +519,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 5 - First Quarter 2020 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -551,6 +565,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2019 ### 🏄‍♀️ Wave 4 - Fourth Quarter 2019 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -583,6 +598,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 3 - Third Quarter 2019 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -603,6 +619,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | ### 🏄‍♀️ Wave 2 - Second Quarter 2019 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | @@ -621,6 +638,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 1 - First Quarter 2019 + [Menu🔝](#menu) | Team | Project | Link | Terminated | First Delivery | Completed | diff --git a/maintenance/Substratesnap_Maintenance.md b/applications/maintenance/Substratesnap_Maintenance.md similarity index 100% rename from maintenance/Substratesnap_Maintenance.md rename to applications/maintenance/Substratesnap_Maintenance.md diff --git a/maintenance/maintenance-template.md b/applications/maintenance/maintenance-template.md similarity index 98% rename from maintenance/maintenance-template.md rename to applications/maintenance/maintenance-template.md index 56ed521e59d..c3e13f35146 100644 --- a/maintenance/maintenance-template.md +++ b/applications/maintenance/maintenance-template.md @@ -78,7 +78,7 @@ Please also provide the GitHub accounts of all team members. If they contain no If you've already started implementing your project or it is part of a larger repository, please provide a link and a description of the code here. In any case, please provide some documentation on the research and other work you have conducted before applying. This could be: -- links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/rfp-proposal) (requests for proposal), +- links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) (requests for proposal), - academic publications relevant to the problem, - links to your research diary, blog posts, articles, forum discussions or open GitHub issues, - references to conversations you might have had related to this project with anyone from the Web3 Foundation, @@ -93,11 +93,13 @@ Also, make sure the current project owners are willing to review/accept your con Below we provide **example maintenance responsibilities**. Issues we want to fix: + - There's a bug in the JsonRPC library that affects its speed. - Massive lack of documentation and part of it is outdated. - Code has no comments, and it's tough for new developers to understand the code and contribute. Our responsibilities: + - We will maintain the project's documentation. - We will answer issues and discussions. - We will fix new bugs as we receive and help contributors who have pull requests get any needed information. @@ -106,12 +108,12 @@ Our responsibilities: ### Overview -- **Start Date:** Date, when you plan to start with the maintenance work. +- **Start Date:** Date, when you plan to start with the maintenance work. - **Sprint/Period Duration:** Duration of the sprint/period (e.g. 4 weeks) - **Total Duration:** Duration of the entire maintenance contract (e.g. 1 year) - **Full-Time Equivalent (FTE):** Average number of full-time employees working on the project throughout its duration (see [Wikipedia](https://en.wikipedia.org/wiki/Full-time_equivalent), e.g. 2 FTE) - **Max budget per sprint/period:** Requested max budget in USD per sprint/period (e.g. 7,000 USD). Cost for each period need to be provided in USD; if the grant is paid out in Bitcoin, the amount will be calculated according to the exchange rate at the time of payment. -- **Hourly rate:** Amount of budget per hour, since it’s unlikely that the maintenance of the project requires the exact same workload each sprint. +- **Hourly rate:** Amount of budget per hour, since it’s unlikely that the maintenance of the project requires the exact same workload each sprint. > ⚠️ *Note that you will need to provide a comprehensive report of the work done at the end of each month, including the list of issues/bugs/pull requests worked on, time spent on each of these, & finally, the associated cost. The time allocation & price will likely vary from month to month, depending on the nature of the project you're contributing to. The report should be in the form of a Milestone Delivery, again like the typical procedure. W3F will make the payments only after the successful merge of each individual report.* diff --git a/maintenance/wasm-opt-for-rust.md b/applications/maintenance/wasm-opt-for-rust.md similarity index 100% rename from maintenance/wasm-opt-for-rust.md rename to applications/maintenance/wasm-opt-for-rust.md diff --git a/docs/CODE_OF_CONDUCT.md b/docs/CODE_OF_CONDUCT.md deleted file mode 120000 index 0400d574603..00000000000 --- a/docs/CODE_OF_CONDUCT.md +++ /dev/null @@ -1 +0,0 @@ -../CODE_OF_CONDUCT.md \ No newline at end of file diff --git a/docs/Introduction/ideas.md b/docs/Introduction/ideas.md index bdec9d2153f..82ffd8ee563 100644 --- a/docs/Introduction/ideas.md +++ b/docs/Introduction/ideas.md @@ -4,9 +4,9 @@ sidebar_position: 3 # Project Ideas -An overview of existing projects in the Web 3.0 Technology Stack along with broad project ideas we would potentially be interested in funding can be found [here](https://wiki.polkadot.network/docs/build-open-source), as well as a list of previously accepted applications [here](../applications/index.md). +An overview of existing projects in the Web 3.0 Technology Stack along with broad project ideas we would potentially be interested in funding can be found [here](https://wiki.polkadot.network/docs/build-open-source), as well as a list of previously accepted applications [here](../../applications/index.md). -[Requests For Proposals](../RFPs/README.md) (RFPs) represent concrete ideas for projects that we would like to see implemented. Several teams may apply for the same RFP, so even if another team has already applied to implement a certain RFP, we invite you to do the same if you're interested. +[Requests For Proposals](../rfps.md) (RFPs) represent concrete ideas for projects that we would like to see implemented. Several teams may apply for the same RFP, so even if another team has already applied to implement a certain RFP, we invite you to do the same if you're interested. Finally, you don't need to start your own project in order to be eligible for a grant. Instead, some teams choose to port existing work to Substrate, where the pertinent licenses allow, or even to contribute to an existing open-source project. In the latter case, you should check in advance that the maintainers of the project are interested in your contribution, and the acceptance of the milestones will generally be tied to the inclusion of your work in said project. See the [Maintenance Grants section](../maintenance.md) for more info. diff --git a/docs/Introduction/intro.md b/docs/Introduction/intro.md index 82a854f83aa..fc02ed87e87 100644 --- a/docs/Introduction/intro.md +++ b/docs/Introduction/intro.md @@ -28,4 +28,4 @@ Please also heed our [Announcement Guidelines](../Support%20Docs/announcement-gu Finally, we take licensing and the right of all teams in and outside the ecosystem to be recognised for their work very seriously. Using others' work with no attribution or indication that this was not your own work as part of a milestone delivery **will lead to immediate termination**. Please reach out to us before submitting if you have any doubts on how to comply with a specific license and we'll be happy to help. -We also try to enforce our [code of conduct](https://github.com/w3f/Grants-Program/blob/web-test-branch/CODE_OF_CONDUCT.md) and based on this may [block users](https://github.blog/2016-04-04-organizations-can-now-block-abusive-users/). +We also try to enforce our [code of conduct](../../CODE_OF_CONDUCT.md) and based on this may [block users](https://github.blog/2016-04-04-organizations-can-now-block-abusive-users/). diff --git a/docs/README.md b/docs/README.md deleted file mode 120000 index 32d46ee883b..00000000000 --- a/docs/README.md +++ /dev/null @@ -1 +0,0 @@ -../README.md \ No newline at end of file diff --git a/docs/applications b/docs/applications deleted file mode 120000 index 32c37e2d5b3..00000000000 --- a/docs/applications +++ /dev/null @@ -1 +0,0 @@ -../applications \ No newline at end of file diff --git a/docs/docs/faq.md b/docs/docs/faq.md deleted file mode 120000 index be736927b29..00000000000 --- a/docs/docs/faq.md +++ /dev/null @@ -1 +0,0 @@ -../faq.md \ No newline at end of file diff --git a/docs/docs/readme.md b/docs/docs/readme.md deleted file mode 100644 index aba65647b94..00000000000 --- a/docs/docs/readme.md +++ /dev/null @@ -1,3 +0,0 @@ -This folder is a hack to make links from Applications work in the website. -It simply contains simlinks to the following files: -/docs/faq.md \ No newline at end of file diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000000..bf48b8249a5 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,4 @@ +--- +draft: true +--- + diff --git a/docs/maintenance b/docs/maintenance deleted file mode 120000 index 765a7bbc5c3..00000000000 --- a/docs/maintenance +++ /dev/null @@ -1 +0,0 @@ -../maintenance \ No newline at end of file diff --git a/docs/process.md b/docs/process.md index 86a0b841df8..70e5231d29d 100644 --- a/docs/process.md +++ b/docs/process.md @@ -25,7 +25,8 @@ flowchart LR style G stroke:#e83e8c,stroke-width:2px,stroke-dasharray: 5 5 style H stroke:#e83e8c,stroke-width:2px,stroke-dasharray: 5 5 - click C "Process/index" "Apply now" + click C "Process/how-to-apply" "Apply now" + click F "Process/how-to-apply" "Apply now" click D "https://wiki.polkadot.network/docs/en/learn-treasury" "https://wiki.polkadot.network/docs/en/learn-treasury" _blank click H "https://www.substrate.io/builders-program/" "https://www.substrate.io/builders-program" _blank ``` diff --git a/docs/rfps.md b/docs/rfps.md index b96865d0671..dc18578735a 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -6,15 +6,15 @@ title: Requests for Proposals

-- [❔ What is an RFP?](#grey_question-what-is-an-rfp) -- [📜 List of RFPs](#scroll-list-of-rfps) -- [📬 Suggest an RFP](#mailbox_with_mail-suggest-an-rfp) +- [:grey\_question: What is an RFP?](#grey_question-what-is-an-rfp) +- [📜 List of RFPs](#-list-of-rfps) +- [:mailbox\_with\_mail: Suggest an RFP](#mailbox_with_mail-suggest-an-rfp) ## :grey_question: What is an RFP? An RFP (Request for Proposals) is a declaration of interest for others to submit a grant or a treasury application regarding a specific project. They usually revolve around issues that the author (often someone from our team, but [anyone can suggest one](suggesting.md)) deems useful and missing or unsolved in our ecosystem. -If you find an open RFP here that you think you can address, feel free to [submit a grant application](process.md). There is a [section in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md#project-overview-page_facing_up) where you can reference the RFP you are addressing. Alternatively, you can always submit an on-chain treasury application for an RFP. +If you find an open RFP here that you think you can address, feel free to [submit a grant application](process.md). There is a [section in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md#project-overview-page_facing_up) where you can reference the RFP you are addressing. Alternatively, you can always submit an on-chain treasury application for an RFP. ## 📜 List of RFPs @@ -43,7 +43,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟢 | 20.07.2021 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | -| [ISO_8583.md](RFPs/Under%20Development/ISO_8583.md) | 🟡 | 31.05.2022 | +| [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | | [ksm-tipping-button.md](RFPs/Implemented/ksm-tipping-button.md) | 🔴 | 20.07.2021 | | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 🟢 | 22.12.2022 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | diff --git a/docusaurus.config.js b/docusaurus.config.js index 5b556500219..2fcf1be149d 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -42,7 +42,7 @@ module.exports = { items: [ { type: 'doc', - docId: 'introduction', + docId: 'docs/introduction', label: 'Introduction', }, { @@ -53,18 +53,18 @@ module.exports = { }, { type: 'doc', - docId: 'faq', + docId: 'docs/faq', label: 'FAQ', }, { type: 'doc', - docId: 'Process/how-to-apply', + docId: 'docs/Process/how-to-apply', position: 'right', label: 'Apply', }, { type: 'doc', - docId: 'contribute', + docId: 'docs/contribute', position: 'right', label: 'Contribute', } @@ -86,7 +86,7 @@ module.exports = { }, { label: 'Privacy Policy', - href: './Support%20Docs/privacy_policy', + to: 'docs/Support%20Docs/privacy_policy', }, ], }, @@ -125,6 +125,7 @@ module.exports = { '@docusaurus/preset-classic', { docs: { + path: '.', routeBasePath: '/', editUrl: 'https://github.com/w3f/Grants-Program/edit/master/', // showLastUpdateAuthor: true, @@ -140,9 +141,23 @@ module.exports = { rehypePlugins: [ ], exclude: [ - 'Applications/application-template.md', - 'Applications/example-project.md', - 'RFPs/suggestion-template.md' + 'applications/application-template.md', + 'applications/example-project.md', + 'docs/RFPs/suggestion-template.md', + '.docusaurus/**', + '.github/**', + '.vscode/**', + 'build/**', + 'node_modules/**', + 'src/**', + 'static/**', + 'babel.config.js', + '.gitignore', + 'LICENSE', + 'package-lock.json', + 'package.json', + 'sidebars.js', + 'README.md' ], }, blog: false, diff --git a/sidebars.js b/sidebars.js index 46a7739a683..f420e567c68 100644 --- a/sidebars.js +++ b/sidebars.js @@ -16,42 +16,42 @@ const sidebars = { { type: 'category', label: 'Introduction', - link: {type:'doc', id:'introduction'}, - items: [{type: 'autogenerated', dirName: 'Introduction'}] + link: {type:'doc', id:'docs/introduction'}, + items: [{type: 'autogenerated', dirName: 'docs/Introduction'}] }, { type: 'category', label: 'Application Process', - link: {type:'doc', id:'process'}, - items: [{type: 'autogenerated', dirName: 'Process'}] + link: {type:'doc', id:'docs/process'}, + items: [{type: 'autogenerated', dirName: 'docs/Process'}] }, { type: 'doc', - id:'suggesting' + id:'docs/suggesting' }, { type: 'doc', - id:'maintenance' + id:'docs/maintenance' }, { type: 'doc', - id:'help' + id:'docs/help' }, { type: 'doc', - id:'referral-program' + id:'docs/referral-program' }, { type: 'doc', - id:'funding' + id:'docs/funding' }, { type: 'doc', - id:'contribute' + id:'docs/contribute' }, { type: 'doc', - id:'faq' + id:'docs/faq' }, { type: 'doc', @@ -61,13 +61,13 @@ const sidebars = { { type: 'category', label: 'Support Docs', - items: [{type: 'autogenerated', dirName: 'Support Docs'}] + items: [{type: 'autogenerated', dirName: 'docs/Support Docs'}] }, { type: 'category', label: 'Requests for Proposal', - link: {type:'doc', id:'rfps'}, - items: [{type: 'autogenerated', dirName: 'RFPs'}] + link: {type:'doc', id:'docs/rfps'}, + items: [{type: 'autogenerated', dirName: 'docs/RFPs'}] }, ] }; diff --git a/src/pages/index.js b/src/pages/index.js index 6c78f2fbdf3..7613602e3e2 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -18,7 +18,7 @@ function HomepageHeader() {
+ to="./docs/Process/how-to-apply"> Apply
From 9d3e071c1d43e96f949a3e6c6e43a0cffd04ad6c Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 24 Feb 2023 04:47:18 -0800 Subject: [PATCH 106/665] Update index.md (#1566 * Update index.md Typechain follow-up 2 -> first delivery, completed * Update index.md Epirus Substrate Phase 2 -> Completed --- applications/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/index.md b/applications/index.md index ea1d0c222de..9835532fb5c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -46,7 +46,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | @@ -142,7 +142,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | | [TopMonks](https://www.topmonks.com/) | [Calamar](./Calamar.md) | [GitHub](https://github.com/topmonks/calamar) | ☐ | ☒ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper](./RubeusKeeper.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | -| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer - Phase 2](./epirus_substrate_phase_2.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | From b104659264b54351a70746ec024e139883a44b36 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Fri, 24 Feb 2023 11:07:15 -0500 Subject: [PATCH 107/665] Terminate Wika Network grant (#1568 Team is committed to other obligations and won't have time to work on it in the near future. --- applications/wika_network.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/wika_network.md b/applications/wika_network.md index 94cbac89415..0a9b6003b54 100644 --- a/applications/wika_network.md +++ b/applications/wika_network.md @@ -3,7 +3,7 @@ - **Team Name:** Web Registry DAO - **Payment Address:** 0xBfc8cDb5617eE0F83794156ABD7465730E125cE3 (USDT) - **Level:** 2 - +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/682#issuecomment-1443835696) ## Project Overview :page_facing_up: From fb11f129c10b02e7e0435f7e58995baeca8c581d Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Fri, 24 Feb 2023 11:07:48 -0500 Subject: [PATCH 108/665] Update applications index (#1567 Blockcoders XCM SDK completed milestone 2 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9835532fb5c..8763ee5c152 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,7 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | | [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | | [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | From 8975c040a71a809b9ca3c90a2511b84a4db5efa5 Mon Sep 17 00:00:00 2001 From: Anwesh Date: Sun, 26 Feb 2023 21:08:35 +0530 Subject: [PATCH 109/665] Mempool Dashboard - Version 2 (#1559) * Mempool Dashboard - Version 2 * Mempool Dashboard - Version 2 * Mempool Dashboard - Version 2 * Update applications/polkadot-mempool-explorer-v2.md Co-authored-by: Matteo Casonato * fix(formatting) * fix(formatting) * Mempool Dashboard - Version 2 * Mempool Dashboard - Version 2 * fix(formatting) * fix(formatting) * fix(formatting) * fix(formatting) * fix(formatting) * fix(formatting) * fix(formatting) * fix(suggestions) * fix(suggestions) * fix(suggestions) * fix(suggestions) * fix(suggestions) --------- Co-authored-by: Matteo Casonato --- applications/polkadot-mempool-explorer-v2.md | 477 +++++++++++++++++++ 1 file changed, 477 insertions(+) create mode 100644 applications/polkadot-mempool-explorer-v2.md diff --git a/applications/polkadot-mempool-explorer-v2.md b/applications/polkadot-mempool-explorer-v2.md new file mode 100644 index 00000000000..6d16d8a424e --- /dev/null +++ b/applications/polkadot-mempool-explorer-v2.md @@ -0,0 +1,477 @@ +# polkadot-mempool-explorer-v2 + + + + + +- **Team Name:** NA + + + +- **Payment Address:** TBD + + + +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + + + + + +## Project Overview :page_facing_up: + + + +Mempool Explorer enables Polkadot ecosystem members to monitor pending transactions across several parameters and gain meaningful insights. + + + + + +**Follow-up of Mempool Dashboard - Version 1** + + + +- Link to the phase 1 project: [medium](https://medium.com/protofire-blog/monitoring-pending-transactions-in-polkadot-with-mempool-explorer-36e88e8a41ed) + + + + + +However the project was created by a different team, Protofire. Currently it's not in working condition, the provided link https://mempool.dot.protofire.io/ doesn't work anymore. + + + + + +### Overview + + + +Version 2 of mempool dashboard, is a tool to monitor pending transactions in Polkadot, Kusama, Westend, Rococo and you can add your customized network. + + + + + +**Current issues with the initial implementation** + + + +version 1 of the mempool dashboard is not in working condition. I took this opportunity to revive the project and create a next version of the original project by fixing the current issues, creating a new UI to enhance user experience and readability and improvements to the API. + + + + + +My first task was to understand the codebase, identify the current issue and provide a fix for it. After applying a few patches I was able to restore back to the original state, however still with few issues. + + + + + +**Noteable issues** + + + +- [proper balance amount was not displayed correctly](https://github.com/muddlebee/polkadot-mempool-explorer/issues/4) + + + +- [docker scripts not working](https://github.com/muddlebee/polkadot-mempool-explorer/issues/1) + + + +- [enhance caching logic](https://github.com/muddlebee/polkadot-mempool-explorer/issues/5) + + + +- [feature to view accounts/txn details not working properly across different networks](https://github.com/muddlebee/polkadot-mempool-explorer/issues/6) + + + +- lack of proper code documentation ( it was difficult for me to understand the codebase initially ) + + + + + +and set of exhaustive open issues https://github.com/muddlebee/polkadot-mempool-explorer/issues + + + +track of patches/fixes done till date - https://github.com/muddlebee/polkadot-mempool-explorer/commits/dev + + + +We have fixed majority of the issues already. + + + + + +**What's in version 2** + + + + + +- new UI for desktop and mobile view [figma link](https://www.figma.com/file/2EIEKQXfpI6wBldxQ18h6Q/Polkadot-work?node-id=0:1&t=aWz2emO8pIhjWyP5-1) + + + +- fix the existing issues + + + +- enable CI/CD deployment to the hosted servers and fix docker scripts + + + +- series of tutorials on polkadot-js APIs + + + +Currently there's a lack of proper tutorials/education materials for anything polkadot-js API related stuff other than the official docs. I would like to create an extensive tutorial on how to consume polkadot-js APIs (more details in Milestone section). + + + + +why create a separate set of tutorials? + + + +- currently the [polkadot JS docs](https://polkadot.js.org/docs/api) is difficult for beginners with zero or less technical knowledge about the polkadot architecture to understand properly. + + + +- easy to learn and develop using polkadot JS APIs/SDKs as compared to substrate in Rust + + + + + +### Project Details + + + +Github: https://github.com/muddlebee/polkadot-mempool-explorer + + + +API : /api folder + + + +Frontend: /web folder + + + + + +API uses nodejs on top of polkadot js API + + + +Frontend uses React to render the transaction blocks in the UI + + + + + +**Note** We already have done 50% of the proposed work, and its live in the url below + + + +[mempool-ui](http://139.84.168.166:3000/#/main) + + + + + +### Technology stack + + + + + +- javascript, nodejs, react + + + +- polkadot js API + + + +- docker + + + + + +### Ecosystem Fit + + + +Solution that would allow members of the Polkadot ecosystem to monitor information related to pending transactions. + + + +More details has been published in the phase 1 delivery report [medium](https://medium.com/protofire-blog/monitoring-pending-transactions-in-polkadot-with-mempool-explorer-36e88e8a41ed) + + + + + +Tutorials for polkadot JS APIs will help educate folks who are not expert in Rust/Substrate and want to adopt JS first approach first. We have many examples of live webapps integrating polkadot JS APIs like wallets, tools etc. + + + + + +## Team :busts_in_silhouette: + + + + + +### Team members + + + +#### Name of team leader: + + + +- Anwesh Nayak (@muddlebee) + + + +#### Names of team members: + + + +- Arnav Nayak + + + +- Dikhyant Krishna + + + + + +### Contact + + + + + +- **Contact Name:** Anwesh Nayak + + + +- **Contact Email:** anweshknayak@gmail.com + + + + + +### Legal Structure + + + + + +- **Registered Address:** NA + + + +- **Registered Legal Entity:** NA + + + + + +### Team's experience + + + +I have around 5 years of experience in full stack development. Currently work as a tech lead at B2B fintech firm. Also a polkadot ambassador and the community moderator of the official polkadot/kusama discord. I have been contributing to the ecosystem since last year. Also participated in Thousand Contributors Programme by w3f and have been adding suggestions/improvements across the w3f github projects. + + + + + +**Arnav**, our lead designer has 2 years of experience in product design prior to that used to work as a architect with few years of experience. + + + + + +**Dikhyant**, frontend developer has around 2 years of experience in web development, creating UI out of design specs. + + + + + +### Team Code Repos + + + + + +- Currently hosted here https://github.com/muddlebee/polkadot-mempool-explorer + + + +will move to a separate github repo once grant is approved + + + + + +### Team LinkedIn Profiles (if available) + + + + + +- Anwesh Nayak + + + + + +- Arnav Nayak + + + +- Dikhyant Krishna + + + + + +## Development Roadmap :nut_and_bolt: + + + + + +### Overview + + + + + +- **Total Estimated Duration:** 7-8 weeks + + +- **Full-Time Equivalent (FTE):** 3 + + + +- **Total Costs:** 9000 USD + + + + + +### Milestone 1 + + + +#### version 2 of mempool dashboard and polkadot js API tutorials + + + + +- **Estimated Duration:** 7-8 weeks + + + +- **FTE:** 3 + + + +- **Costs:** 9000 USD + + +| Number | Deliverable | Specification | +| ------: | -------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | APACHE 2 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to view pending transactions in dashboard | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | | | +| 1. | new UI for desktop and mobile view and fix existing issues| | +| 2. | enhance the APIs and fix existing issues | +| 3. | enable CI/CD | spin up a server instance for hosting the backend and deploying the frontend at github pages | + | 4a | polkadot js API tutorials | We will provide both **inline documentation** of the code and a series of **tutorial** that explains how to run sample examples | +| 4b | Graphics/Illustrations | Illustrations wherever required to explain complex topics +| 4c | Publish tutorials online | Use a technical documentation tool to publish the tutorials online + +Sample tutorials +- https://github.com/muddlebee/polkadot-js-beginner-series +- https://rust-unofficial.github.io/too-many-lists/index.html + + +Chapters overview + + + +1. Explain the basics of polkadot architecture + +2. Role of polkadot JS API, substrate and how to interact with the live blockchain + +3. How to fetch the metadata, and what are the metadata of the blockchain? https://polkadot.js.org/docs/api/start/basics + +4. What's the purpose of polkadot js console and how to use it? https://polkadot.js.org/apps/#/ + +5. Explain transaction lifecycle, and how to perform transactions through the API + +and more ..... + +Overall goal it to curate a series of tutorials to build the concepts of polkadot blockchain. + + +#### Cost breakup + +Design - 1500 USD + +Frontend - 1500 USD + +API/backend - 2500 USD + +CI/CD setup + server costs/maintenance - 500 USD + +polkadot js API tutorials - 3000 USD + + + + + + +## Future Plans + + + + + +### Version 2 of polkadot JS tutorials + + + +- Create a extensive and expanded set of tutorials covering most of the [polkadot JS APIs](https://polkadot.js.org/docs/api/) + + + +- Make it good enough so it can be integrated and added over to the education repo at w3f https://github.com/w3f/w3f-education + + + +- Expand the goal of education through quality content + + + +- Add good explanatory graphics to explain the basic concepts \ No newline at end of file From 36a3c01b61ec1d5720f6782e34643c99849be265 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sun, 26 Feb 2023 16:41:14 +0100 Subject: [PATCH 110/665] Update index.md --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 8763ee5c152..88d6c095b4c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -56,6 +56,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | +| [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | ## 2022 From d1fe0110132bca333d441e9aeb8c054574f42d75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 27 Feb 2023 11:50:55 +0100 Subject: [PATCH 111/665] Improve maintenance and help pages --- README.md | 24 ++++++++++++------------ docs/help.md | 20 ++++++++++---------- docs/maintenance.md | 19 +++++++++++++------ docusaurus.config.js | 2 ++ 4 files changed, 37 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 776bf88ac9f..6205d1d610d 100644 --- a/README.md +++ b/README.md @@ -20,9 +20,9 @@ - [:hammer\_and\_wrench: Maintenance Grants](#hammer_and_wrench-maintenance-grants) - [:moneybag: Referral Program](#moneybag-referral-program) - [:bulb: Help](#bulb-help) - - [Additional information](#additional-information) - - [Real-time conversation](#real-time-conversation) + - [Real-time Conversation](#real-time-conversation) - [Office Hours](#office-hours) + - [Additional Information](#additional-information) - [:rocket: Alternative Funding Sources](#rocket-alternative-funding-sources) - [Substrate Builders Program vs Treasury vs Web3 Grants](#substrate-builders-program-vs-treasury-vs-web3-grants) - [Substrate Builders Program](#substrate-builders-program) @@ -227,24 +227,18 @@ In order to be eligible for the referral bonus, the application itself must cont ## :bulb: Help -### Additional information +### Real-time Conversation -| | | | | | | -| :-: | :-: | :-: | :-: | :-: | :-: | -| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +We have a Matrix channel for grant-related questions and activities. Head over there to ask grants-related questions, share your experience with other applications and grantees, or simply hang out: -### Real-time conversation +- [W3F Grants Community](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org) -We have Matrix/Element channels for real-time discussions on Web3 and Polkadot. Join the conversation. +We also have Matrix/Element channels for real-time discussions on Web3 and Polkadot. Join the conversation! - [Web3 Foundation Chat](https://matrix.to/#/#w3f:matrix.org) - [Polkadot Space](https://matrix.to/#/#polkadot:web3.foundation) - [Kusama Space](https://matrix.to/#/#kusama:web3.foundation) -Besides, we also have a **community room for all grant recipients**. Head over to that room to share your experience with other grantees, ask grants-related questions or simply hang out: - -- [W3F Grants Community](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org) - ### Office Hours Web3 Foundation Grants Office Hours are a chance to ask the grants team questions regarding a specific (potential) grant application. It offers @@ -261,6 +255,12 @@ Apply for Office Hours if you It is **not** a chance to pitch your project, especially since only a small subset of the committee will participate in the call. To apply, please fill out the [Office Hours :alarm_clock: form](https://forms.gle/54xkiqU37WwdN9UR6). Be as specific as possible, so we can help you more quickly. We will get back to you with follow-up questions or a link for booking a timeslot. +### Additional Information + +| | | | | | | +| :-: | :-: | :-: | :-: | :-: | :-: | +| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | + ## :rocket: Alternative Funding Sources diff --git a/docs/help.md b/docs/help.md index 5bfb1be914d..66d04a20bfe 100644 --- a/docs/help.md +++ b/docs/help.md @@ -4,24 +4,18 @@ title: Help --- -### Additional information +### Real-time Conversation -| | | | | | | -| :-: | :-: | :-: | :-: | :-: | :-: | -| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +We have a Matrix channel for grant-related questions and activities. Head over there to ask grants-related questions, share your experience with other applications and grantees, or simply hang out: -### Real-time conversation +- [W3F Grants Community](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org) -We have Matrix/Element channels for real-time discussions on Web3 and Polkadot. Join the conversation. +We also have Matrix/Element channels for real-time discussions on Web3 and Polkadot. Join the conversation! - [Web3 Foundation Chat](https://matrix.to/#/#w3f:matrix.org) - [Polkadot Space](https://matrix.to/#/#polkadot:web3.foundation) - [Kusama Space](https://matrix.to/#/#kusama:web3.foundation) -Besides, we also have a **community room for all grant recipients**. Head over to that room to share your experience with other grantees, ask grants-related questions or simply hang out: - -- [W3F Grants Community](https://matrix.to/#/!XpynPDLusWUWfDpaqr:matrix.org?via=web3.foundation&via=matrix.org) - ### Office Hours Web3 Foundation Grants Office Hours are a chance to ask the grants team questions regarding a specific (potential) grant application. It offers @@ -37,3 +31,9 @@ Apply for Office Hours if you - need help finding the resources you need. It is **not** a chance to pitch your project, especially since only a small subset of the committee will participate in the call. To apply, please fill out the [Office Hours :alarm_clock: form](https://forms.gle/54xkiqU37WwdN9UR6). Be as specific as possible, so we can help you more quickly. We will get back to you with follow-up questions or a link for booking a timeslot. + +### Additional Information + +| | | | | | | +| :-: | :-: | :-: | :-: | :-: | :-: | +| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | diff --git a/docs/maintenance.md b/docs/maintenance.md index 7a68592e73f..600b04eba53 100644 --- a/docs/maintenance.md +++ b/docs/maintenance.md @@ -7,19 +7,26 @@ title: Maintenance Grants Maintenance Grants are yet another idea to get involved with the Polkadot community. If you are a user of an open-source library that has gone out of date, or you simply want to work on small new features/fix bugs in these repos, we can support your contributions via a grant. We are happy to award rolling grants on a monthly basis, as long as the work done within each time period is performed to a quality standard deemed satisfactory by the grant evaluators. +## Application Process + The process of applying for a Maintenance Grant is similar to what was already outlined above, but instead of defining very detailed deliverables for each milestone upfront, we will ask you to specify, where possible: -- The repo(s) that need maintenance -- Outline of why the specific project should continue being supported -- Broad overview of the features/bugs that need development contributions -- An assurance that the current project owners are willing to review/accept your contributions (a note here: if you're fully taking over the project, it would make more sense for the current owners to transfer the repository to your organisation. If you can't get in touch with them, you may, of course, work on a fork) -- Max budget per month +- the repo(s) that need maintenance, +- outline of why the specific project should continue being supported, +- broad overview of the features/bugs that need development contributions, +- an assurance that the current project owners are willing to review/accept your contributions (a note here: if you're fully taking over the project, it would make more sense for the current owners to transfer the repository to your organisation. If you can't get in touch with them, you may, of course, work on a fork), and +- max budget per month. Then, at the end of each month, you will need to provide a comprehensive report of the work done, including the list of issues/bugs/pull requests worked on, time spent on each of these & finally the associated cost. It is quite likely that the time allocation & cost will vary from month to month, depending on the nature of the project you're contributing to. The delivery process and format should follow that of a typical [milestone delivery](https://github.com/w3f/Grant-Milestone-Delivery#mailbox-milestone-delivery-process), as will the processing of the payment. -Please note that: +## Notes - Maintenance grants, as the name suggests, are meant to allow teams/individuals to maintain a certain project, and not to continue its development or implement larger features. Please use the traditional application process for this purpose. - The 1-month timeframe is just a guideline. If you find it unsuitable for you or the chosen project for any reason, feel free to adjust as seen fit and point this out in your application. - Please bear in mind that the Grants Committee might be stricter in accepting maintainers when compared to typical grants, mostly selecting for applicants with proven experience in the relevant tech stacks. - Maintenance Grants are only awarded for fixed timeframes. The requested duration needs to be specified in the application. + +## Help + +- For a list of previously accepted maintenance grants, see the `applications/maintenance` folder in our grants repository. +- For a list of ways to reach us and ask questions, see our [Help page](help.md). diff --git a/docusaurus.config.js b/docusaurus.config.js index 2fcf1be149d..4fd923b27c4 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -143,6 +143,8 @@ module.exports = { exclude: [ 'applications/application-template.md', 'applications/example-project.md', + 'applications/maintenance/maintenance-template.md', + 'applications/application-template-research.md', 'docs/RFPs/suggestion-template.md', '.docusaurus/**', '.github/**', From 6352eece192e105e2d44270c2b97a75f4a4f3845 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 27 Feb 2023 02:52:21 -0800 Subject: [PATCH 112/665] Update ajuna_network_follow_up.md (#1571 Add level to fix actions --- applications/ajuna_network_follow_up.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/ajuna_network_follow_up.md b/applications/ajuna_network_follow_up.md index b621692be06..9a0086c34b1 100644 --- a/applications/ajuna_network_follow_up.md +++ b/applications/ajuna_network_follow_up.md @@ -2,7 +2,7 @@ * **Team Name:** Ajuna Network Team * **Payment Address:** 1. Milestone: 1FgaH4sRHF4boR4Fw316ddKMJbFpsDXGeL 2-4. Milestone: 3H2shhx3GyMjc5Y4QuF9D5skbQgZDhvPMq -*The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe.* +* **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ![image](https://user-images.githubusercontent.com/17710198/136852531-d9eb47cd-efcd-4c88-bdbf-78dfcbffe287.png) From 85c185f98eec13fdca0181c5ad7d969627453dd5 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Mon, 27 Feb 2023 08:13:56 -0800 Subject: [PATCH 113/665] Move zondax maintenance application in /maintenance (#1572) --- applications/{ => maintenance}/Zondax-Support.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename applications/{ => maintenance}/Zondax-Support.md (100%) diff --git a/applications/Zondax-Support.md b/applications/maintenance/Zondax-Support.md similarity index 100% rename from applications/Zondax-Support.md rename to applications/maintenance/Zondax-Support.md From 1b3dfccbdcb23e898e13ccd3f60fd227349776fc Mon Sep 17 00:00:00 2001 From: Doordashcon Date: Mon, 27 Feb 2023 19:03:39 +0100 Subject: [PATCH 114/665] update payment address (#1570) --- applications/solidity-trie-verifier.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/solidity-trie-verifier.md b/applications/solidity-trie-verifier.md index 6e058a31bfb..b1cf75708d8 100644 --- a/applications/solidity-trie-verifier.md +++ b/applications/solidity-trie-verifier.md @@ -1,7 +1,7 @@ # solidity-trie-verifier - **Team Name:** Polytope Labs -- **Payment Address:** 0xC70ac55B07A070743555C5D12B263733eCae9f92 (Ethereum DAI) +- **Payment Address:** 0x486cbad2d704bc76f8d0cdda6aa93c94d53297b9 (Ethereum DAI) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From e5c2eb23dbce850c4bf1f6c0f3eef99e54d09b57 Mon Sep 17 00:00:00 2001 From: frisitano <35734660+frisitano@users.noreply.github.com> Date: Mon, 27 Feb 2023 18:05:21 +0000 Subject: [PATCH 115/665] Binary merkle tree (#1569) * binary merkle tree application * update application * update merkle tree application --- applications/binary_merkle_tree.md | 50 +++++++++++++++++++++++++----- 1 file changed, 43 insertions(+), 7 deletions(-) diff --git a/applications/binary_merkle_tree.md b/applications/binary_merkle_tree.md index 36e95adc357..5d4bc060533 100644 --- a/applications/binary_merkle_tree.md +++ b/applications/binary_merkle_tree.md @@ -47,11 +47,11 @@ pub trait Tree { fn depth (&self) -> usize; - fn get_value(&self, index: usize) -> Result, TreeError>; + fn value(&self, index: usize) -> Result, TreeError>; - fn get_leaf(&self, index: usize) -> Result, TreeError>; + fn leaf(&self, index: usize) -> Result, TreeError>; - fn get_proof(&self, index: usize) -> Result>, TreeError>; + fn proof(&self, index: usize) -> Result>, TreeError>; } pub struct TreeDBMut<'a, H: Hasher> { @@ -68,17 +68,49 @@ pub trait TreeMut { fn depth(&self) -> uszie; - fn get_value(&self, index: usize) -> Result, TreeError>; + fn value(&self, index: usize) -> Result, TreeError>; - fn get_leaf(&self, index: usize) -> Result, TreeError>; + fn leaf(&self, index: usize) -> Result, TreeError>; - fn get_proof(&self, index: usize) -> Result>, TreeError>; + fn proof(&self, index: usize) -> Result>, TreeError>; - fn insert_value(&mut self, index: usize, value: DBValue) -> Result, TreeError>; + fn insert(&mut self, index: usize, value: DBValue) -> Result, TreeError>; + + fn remove(&mut self, key: &[u8]) -> Result, TreeError>; fn commit(&mut self); } +pub trait SparseTree { + fn root(&self) -> &H::Out; + + fn depth(&self) -> usize; + + fn value(&self, key: &[u8]) -> Result, TreeError>; + + fn leaf(&self, key: &[u8]) -> Result, TreeError>; + + fn proof(&self, key: &[u8]) -> Result>, TreeError>; +} + +pub trait SparseTreeMut { + fn root(&mut self) -> &H::Out; + + fn depth(&self) -> usize; + + fn value(&self, key: &[u8]) -> Result, TreeError>; + + fn leaf(&self, key: &[u8]) -> Result, TreeError>; + + fn proof(&self, key: &[u8]) -> Result>>, TreeError>; + + fn insert(&mut self, key: &[u8], value: DBValue) -> Result, TreeError>; + + fn remove(&mut self, key: &[u8]) -> Result, TreeError>; + + fn commit(&mut self, key: &[u8]); +} + pub struct Recorder { nodes: Vec } @@ -229,6 +261,8 @@ The project has not started yet. We have defined the requirements and designed - **FTE:** 2 - **Costs:** 10,000 USD +- **Estimated extension required** 2 weeks (as of 25/2/2023) + | Number | Deliverable | Specification | | -----: |----------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 0a. | License | Apache 2.0 / GPLv3 / MIT / Unlicense | @@ -244,6 +278,8 @@ The project has not started yet. We have defined the requirements and designed - **FTE:** 2 - **Costs:** 15,000 USD +- **Estimated extension required** 2 months (following completion of milestone 1) + | Number | Deliverable | Specification | | -----: |------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 0a. | License | Apache 2.0 / GPLv3 / MIT / Unlicense | From 3a5caa5163c3778ccbfce57f06cd548c1cc61186 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Mon, 27 Feb 2023 14:03:39 -0500 Subject: [PATCH 116/665] Update application index (#1573) Afloat team delivered last milestone (4) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 88d6c095b4c..48ba7f6e7f6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -172,7 +172,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Dante Network](https://www.dantechain.com/) | [Dante Network](./Dante_Network.md) | [GitHub](https://github.com/dantenetwork) | ☐ | ☒ | ☒ | | [Verida](https://www.verida.io/) | [Single Sign-On for Apps](./verida_network.md) | [GitHub](https://github.com/verida) | ☐ | ☐ | ☐ | | [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | -| [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☐ | +| [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | | [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | | [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | From 7754fd8a759237e34dd9d19b4481cca70bbde634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 28 Feb 2023 09:17:30 +0100 Subject: [PATCH 117/665] Clean up applications index markdown --- applications/index.md | 72 +++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/applications/index.md b/applications/index.md index 48ba7f6e7f6..3aea421d9be 100644 --- a/applications/index.md +++ b/applications/index.md @@ -25,38 +25,38 @@ Use this page for an overview of all public grants and their status. Use the sid [Menu🔝](#menu) -| Team | Project | Link | Terminated | First Delivery | Completed | -| :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | -| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | -| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | -| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | -| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | -| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | -| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | -| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | -| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | -| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | -| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | -| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | -| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | -| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | -| [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | -| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | -| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | -| [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | -| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | -| [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | +| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | +| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | +| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | +| [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | +| [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | +| [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | +| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | +| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | +| [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | +| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | +| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | +| [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | +| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | +| [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | ## 2022 @@ -93,7 +93,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | -| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | +| [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | @@ -103,9 +103,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | -| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | -| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | +| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | +| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 15 - Third Quarter 2022 From 4b3cb36293c77c71aaedd7944a2c62a38f6eace1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 28 Feb 2023 09:19:24 +0100 Subject: [PATCH 118/665] PrivaDEX 1st and last milestone completed --- applications/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/index.md b/applications/index.md index 3aea421d9be..0d1e3ea773c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -103,9 +103,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | -| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☐ | ☐ | -| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | +| OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | +| [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 15 - Third Quarter 2022 From 85391136a46e04cf9aafb4ddeb9327b108fae7fa Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 28 Feb 2023 02:12:47 -0800 Subject: [PATCH 119/665] Update index.md (#1574) Supersig -> Completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0d1e3ea773c..1e71179c4b3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -179,7 +179,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | | [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | -| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☐ | +| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☒ | | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | From 908a25594c2f3456cf8d56607341bc8a5d064728 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 1 Mar 2023 09:28:29 -0300 Subject: [PATCH 120/665] Update index.md (#1576) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1e71179c4b3..f54007aa882 100644 --- a/applications/index.md +++ b/applications/index.md @@ -81,7 +81,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☐ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☐ | ☐ | +| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☐ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | From 28ca1633f7ea4ec0faeba63ada6f44aa5670b476 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Thu, 2 Mar 2023 01:07:52 -0800 Subject: [PATCH 121/665] Update MangoSale_Protocol.md (#1578) --- applications/MangoSale_Protocol.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/MangoSale_Protocol.md b/applications/MangoSale_Protocol.md index 6619478bfe4..c502002abdf 100644 --- a/applications/MangoSale_Protocol.md +++ b/applications/MangoSale_Protocol.md @@ -259,7 +259,7 @@ In the Substrate/Polkadot/Kusama ecosystem, we have not found any similar produ ### Contact -- **Contact Name:Jason Zhao** +- **Contact Name:** Jason Zhao - **Contact Email:** MangoBOXLabs@gmail.com - **Website: mangobox.xyz** From a307d244de9211743a0e17cb9856f6cfdfae6fe3 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 2 Mar 2023 04:08:40 -0500 Subject: [PATCH 122/665] Update README.md (#1577) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 6205d1d610d..d1e6a089b40 100644 --- a/README.md +++ b/README.md @@ -300,6 +300,7 @@ The [Substrate Builders Program](https://substrate.io/ecosystem/substrate-builde The treasury is a pot of on-chain funds collected through transaction fees, slashing, staking inefficiencies, etc. The funds held in the treasury can be spent on spending proposals. Both [Polkadot](https://polkadot.network/) and [Kusama](https://kusama.network/) offer everyone the opportunity to apply for funding via the treasury. See: - [Treasury](https://polkadot.network/treasury/) +- [Treasury Bounties](https://polkadot.subsquare.io/treasury/bounties) - [Polkadot Treasury Guide](https://docs.google.com/document/d/1IZykdp2cyQavcRyZd_dgNj5DcgxgZR6kAqGdcNARu1w) - [Kusama Treasury Guide](https://docs.google.com/document/d/1p3UQUjph5t8TVaWnTkfrI5mE-BABnM9Xvtuhdlhl6JE) From bf8f9770b56095d502f376f945f1028793699734 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 2 Mar 2023 10:51:46 +0100 Subject: [PATCH 123/665] Update funding.md Update on the website --- docs/funding.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/funding.md b/docs/funding.md index 33af5de690f..9ce7e8be6be 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -9,7 +9,8 @@ Some funding sources might be more and some less suitable for your project throu The treasury is a pot of on-chain funds collected through transaction fees, slashing, staking inefficiencies, etc. The funds held in the treasury can be spent on spending proposals. Both [Polkadot](https://polkadot.network/) and [Kusama](https://kusama.network/) offer everyone the opportunity to apply for funding via the treasury. See: -- [Treasury Wiki](https://wiki.polkadot.network/docs/en/learn-treasury) +- [Treasury](https://polkadot.network/treasury/) +- [Treasury Bounties](https://polkadot.subsquare.io/treasury/bounties) - [Polkadot Treasury Guide](https://docs.google.com/document/d/1IZykdp2cyQavcRyZd_dgNj5DcgxgZR6kAqGdcNARu1w) - [Kusama Treasury Guide](https://docs.google.com/document/d/1p3UQUjph5t8TVaWnTkfrI5mE-BABnM9Xvtuhdlhl6JE) From 549bb50e75d99ad9977a1f5ebc8ed721a608a6eb Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 2 Mar 2023 14:47:41 +0100 Subject: [PATCH 124/665] Update index.md Update Java host --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f54007aa882..fa6910914d9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -98,7 +98,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | -| [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | +| [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | From e1a92e3da2c0605adef9c3a9af6433ae3d796dc9 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 2 Mar 2023 15:04:45 +0100 Subject: [PATCH 125/665] Update research-feasibiliy-java-host.md Fix amount and duration --- applications/research-feasibiliy-java-host.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/research-feasibiliy-java-host.md b/applications/research-feasibiliy-java-host.md index ac2b5a097cc..c7a10cc53ed 100644 --- a/applications/research-feasibiliy-java-host.md +++ b/applications/research-feasibiliy-java-host.md @@ -183,9 +183,9 @@ Described below are the steps we think are necessary to get a deep understanding ### Milestone 1 — Research the feasibility of Polkadot Host in Java -- **Estimated duration:** 4 working weeks +- **Estimated duration:** 6 working weeks - **FTE:** 2 -- **Costs:** $24,000 +- **Costs:** $36,000 This milestone will: @@ -213,4 +213,4 @@ after delivering this research. # Additional Information **➕** LimeChain has been a long-time contributor to the Substrate ecosystem mainly focused on developer tooling. Due to our -involvement in the space, we are working with various clients, developing smart contracts and working on parachains. \ No newline at end of file +involvement in the space, we are working with various clients, developing smart contracts and working on parachains. From c494af8a790be6e7587071eeb833710066987df2 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 2 Mar 2023 15:24:45 +0100 Subject: [PATCH 126/665] update rfps --- .../alternative_polkadot_host_implementations.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Under Development}/alternative_polkadot_host_implementations.md (91%) diff --git a/docs/RFPs/Open/alternative_polkadot_host_implementations.md b/docs/RFPs/Under Development/alternative_polkadot_host_implementations.md similarity index 91% rename from docs/RFPs/Open/alternative_polkadot_host_implementations.md rename to docs/RFPs/Under Development/alternative_polkadot_host_implementations.md index 58beae93c31..8f182c3fb29 100644 --- a/docs/RFPs/Open/alternative_polkadot_host_implementations.md +++ b/docs/RFPs/Under Development/alternative_polkadot_host_implementations.md @@ -1,6 +1,6 @@ # Alternative Polkadot Host Implementation -* **Status:** Open +* **Status:** [Under Development 1](https://github.com/LimeChain/java-host-research), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/hybrid_node_research.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index dc18578735a..3400bfc8105 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -28,7 +28,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Status | Last Updated | | :-- | :----: | :----------: | | [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 🟢 | 29.11.2021 | -| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟢 | 29.11.2021 | +| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟡 | 02.03.2023 | | [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | | [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | From 3c801641d80fc6a3022799e38f0e57c5f9d23272 Mon Sep 17 00:00:00 2001 From: brendaloya <35778124+brendaloya@users.noreply.github.com> Date: Thu, 2 Mar 2023 11:36:54 -0500 Subject: [PATCH 127/665] Tellor grant application (#1532) * Brenda (#2) * added Tellor's application * chore: clarify proposal * updated reporter repo * updated tellor.md --------- Co-authored-by: Frank Bell * Brenda (#3) * added Tellor's application * chore: clarify proposal * updated reporter repo * updated tellor.md * updated milestones --------- Co-authored-by: Frank Bell * addressed comments. Added milestone 2 headline, removed redundant testin deliverable on milestone 1 deliverable 3, expanded on milestone 2 delivarable 2 * added clarity to milestone 2 deliverable 2 --------- Co-authored-by: Frank Bell --- applications/Tellor.md | 228 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 228 insertions(+) create mode 100644 applications/Tellor.md diff --git a/applications/Tellor.md b/applications/Tellor.md new file mode 100644 index 00000000000..51ec98a776a --- /dev/null +++ b/applications/Tellor.md @@ -0,0 +1,228 @@ +# Tellor + +- **Team Name:** Tellor Inc +- **Payment Address:** Ethereum 0x1B8E06E7133B89ea5A799Bf2bF0221aE71959190 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +The Tellor oracle system is a fully decentralized community focused on securely placing data on-chain. The oracle mechanism works by using simple crypto-economic incentives to secure data through staking and dispute mechanisms, while the community is bound by a token which utilizes an anonymous governance system and monetary policy to reward and motivate adoption and development of the network. + +### Overview + +Oracles are a key piece of infrastructure for any blockchain ecosystem. Whether it’s the ability to query price data for defi applications, connect to chains outside of their own system, or make governance decisions based on real world input, oracles make the future of a chain not only exciting, but relevant to the real world. + +Polkadot builders need robust tooling to leverage the full potential of Polkadot’s multichain environment. To realize a fully functional Polkadot ecosystem, there is a need to integrate a reliable and flexible oracle solution for accessing secure data on any parachain. + +The Tellor Proposal: + +Tellor plans to implement an oracle pallet along with a deployment of controller smart contracts on a to-be-selected EVM parachain that will handle the staking, governance, and reward system. This will enable parachains across the ecosystem to read, and/or request a push of oracle data. + +This integration supports the many smart contract applications and parachain pallets requesting truly decentralized oracles across Polkadot’s environment: +oracle consumer smart contracts deployed on the same EVM parachain will use the existing Tellor oracle system as is, +while oracle consumer parachains will interact with the controller contracts via XCM. EVM/WASM smart contracts on any other smart contract parachain could also consume oracle data via the oracle pallet once installed there. + +The controller smart contracts will interact with the oracle pallet via Solidity precompiles, precompiled contracts which handle the call translation from Solidity to native Substrate pallets, and XCM. +The XCM pallets then handle cross-chain messaging, effectively enabling the smart contracts to invoke dispatchable functions within the oracle pallet installed on other parachains, as well as allow the pallet to invoke functions available within the controller smart contracts. + +### Project Details + +The Tellor oracle system is currently deployed to various EVM chains as a set of Solidity smart contracts. The existing solution has been translated into one that ensures minimal changes to the existing smart contracts, whilst enabling parachains to make use of Tellor oracle functionality via a native Substrate pallet and cross-chain messaging. + +The modified smart contracts will be deployed to an EVM smart contract parachain and the pallet incorporated within any parachain requiring oracle functionality, classified as an oracle consumer parachain. + +**Oracle Solution Components** + +The major components have been identified as follows, along with a description of the adaptations/implementation required. + +![PolkaTellor design](https://github.com/tellor-io/PolkaTellor/blob/main/public/PolkaTellorDesign.png) + + +**Oracle Contract** +The main oracle contract which handles staking, reporting and slashing, which is controlled by the Governance contract. Oracle reporters are required to stake a token to ensure data integrity before reporting oracle data. Data is reported on-chain using a query identifier, a hash of an off-chain data specification, and a simple byte array representing the data. The Oracle contract also uses its own functionality to be provided with a current staking token price, which is used to dynamically adjust the minimum stake amount (to guarantee a minimum amount of security). + +The existing smart contract will need to be adapted to support staking by parachain, so that corresponding staking events/balances can be reported from the contract to oracle consumer parachains, effectively unlocking oracle reporters to begin reporting data to these consumer parachains directly. + +The revised Oracle contract will continue to provide existing functionality to the local smart contract parachain on which it is deployed, enabling other smart contracts deployed on the same chain to use the oracle solution as-is. + +**Governance Contract** +Used to handle oracle data disputes, where a successful dispute results in the corresponding oracle data reporter having their stake slashed and distributed to the dispute initiator via the Oracle contract. Governance votes are split equally between the staking token holders, reporters, users and the Tellor team: the staking token holders are weighted by on-chain token balances, active reporters by non-transferrable ‘reporter tokens’ earned for each report they provide, users by the number of tips and the team as a tie-breaker. + +Data disputes for an oracle consumer parachain will originate on said parachain and then be reported into the Governance contract for dispute resolution. The existing Governance smart contract will therefore need to be adapted to support disputes by parachain, so that the result of disputes can be reported back to the corresponding oracle consumer parachain to take additional action. + +Vote weighting will also need to take parachain state into account, as the oracle users and reporters are now spread out across parachains in the ecosystem. Each consumer parachain could be notified of a new round of dispute voting, along with an expected duration. The oracle users and reporters of each parachain could then cast their votes on their respective parachains, acting as proxies by collating votes until finally submitting them before the voting deadline, along with additional information used to weight the votes (total submitted data points for reporters, total tips for oracle users). + +**AutoPay Contract** +This smart contract is responsible for the creation and funding of data feeds by an oracle data consumer, as well as the payment to oracle reporters. It keeps track of data submissions and user tips, allowing reporters to claim rewards as required. A percentage of the claim is taken as fees, which goes towards staking rewards. + +This functionality will need to be ported to a native Substrate pallet, so that an oracle consumer parachain can create and fund feeds as well as pay reporters locally using its own token. A reporter will earn local staking rewards based on their percentage of the overall parachain stake locked in the Oracle contract. + +**Consumer (Using Tellor) Contract** +The Using Tellor contract is incorporated into consumer smart contracts to access reported oracle data.The functionality and APIs exposed here will need to be ported to a native Substrate pallet, so that a parachain can make use of available oracle data stored within its own chain state. + +**Parachain Integration Contract** +A new lightweight smart contract to handle parachain registration and ease parachain integration from the Oracle and Governance contracts. Registration provides parachain-specific configuration and ensures that sensitive functionality can only be called by the corresponding consumer parachain ‘owner’ accounts. Helper functions will abstract the necessary call encodings for remote execution, keeping cross-chain messaging functionality separate from oracle and governance logic. + +Parachain registration could also require additional staking within the Oracle contract, further adding to the economic security of the oracle solution. + +**Tellor Pallet** +An amalgamation of aspects of the functionality from the Oracle, AutoPay and Consumer contracts, enabling oracle functionality on any parachain secured by stake within the Oracle contract. Allows oracle data feed setup and funding as well as oracle data reporting and consumption, ensuring that all oracle data for a particular parachain is stored within its own local state. + +Oracle reporters must have staked the necessary tokens for a parachain via the Oracle contract before they are able to start reporting on a consumer parachain. Oracle reporters earn rewards for reporting oracle data in the token of the parachain. + +Data disputes originate via the pallet on the consumer chain and require a dispute fee, typically 10% of stake amount and increasing with each round, to be locked before being reported to the Governance contract where they are voted on, locking an oracle reporter from reporting to the parachain until resolution. + +*Tellor core architecture:* +The underlying oracle design will follow the same structure as Tellor on other chains, namely a game theoretic design where data is put on-chain by staked reporters who are liable to lose their stake if disputed. The system can be as fast as participants desire, but like other blockchain architectures, is more secure the slower the oracle use is since it allows more time for disputes. + +Tellor architecture of the smart contracts can be found in the [TellorFlex github repository](https://github.com/tellor-io/tellorFlex) or in our [whitepaper](https://tellor.io/whitepaper/). Information on the Tellor Reporter (node) software can be found in the [Tellor Docs](https://docs.tellor.io/tellor/reporting-data/introduction). + +*Prior work or research on the topic:* +The team received an Ethereum foundation grant for researching bridges as the team was initially designing a cross-chain decentralized derivative protocol. There were no available decentralized oracles at the time and that prompted the team to design and build a decentralized oracle, which soon was dubbed Tellor. Tellor has been live on Ethereum mainnet since August 2019 and the team has continued to iterate to increase decentralization, token dependency, and improve upon governance. We have launched on several chains as of May 2022, including Ethereum, Polygon, Arbitrum, Algorand, and corresponding testnets. + +*What your project is not or will not provide or implement:* +Tellor will launch the system and help design/solve any specific integration for users in the substrate ecosystem. We will initially help bootstrap a network of reporters, however Tellor is a system that is designed to run without any team intervention. Being crypto-economically incentivized, reporters will stay in networks that provide enough incentives/rewards for them to provide data. Tellor can provide the software for reporters to run, however the size of the network will largely depend on whether users are active in the system and funding oracle reporters. It is important for the web3 ecosystem and tellor to work together to ensure enough usage and monitoring is enabled on the system once it is launched. + + + +### Ecosystem Fit + +Ecosystem Needs and Fit - For a long time the Tellor team has been fans of the Polkadot ecosystem and their pursuit of decentralization. The values of security, transparency, and truly open and decentralized networks is something that Tellor was built upon and lines up perfectly with the ecosystem built here. Oracles are a necessity for decentralized applications to meet their full potential and to expand the interoperability between chains. Although there are competitors, Tellor is an oracle built on the values which align with projects built on Polkadot. We provide the needed infrastructure for chains’ use cases to expand, while at the same time remaining uncompromising in our approach towards censorship resistance and decentralization. + +Target Audience - The target audience is developers needing connections to off-chain data. Whether it’s connections to other non-XCM connected chains, or even straight web2 off-chain data, Tellor can provide the ecosystem with a general purpose oracle that can handle any data, at any speed, for any use case. The initial goal is for the Tellor oracle pallet to be included/added to parachains so that developers can use it to access off-chain data in any smart contract structure on the ecosystem. + +Similar projects - A similar project to Tellor is the Chainlink Substrate oracle pallet. Tellor also provides off chain data however, Tellor’s design differs greatly in areas where it matters. Mainly, the Tellor oracle has a greater (actual) degree of decentralization, is crypto economically incentivized versus reputation based, and is completely flexible for the needs of any data type or frequency. In addition, once the network of reporters is bootstrapped, there is minimal team intervention needed. Anyone can become a reporter by staking, anyone can dispute the validity of the data for a fee, and the user can incentivize reporters to quickly add or replace the data they need by posting a reward. The system is permissionless, as well as sybil and censorship resistant. + + +## Team :busts_in_silhouette: + +### Team members + +Our team consists of 7 developers and 3 non-technical team members. 3 of us are cofounders - Brenda Loya CEO, Nick Fett CTO, and Michael Zemrose CSO. + +The developers of Tellor have years of blockchain specific coding experience. + + +### Contact + +- **Contact Name:** Brenda Loya +- **Contact Email:** brenda@tellor.io +- **Website:** www.Tellor.io + +### Legal Structure + +- **Registered Address:** 118 N. Market Street Suite 110, Frederick, MD 21701 +- **Registered Legal Entity:** Tellor Inc + +### Team's experience + +The Tellor team has broad experience working in blockchain technology. The founders have been in the space for a decade now and have authored research papers, performed audits, been active members of DAO’s, and worked on several L1 paradigms over the years. The main Tellor repo has most of our work, however individual achievements of those in the company are their own. + +### Team Code Repos + +- https://github.com/tellor-io/ + + +Github profiles of our dev team: + +- https://github.com/themandalore - Nick Fett CTO +- https://github.com/brendaloya - Brenda Loya CEO +- https://github.com/tkernell - Integrations Engineer +- https://github.com/orgs/tellor-io/people/akremstudy - Developer +- https://github.com/tallywiesenberg - Developer +- https://github.com/oraclown - Developer + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/brendaloya/ +- https://www.linkedin.com/in/nicholas-fett/ +- https://www.linkedin.com/in/zemrose +- https://www.linkedin.com/in/timothy-kernell-27b213102/ +- https://www.linkedin.com/in/tally-wiesenberg/ +- https://www.linkedin.com/in/owenburton22/ + +## Development Status :open_book: + +The smart contract structure for Tellor is finished for most EVM chains, but will need specific changes. Initial design discussions have been had with Robin, Frank Bell, and Guatam and we have specifications and even some base work done around the design. + +- Medium Articles - https://medium.com/@tellor +- Research - ​​https://vc.bridgew.edu/cgi/viewcontent.cgi?article=1037&context=ijcic +- Smart Contract repository - https://github.com/tellor-io/tellorFlex +- Reporter (Node) repository - https://github.com/tellor-io/telliot-feeds + +## Development Roadmap :nut_and_bolt: + +| Milestone | Description | Stack | Resources | Funding | +| --------- | -------------------------------------------------------------------------------- | --------------------- | --------- | ------- | +| 1 | Develop and launch Tellor core contracts on an EVM parachain | Solidity / javascript | 2 devs | 20,000 | +| 2 | Create and test oracle pallet and complete documentation with usage examples | Rust / Solidity | 2 devs | 20,000 | + + + + + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 40,000 USD + + +### Milestone 1 — Launch Tellor core contracts on an EVM parachain + + +- **Estimated duration:** 2 month +- **FTE:** 2 +- **Costs:** 20,000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT| +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1 | Develop Controller contracts | We will provide a set of solidity smart contracts with the functionality described above in the [Project Details](#project-details) | +| 2 | Develop Parachain integration contract| We will provide an integration contract | + + +### Milestone 2 — Create and test oracle pallet and complete documentation with usage examples + +- **Estimated Duration:** 2 months +- **FTE:** 2 +- **Costs:** 20,000 USD + +Details: A new Substrate pallet will be required which includes the core oracle data reporting and querying logic as well as staking rewards and payment logic, ported from the existing tellorFlex (oracle), AutoPay and UsingTellor (consumer) smart contracts. All the logic within the pallet will simply use the token of the parachain. Any parachain user can create and fund feeds, which are fulfilled by oracle reporters which have deposited a stake to the Oracle contract on the smart contract parachain. Once completed, integrating and testing the pallet and the controller contracts will take significant work and documentation in order to make a robust and user-friendly oracle module. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1 | Substrate Oracle pallet design and integration | We will provide the Substrate oracle pallet | +| 2 | Tests and a guide for testing functionallity of the the pallet with integration of a mock project on selected parachains| We will provide tests and a guide to test cross functionality of the system for interactions between the EVM chain and consumer chain and oracle pallet (meaning test the functinallity between milestone 1 and 2 delivarable 1 - solidity contracts, pallet, XCM)| +| 3 | Documentation/ Usage Examples| We will provide documenatation and usage examples for the system. | + + + +## Future Plans + +Tellor plans to work with the Polkadot ecosystem as they grow to identify new and better set-ups for the oracle structure on the system. Another key piece to the ongoing support is working directly with builders to get them integrated and create a large set of sample code and existing users that can help make Tellor the secure choice of oracle on the network. We’ll accomplish this by: + +- Becoming further engaged with the Polkadot ecosystem (hackathons, events, podcasts, etc.) +- Working on more specific documentation and builder engagement (stack questions, more sample repos through tellor) +- Direct outreach to projects (working closely with existing projects on Polkadot to increase the security and capabilities of their current codebase) + + +## Referral Program (optional) :moneybag: + +You can find more information about the program [here](../README.md#moneybag-referral-program). +- **Referrer:** Name of the Polkadot Ambassador or GitHub account of the Web3 Foundation grantee +- **Payment Address:** BTC, Ethereum (USDT/USDC/DAI) or Polkadot/Kusama (aUSD) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +We talked to Rohan at a few events about building on Polkadot and he recommended we apply! We’ve been in touch with Robin Ejsmond-Frey, Frank Bell, and Guatam from Parity who have done significant work with us in developing the specifications and design for the build. \ No newline at end of file From 655dcd1e9e6002191f547328ea040956f7db3713 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 2 Mar 2023 17:53:04 +0100 Subject: [PATCH 128/665] Update index.md Add Tellor --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index fa6910914d9..2a3c36c5141 100644 --- a/applications/index.md +++ b/applications/index.md @@ -57,6 +57,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | +| [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | ## 2022 From 3966857bd1d559e02629763cbfbb4995aee018eb Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 3 Mar 2023 09:17:58 +0100 Subject: [PATCH 129/665] Update index.md Complete Social Recovery Wallet Grant --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2a3c36c5141..ae5bad67fd7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -115,7 +115,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | -| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | +| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | | [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | | [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | From 76c1e8ff7110aba1f528065c768edabab261a4d6 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 3 Mar 2023 09:21:42 +0100 Subject: [PATCH 130/665] Update index.md --- applications/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/index.md b/applications/index.md index ae5bad67fd7..9d6076f0721 100644 --- a/applications/index.md +++ b/applications/index.md @@ -115,7 +115,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | -| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | +| [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | | [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | | [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | @@ -194,7 +194,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Faceless Protocol](https://github.com/HeisenbergLin22) | [Faceless Protocol](./faceless.md) | [GitHub](https://github.com/HeisenbergLin22) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain](./typechain-polkadot.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | -| [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☐ | +| [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☒ | | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | ### 🏄‍♀️ Wave 13 - First Quarter 2022 From 7c200c2d9b491b20fe50d65e65488082152c2234 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 3 Mar 2023 09:27:04 +0100 Subject: [PATCH 131/665] Update social-recovery-wallet.md --- docs/RFPs/Under Development/social-recovery-wallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RFPs/Under Development/social-recovery-wallet.md b/docs/RFPs/Under Development/social-recovery-wallet.md index b5f51233af6..579b05d5bd0 100644 --- a/docs/RFPs/Under Development/social-recovery-wallet.md +++ b/docs/RFPs/Under Development/social-recovery-wallet.md @@ -1,6 +1,6 @@ # Social Recovery Wallet -* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/Plus-social-recovery-wallet.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/social_recovery_wallet.md), [Under Development 3](https://github.com/w3f/Grants-Program/blob/master/applications/keysafe_network.md) +* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/Plus-social-recovery-wallet.md), [Implemented](https://github.com/hypha-dao/hashed-wallet), [Under Development 3](https://github.com/w3f/Grants-Program/blob/master/applications/keysafe_network.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: From 17b23c8dcd5fa7403130f5ef84a6b9cc1a442986 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 3 Mar 2023 09:28:10 +0100 Subject: [PATCH 132/665] Update rfps.md --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index 3400bfc8105..fac92c29a30 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -55,7 +55,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | | [raft-validators.md](RFPs/Open/raft-validators.md) | 🟢 | 23.11.2021 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | -| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🟡 | 05.07.2021 | +| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🔴 | 03.03.2023 | | [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | | [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | From 0153441a954336f94ccbf8609963fdafea53a33c Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Fri, 3 Mar 2023 05:40:20 -0800 Subject: [PATCH 133/665] Update index.md (#1583) Cyclops -> First delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9d6076f0721..759f519493b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -55,7 +55,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | -| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☐ | ☐ | +| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | From 2b627f0c98c185c4d10d5b0a0b50abb492d2e95f Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Sat, 4 Mar 2023 08:43:56 +1100 Subject: [PATCH 134/665] RFP: Designing Upchain - a framework for securing Substrate runtime upgrades and Substrate network upgrades (#1309 * RFP: Designing Upchain A framework for securing Substrate software update systems Signed-off-by: Mark Van de Vyver * RFP: Designing Upchain A framework for securing Substrate software update systems Signed-off-by: Mark Van de Vyver * Address review feedback Signed-off-by: Mark Van de Vyver * Address review feedback Signed-off-by: Mark Van de Vyver --------- Signed-off-by: Mark Van de Vyver --- .../uptane-for-substrate-design-and-scope.md | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 docs/rfps/Open/uptane-for-substrate-design-and-scope.md diff --git a/docs/rfps/Open/uptane-for-substrate-design-and-scope.md b/docs/rfps/Open/uptane-for-substrate-design-and-scope.md new file mode 100644 index 00000000000..f419262f612 --- /dev/null +++ b/docs/rfps/Open/uptane-for-substrate-design-and-scope.md @@ -0,0 +1,98 @@ +# Designing Upchain: A framework for securing Substrate software update systems + +* **Status:** Open +* **Proposer:** taqtiqa-mark +* **Your Project(s):** N.A. +* **Projects you think this work could be useful for** [Substrate runtime upgrades](https://docs.substrate.io/build/upgrade-the-runtime/) and [Substrate network upgrades](https://docs.substrate.io/tutorials/get-started/upgrade-a-running-network/) +* **Teams/People that could deliver the RFP** Parity, William Freudenberger (KILT), Albrecht Weiche + +## Project Description :page_facing_up: + +The Upchain Specification, a framework for securing Substrate runtime upgrades and Substrate network upgrades, by extending The Update Framework and modeled on Uptane (The Update Framework Specification extended for automobiles). + +This RFP seeks W3F Grant applications addressing/proposing how TUF can be integrated into Substrate. + +The UpChain specification should serve as an outline of the requirements a chain must implement in order to be described as integrating UpChain. + +The UpChain specification should allow for Parachin scaling, see for example [Parachain scaling by Parablock splitting](https://forum.polkadot.network/t/parachain-scaling-by-parablock-splitting/341). + +The target audience is authors of the Substrate relay and parachain upgrade logic. The specification should be followed by default in all Substrate runtime upgrades and Substrate network upgrades. +Developers using Substrate would be oblivious until an upgrade failed - at which point they would notice their legacy logic is still in place. + +There is considerable prior art to inform and guide the initial specification. +A greenfield design should not be accepted. + +Rather, the Milestone 2 document accompanying the design specification should reference: + +* [The Uptane Standard for Design and Implementation 2.0.0](https://uptane.github.io/papers/uptane-standard.2.0.0.html) +* [The Update Framework Specification](https://theupdateframework.github.io/specification/latest/) + +Articulating: + +* Deviations + * The section number and title in the Uptane and TUF specification that Upchain should deviate from. + * The Relay-parachain functionality lost or gained by this deviation, described in terms of TUF/Uptane functionality +* Extensions + * The section number and title in the Uptane and TUF specification that should be extended by Upchain + * The Relay-parachain functionality removed or added by this extension, described in terms of TUF/Uptane functionality +* Omissions + * The section number and title in the Uptane and TUF specification that should be omitted from Upchain + * The Relay-parachain functionality lost or gained by this omission, described in terms of TUF/Uptane functionality + +Specifically, elements of these two specifications should not silently vanish. + +### Context + +The Uptane (ECU update framework for automotives) is chosen as the template to begin with and contrast UpChain for a couple of reasons: + +* The specification should explicitly address Parachain scaling, see for example [Parachain scaling by Parablock splitting](https://forum.polkadot.network/t/parachain-scaling-by-parablock-splitting/341). +* While ECU updates have client-server model where centrally managed updates are pushed to clients, and upgrade failures must leave a vehicle in a safe and usable state. Substrate upgrades have a single source of truth that also must be pushed to nodes, and upgrade failures must leave a node in a safe and usable state. +* Further, there are implementations of the Uptane spec that are not trivial and that experience could be expected to inform the design of how UpChain protects Parachain scaling e.g. motivate any deviations or extensions. + +### Motivation + +I’ve come across several reports of a para-relay chain update/upgrade going awry and a chain is bricked, unable to produce blocks - hi-jinx ensue, and everyone lives happily ever after. + +One such case is discussed here: [How to recover a parachain](). The consensus appears to be: Automatic rollback is not possible, and a Parachain being inoperable for some period is the way things will be (hi-jinx required). + +Potential utility for the wider community is evidenced by the [Polkadot Summit: Barcamp (30 Nov, 1 Dec) topic Parachain Emergency Recovery](https://forum.polkadot.network/t/polkadot-summit-barcamp-submit-agenda-topics-30-nov-1-dec/669/8) + +## Deliverables :nut_and_bolt: + +Upchain Standard for Design and Implementation 1.0.0 + +### Scope + +The scope of "Designing UpChain" is limited to creating a spec which aims at mitigating/avoiding such upgrade failures. + +Guidelines to triage and recover after the issue occurred will likely depend on the detail of an implementation, hence should be deferred to the implementation phase. + +Scope includes providing recommendations and changes at the protocol level. +It also include analysis of performance overheads (e.g., overheads on the blockspace). +This may entail involving teams at parity/w3f. + +* **Total Estimated Duration:** Duration of the whole project +* **Full-time equivalent (FTE):** Amount of time (in days) required for a single person to complete this project ([see](https://en.wikipedia.org/wiki/Full-time_equivalent)) +* **Total Costs:** Amount of Payment in USD for the whole project. + +### Milestone 1 + +* **Estimated Duration:** Duration of milestone 1 +* **FTE:** Amount of time (in days) required for a single person to complete this milestone +* **Costs:** Amount of Payment in USD for milestone 1 + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 1. | Upchain Standard for Design and Implementation 1.0.0 | The Update Framework Specification extended for Substrate Relay and Parachains | + +This deliverable can be valuated by comparing the list of (sub-)sections with those from [The Update Framework](https://theupdateframework.github.io/specification/latest) - there should be no omissions. + +### Milestone 2 + +* **Estimated Duration:** Duration of milestone 1 +* **FTE:** Amount of time (in days) required for a single person to complete this milestone +* **Costs:** Amount of Payment in USD for milestone 1 + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| 1. | Upchain: Deviations, Extensions and Omissions from The Update Framework | As detailed above, a document setting out all deviations, extensions and omissions from The Update Framework | From 8806e4324e7db5ccdb43e15a13a0f92be5a26853 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 3 Mar 2023 22:54:00 +0100 Subject: [PATCH 135/665] Fix phrasing around RFPs (#1585 * Update README.md RFPs aren't applications * Update ideas.md (#1584) --- README.md | 2 +- docs/Introduction/ideas.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d1e6a089b40..558793ac623 100644 --- a/README.md +++ b/README.md @@ -70,7 +70,7 @@ An overview of existing projects in the Web 3.0 Technology Stack along with broa Finally, you don't need to start your own project in order to be eligible for a grant. Instead, some teams choose to port existing work to Substrate, where the pertinent licenses allow, or even to contribute to an existing open-source project. In the latter case, you should check in advance that the maintainers of the project are interested in your contribution, and the acceptance of the milestones will generally be tied to the inclusion of your work in said project. See the [Maintenance Grants section](#hammer_and_wrench-maintenance-grants) for more info. -If you have a **good concept of the technical challenges** that your idea entails and would like feedback before applying, you can send us an [email](mailto:grants@web3.foundation) and tell us about it. +If you have a **good concept of the technical challenges** that your idea entails and would like feedback/input before submitting it, you can send us an [email](mailto:grants@web3.foundation) and tell us about it. ### Support diff --git a/docs/Introduction/ideas.md b/docs/Introduction/ideas.md index 82ffd8ee563..8df9450df99 100644 --- a/docs/Introduction/ideas.md +++ b/docs/Introduction/ideas.md @@ -10,4 +10,4 @@ An overview of existing projects in the Web 3.0 Technology Stack along with broa Finally, you don't need to start your own project in order to be eligible for a grant. Instead, some teams choose to port existing work to Substrate, where the pertinent licenses allow, or even to contribute to an existing open-source project. In the latter case, you should check in advance that the maintainers of the project are interested in your contribution, and the acceptance of the milestones will generally be tied to the inclusion of your work in said project. See the [Maintenance Grants section](../maintenance.md) for more info. -If you have a **good concept of the technical challenges** that your idea entails and would like feedback before applying, you can send us an [email](mailto:grants@web3.foundation) and tell us about it. +If you have a **good concept of the technical challenges** that your idea entails and would like feedback/input before submitting it, you can send us an [email](mailto:grants@web3.foundation) and tell us about it. From 94959dd2d69449fb28477fcf51dc063f8fe1b5c6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sat, 4 Mar 2023 14:13:01 +0100 Subject: [PATCH 136/665] Update rfps.md Add uptane-for-substrate-design-and-scope.md --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index fac92c29a30..7a8268fbe18 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -60,6 +60,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | +| [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 🟢 | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | From 97e0019d8ec8ec525e6c96d1c2125e1b943d2669 Mon Sep 17 00:00:00 2001 From: Bolat Khojayev Date: Mon, 6 Mar 2023 00:47:59 -0700 Subject: [PATCH 137/665] Update to leetcoin application (#1550) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update leetcoin.md * Update applications/leetcoin.md typo fix Co-authored-by: Sebastian Müller * Update leetcoin.md * Update leetcoin.md --------- Co-authored-by: Sebastian Müller --- applications/leetcoin.md | 225 ++++++++++++++++++++++++++------------- 1 file changed, 152 insertions(+), 73 deletions(-) diff --git a/applications/leetcoin.md b/applications/leetcoin.md index 3a96a4e832f..44c8a76ab14 100644 --- a/applications/leetcoin.md +++ b/applications/leetcoin.md @@ -4,55 +4,118 @@ - **Payment Address:** 0x03e95B0657846cD3dCF500791506947272eE12c8 ETH - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - ## Project Overview :page_facing_up: ### Overview -LeetCoin is the LeetCode for Web3, centered on leveling up dev’s skills. We are creating a platform to help enhance technical skills in a gamified and fun way, expand Web3 technical literacy through highly visual smart contract analysis and create an online judge system for Ink!, Solidity and Vyper to evaluate smart contract solutions against predefined test suites. Web3 is relatively new and most companies do not have established technical interviewing guidelines. Also, technical exploits, both front-end and at the smart contract level, have become a widespread problem harming the ecosystem. To succeed we will take an incremental approach starting with creating problem sets with concepts and challenges that can help developers follow a standardized way to up their level no matter what it is, from beginner to expert across key areas. Problems will be of three primary types: +LeetCoin is the LeetCode for Web3, centered on leveling up dev’s skills. We are creating a platform to help enhance +technical skills in a gamified and fun way, expand Web3 technical literacy through highly visual smart contract analysis +and create an online judge system for Ink!, Solidity and Vyper to evaluate smart contract solutions against predefined +test suites. Web3 is relatively new and most companies do not have established technical interviewing guidelines. Also, +technical exploits, both front-end and at the smart contract level, have become a widespread problem harming the +ecosystem. To succeed we will take an incremental approach starting with creating problem sets with concepts and +challenges that can help developers follow a standardized way to up their level no matter what it is, from beginner to +expert across key areas. Problems will be of three primary types: + 1. open-ended (write a function that utilizes the x data oracle and returns properly formatted Big Number), 2. comprehension based (given this smart contract, spot the problem leading to a reentrancy guard attack), and 3. knowledge based (which of the following can improve this snippet of code?). - These problem sets will become community-driven through incentivizing creation of new problems. + These problem sets will become community-driven through incentivizing creation of new problems. -The project will be driven by the community and offer interactive, gamified resources for developers to get to their next stage, hiring companies to source superior candidates and better learning resources. Every problem solved as well as created by a community member will be tied to incentives to encourage continuous learning and sustainability. We will partner with Web3 projects, infrastructure builders and tooling experts to co-create problem sets of key skills they believe future hires should have. +The project will be driven by the community and offer interactive, gamified resources for developers to get to their +next stage, hiring companies to source superior candidates and better learning resources. Every problem solved as well +as created by a community member will be tied to incentives to encourage continuous learning and sustainability. We will +partner with Web3 projects, infrastructure builders and tooling experts to co-create problem sets of key skills they +believe future hires should have. ### Project Details #### Features We are working on 3 important core functionalities: -- Many new Web3 devs lack knowledge in core areas such as Ink!, Security & Auditing, Solc Versioning Knowledge, OppenZepplin, Testing (Apeworx & Brownie), and Exploits (Frontend & Smart Contract). Our platform will host and curate the sets of gamified practice problems that cover core knowledge in the above areas. Each challenge runs against a suite of test cases. New problems will be added regularly and designed by a mix of the LeetCoin team, community members, and Web3 industry partners. -- Hiring core teams is difficult and always a bit risky, especially when many developers prefer to remain anonymous and lack GitHub coding activity, verifiable resumes, or LinkedIn pages. LeetCoin offers core teams a fun way to discover and vet potential builders by testing the only thing that matters: evaluating technical skills in an objective, fair and data-driven approach. We plan to raise the hiring standards across the entire ecosystem and make hiring better for everyone. -- LeetCoin’s online judge engine can compile and run smart contracts code written in Ink!, Solidity and Vyper. The engine records the execution metadata like statistics and saves the execution output to a permanent storage that can be evaluated against the predefined test suite. + +- Many new Web3 devs lack knowledge in core areas such as Ink!, Security & Auditing, Solc Versioning Knowledge, + OppenZepplin, Testing (Apeworx & Brownie), and Exploits (Frontend & Smart Contract). Our platform will host and curate + the sets of gamified practice problems that cover core knowledge in the above areas. Each challenge runs against a + suite of test cases. New problems will be added regularly and designed by a mix of the LeetCoin team, community + members, and Web3 industry partners. +- Hiring core teams is difficult and always a bit risky, especially when many developers prefer to remain anonymous and + lack GitHub coding activity, verifiable resumes, or LinkedIn pages. LeetCoin offers core teams a fun way to discover + and vet potential builders by testing the only thing that matters: evaluating technical skills in an objective, fair + and data-driven approach. We plan to raise the hiring standards across the entire ecosystem and make hiring better for + everyone. +- LeetCoin’s online judge engine can compile and run smart contracts code written in Ink!, Solidity and Vyper. The + engine records the execution metadata like statistics and saves the execution output to a permanent storage that can + be evaluated against the predefined test suite. #### Online Judge System -An important part of the LeetCoin platform is the online judge system. The online judge is an engine that can run the candidates’ code solutions against a specified testing suite, evaluate the performance and report the test results back. Currently, there are no online judge solutions that can evaluate the smart contracts against predefined testing suites. We are creating one with the initial support for Ink!, Solidity and Vyper. + +An important part of the LeetCoin platform is the online judge system. The online judge is an engine that can run the +candidates’ code solutions against a specified testing suite, evaluate the performance and report the test results back. +Currently, there are no online judge solutions that can evaluate the smart contracts against predefined testing suites. +We are creating one with the initial support for Ink!, Solidity and Vyper. #### Architecture + The platform consists of 3 main components -1. Frontend application - the UI React application that displays all the available problems, problem pages, code editor, user profile, login/signup page, and admin dashboard. The frontend application interacts with the backend application using REST API to request available coding problems, submit problem submissions, retrieve submission results, retrieve user information, etc. -2. Backend application - the core NodeJS application that is responsible for the business logic. The application has a database that stores the list of available coding problems, users, coding submissions and etc. The main purpose is to serve the data from the database via REST API. -3. Online judge engine - the core engine component of the backend app that executes the coding solutions in an isolated environment. The engine supports Ink!, Solidity and Vyper smart contract languages. It compiles the smart contract code, runs it and saves the output to a text file to a dedicated storage. The engine also reads the submission outputs from the storage and compares it against the expected output and reports back the failed and succeeded test cases along with the execution metadata (e.g statistics) and reports them back to the backend application. + +1. Frontend application - the UI React application that displays all the available problems, problem pages, code editor, + user profile, login/signup page, and admin dashboard. The frontend application interacts with the backend application + using REST API to request available coding problems, submit problem submissions, retrieve submission results, + retrieve user information, etc. +2. Backend application - the core NodeJS application that is responsible for the business logic. The application has a + database that stores the list of available coding problems, users, coding submissions and etc. The main purpose is to + serve the data from the database via REST API. +3. Online judge engine - the core engine component of the backend app that executes the coding solutions in an isolated + environment. The engine supports Ink!, Solidity and Vyper smart contract languages. It compiles the smart contract + code, runs it and saves the output to a dedicated storage in string format. The engine also reads the submission + outputs from the storage and compares it against the expected output and reports back the failed and succeeded test + cases along with the execution metadata (e.g statistics) and reports them back to the backend application. ![](https://imgur.com/fDx7QFR.png) #### Technology Stack -The frontend application is written in React and hosted on AWS Amplify platform. The backend application utilizes express server framework which is built on top of NodeJS. It is really easy to design REST API using express and the API specification will be written in Swagger. TypeScript is used on the backend. The online judge is packaged as a portable module that can be easily incorporated in the other projects. The judge is written in TypeScript. The submission output database will be initially hosted on S3 as a bucket. + +The frontend application is written in React and NextJS and hosted on AWS Amplify platform. The backend application utilizes +express server framework which is built on top of NodeJS. It is really easy to design REST API using express and the API +specification will be written in Swagger. TypeScript is used on the backend. The online judge is packaged as a portable +module that can be easily incorporated in the other projects. The judge is written in TypeScript. The submission output +database will be initially hosted on Postgres. #### Mockups: + ![](https://i.imgur.com/seKd2sa.png) ![](https://imgur.com/W0mNmDc.png) -### Ecosystem Fit - -LeetCoin is an applied, community-driven education-focused public good aimed at building the future builders of Ethereum. It is important because it offers a streamlined way to level up across 3 domains: practice problems, visual and simplified smart contract analysis and hiring. -We want to provide new devs a gamified way to learn and enhance skills regardless of their background, a way that already fits their mental schemas if they are transferring over from Web2 and familiar with popular platforms like HackerRank and LeetCode. These platforms unfortunately focus on Web2 algorithmic challenges and do not offer Web3-focused problem sets. Not only will a gamified way allow beasier Web3 adoption by developers, it allows practical experience across key areas that ethereum developers only learn over time in a haphazard way by exploring github repos and spending countless hours individually analyzing and testing code. Given that many projects by new devs in the ecosystem are forks of existing smart contracts that are often not fully understood, new devs risk releasing code that leads to exploits and harms the reputation of the ecosystem, presenting a barrier to future potential devs from entering. Problem sets will cover key areas from security and coding to cryptographic primitives and allow builders to create their own personalized learning paths. Better builders lead to a stronger Ethereum foundation and superior talent. Problem sets manifest the Web3 ethos by being open-source and inviting the collaboration of community, domain experts and leading protocols. Community involvement is key given the fast-moving evolution of the ecosystem. +### Ecosystem Fit -By allowing hiring teams a means of curating their own problem sets from our open-source database or developing their own, it allows them to pre-screen and vet new hires leading to a higher standard. We aim for Leetcoin to be adopted across the ecosystem similar to how similar platforms have improved hiring processes in Web2. By vetting devs before inviting them to the initial interview to join a core team, the caliber of builders will improve resulting in less technical exploits and superior builders in the ecosystem. +LeetCoin is an applied, community-driven education-focused public good aimed at building the future builders of +Ethereum. It is important because it offers a streamlined way to level up across 3 domains: practice problems, visual +and simplified smart contract analysis and hiring. + +We want to provide new devs a gamified way to learn and enhance skills regardless of their background, a way that +already fits their mental schemas if they are transferring over from Web2 and familiar with popular platforms like +HackerRank and LeetCode. These platforms unfortunately focus on Web2 algorithmic challenges and do not offer +Web3-focused problem sets. Not only will a gamified way allow beasier Web3 adoption by developers, it allows practical +experience across key areas that ethereum developers only learn over time in a haphazard way by exploring github repos +and spending countless hours individually analyzing and testing code. Given that many projects by new devs in the +ecosystem are forks of existing smart contracts that are often not fully understood, new devs risk releasing code that +leads to exploits and harms the reputation of the ecosystem, presenting a barrier to future potential devs from +entering. Problem sets will cover key areas from security and coding to cryptographic primitives and allow builders to +create their own personalized learning paths. Better builders lead to a stronger Ethereum foundation and superior +talent. Problem sets manifest the Web3 ethos by being open-source and inviting the collaboration of community, domain +experts and leading protocols. Community involvement is key given the fast-moving evolution of the ecosystem. + +By allowing hiring teams a means of curating their own problem sets from our open-source database or developing their +own, it allows them to pre-screen and vet new hires leading to a higher standard. We aim for Leetcoin to be adopted +across the ecosystem similar to how similar platforms have improved hiring processes in Web2. By vetting devs before +inviting them to the initial interview to join a core team, the caliber of builders will improve resulting in less +technical exploits and superior builders in the ecosystem. #### Relevance to Polkadot and Substrate -We anticipate more adoption of Ink! as a smart contract language and teach more developers how to write smart contracts better and more secure. In addition, we anticipate more developers to express interest and switch to Web3 development and help Web3 companies to raise their hiring standards. +We anticipate more adoption of Ink! as a smart contract language and teach more developers how to write smart contracts +better and more secure. In addition, we anticipate more developers to express interest and switch to Web3 development +and help Web3 companies to raise their hiring standards. ## Team :busts_in_silhouette: @@ -62,7 +125,6 @@ We anticipate more adoption of Ink! as a smart contract language and teach more - Alberto Cevallos - Bolat Khojayev - ### Contact - **Contact Name:** Bolat Khojayev @@ -79,21 +141,37 @@ Legally incorporated in Canada. ### Team's experience #### Ali Serag - Lead Smart Contracts Developer -Ali is a serial builder passionate about technology and community. Ali Co-Founded Fostrum, a startup backed by Techstars and Barclays Bank and launched various award-winning open-source initiatives such as covidimpact.ca (Call for Code, Code the Curve). Ali has worked on various DeFi projects over the past several years, both anon and publicly. Having acted as president of the largest tech early-talent community in Canada, Ali is passionate about education and community. Ali advises Vancouver City Council candidates on blockchain and tech-centered policies and is a close advisor to Coding in Color, an international educational initiative supported by the government of Canada focused on teaching refugee youth coding skills. + +Ali is a serial builder passionate about technology and community. Ali Co-Founded Fostrum, a startup backed by Techstars +and Barclays Bank and launched various award-winning open-source initiatives such as covidimpact.ca (Call for Code, Code +the Curve). Ali has worked on various DeFi projects over the past several years, both anon and publicly. Having acted as +president of the largest tech early-talent community in Canada, Ali is passionate about education and community. Ali +advises Vancouver City Council candidates on blockchain and tech-centered policies and is a close advisor to Coding in +Color, an international educational initiative supported by the government of Canada focused on teaching refugee youth +coding skills. #### Bolat Khojayev - Lead Full-stack Developer -Bolat was a senior Amazon full-stack developer and architect who turned to Web3. He worked with various early-stage start-ups such as Connectly.ai and Carmodity to develop their first MVPs, define coding best practices, hire competent developers and establish a high performing engineering culture. Bolat has been interviewing prospective engineers for over 5 years (at Amazon, Connectly and Karat) and has launched various mentorship initiatives, including Qazaq Codes, a curriculum teaching Russian speaking devs core coding competencies. + +Bolat was a senior Amazon full-stack developer and architect who turned to Web3. He worked with various early-stage +start-ups such as Connectly.ai and Carmodity to develop their first MVPs, define coding best practices, hire competent +developers and establish a high performing engineering culture. Bolat has been interviewing prospective engineers for +over 5 years (at Amazon, Connectly and Karat) and has launched various mentorship initiatives, including Qazaq Codes, a +curriculum teaching Russian speaking devs core coding competencies. #### Alberto Cevallos - Contributor -Alberto is the founder of GreenOak.xyz and heads its Builder Program which provides mentorship and support for projects contributing to the Web3 ecosystem. He is a seasoned Web3 builder and investor, having been co-founder of BadgerDAO and acting as an early core team member of Travala. + +Alberto is the founder of GreenOak.xyz and heads its Builder Program which provides mentorship and support for projects +contributing to the Web3 ecosystem. He is a seasoned Web3 builder and investor, having been co-founder of BadgerDAO and +acting as an early core team member of Travala. ### Team Code Repos -- https://github.com/greenoakxyz -- https://github.com/greenoakxyz/leetcoin -- https://github.com/greenoakxyz/leetcoin-app +- https://github.com/LeetCoinCo +- https://github.com/LeetCoinCo/leetcoin-backend +- https://github.com/LeetCoinCo/leetcoin-frontend -Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted +elsewhere or live are also fine. - https://github.com/Aliserag - https://github.com/NoirKomBatman @@ -107,81 +185,82 @@ Please also provide the GitHub accounts of all team members. If they contain no ## Development Status :open_book: -We have created a landing page https://leetcoin.co and some initial backend skeleton structure https://github.com/greenoakxyz/leetcoin-app. There is no prototype yet and we are currently developing it. +We have created a landing page https://leetcoin.co and some initial backend skeleton +structure https://github.com/greenoakxyz/leetcoin-app. There is no prototype yet and we are currently developing it. ## Development Roadmap :nut_and_bolt: ### Overview -- **Total Estimated Duration:** 20 Weeks +- **Total Estimated Duration:** 37 Weeks - **Full-Time Equivalent (FTE):** 3 FTE - **Total Costs:** 29,999 DAI ### Milestone 1 — Implement Ink! Problem Builder, Solution and Compiler -- **Estimated duration:** 8 weeks +- **Estimated duration:** 21 weeks (Completion by March 15, 2023) - **FTE:** 3 - **Costs:** 12,000 DAI This milestone will allow for the creation and use of Ink! coding problems. | Number | Deliverable | Specification | -| -----: |------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0a. | License | Apache 2.0 | -| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | -| 0c. | Testing Guide | Best practices for developing test suites to run code against and a FAQ. | -| 0d. | Article | Announcement blog post explaining how LeetCoin can be used for upgrading web3 developer skills, improve security and help with properly vetting dev core-team candidates to minimize technical risks. | -| 1. | Design Document | Description of architecture and interface | -| 2. | User Authentication | Create a wallet based authentication system for problem builders as well as users with Web3 Onboard | -| 3. | Import/Export Data | Create tools to import and export problem data using multer, csv-express, fast-csv | -| 4. | Online Judge | Online judge that compiles Ink! contract code and runs it against test suites comparing the actual output with the expected ones based on the different test cases | -| 5. | Frontend problems list | A simple table that displays all available problems on the platform | -| 6. | Frontend code editor | Code editor for the problems | -| 7. | First Ink! Problem Set | Develop first 10 Ink! problems working with core teams of popular DeFi protocols | -| 8. | Database | Database to store all problem datasets (IPFS or MongoDB) | -| 9. | API | Create an API with express, express router, mongoose and CORS | -| 10. | Frontend user profile | User profile page where they can edit their information and see their progress | -| 11. | Logging | Server logging with morgan and winston | +|-------:|------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | +| 0c. | Testing Guide | Best practices for developing test suites to run code against and a FAQ. | +| 0d. | Article | Announcement blog post explaining how LeetCoin can be used for upgrading web3 developer skills, improve security and help with properly vetting dev core-team candidates to minimize technical risks. | +| 1. | Design Document | Description of architecture and interface | +| 2. | User Authentication | Create a wallet based authentication system for problem builders as well as users with Web3 Onboard | +| 3. | Online Judge | Online judge that compiles Ink! contract code and runs it against test suites comparing the actual output with the expected ones based on the different test cases | +| 4. | Frontend problems list | A simple table that displays all available problems on the platform | +| 5. | Frontend code editor | Code editor for the problems | +| 6. | First Ink! Problem Set | Develop first 5 Ink! problems working with core teams of popular DeFi protocols | +| 7. | Database | Database to store all problem datasets (Postgres) | +| 8. | API | Create an API with express, express router, Postgres and CORS | +| 9. | Frontend user profile | User profile page where they can edit their information and see their progress | +| 10. | Logging | Server logging with morgan and winston | ### Milestone 2 — Educational Modules and Extension -- **Estimated Duration:** 6 weeks +- **Estimated Duration:** 8 weeks (Completion by May 15, 2023) - **FTE:** 3 - **Costs:** 10,000 DAI -This milestone will extend the problem compiler and problem sets as well as introduce new functionality related to different learning paths and in-depth analysis of hugely popular smart contracts. - -| Number | Deliverable | Specification | -| -----: | ----------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0a. | License | Apache 2.0 | -| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | -| 0c. | Testing Guide | Best practices for developing problem sets, how to test them and a FAQ. | -| 0d. | Article | Announcement blog post explaining the new educational modules on the platform. | -| 1. | Set Creator | Implement problem set curation and creation | -| 2. | Problem Favouriting | Allow users to favourite specific problems to easily reference later | -| 3. | Expand Online Judge | Allow for problems written in Ink!, Rust and Go by extending compiler | -| 4. | Diversify Sets | Diversify problem sets to include security, testing etc. | -| 5. | Educational Modules (Learner) | A dashboard where learners can explore different popular smart contracts to delve deeply into | -| 6. | Educational Modules (Educator) | A builder where educators can add rich text and video media for courses | -| 7. | Badges | Award badges to specific users and educators that have hit specific achievements | +This milestone will extend the problem compiler and problem sets as well as introduce new functionality related to +different learning paths and in-depth analysis of hugely popular smart contracts. + +| Number | Deliverable | Specification | +|-------:|-------------------------------- |-----------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | +| 0c. | Testing Guide | Best practices for developing problem sets, how to test them and a FAQ. | +| 0d. | Article | Announcement blog post explaining the new educational modules on the platform. | +| 1. | Set Creator | Implement problem set curation and creation | +| 2. | Problem Favouriting | Allow users to favourite specific problems to easily reference later | +| 3. | Expand Online Judge | Allow for problems written in Ink!, Rust and Go by extending compiler | +| 4. | Diversify Sets | Define and add more problems. | +| 5. | Badges | Award badges to specific users and educators that have hit specific achievements | +| 6. | Page with educational resources | List of awesome educational Ink! resources ### Milestone 3 — Hiring Module -- **Estimated Duration:** 6 weeks +- **Estimated Duration:** 8 weeks (Completion by July 15, 2023) - **FTE:** 3 - **Costs:** 7,999 DAI -This milestone will introduce functionality to allow hiring core teams to generate links of predefined problems to share with prospective applicants as well as receive feedback on the applicant’s performance. - -| Number | Deliverable | Specification | -| -----: | ----------- |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0a. | License | Apache 2.0 | -| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | -| 0c. | Testing Guide | Best practices for developing test suites to run code against and a FAQ. | -| 0d. | Article | Announcement blog post explaining LeetCoin's hiring tools to help vet the candidates. | -| 1. | Employer Problem Sets |
  • Allow employers to search through database of existing problems and add them to problem set
  • Implement problem set timer
  • Implement employer problem set one-time-use link generator
  • Allow employers to optionally specify ethereum address to solve problem
  • Allow employers to create custom problems to mix and match
| -| 2. | Applicant Authentication | Applicants must connect with their Polkadot wallet in order to start and view timed employer problem set | -| 3. | Mailing Notifier | Mailing system that notifies specified email upon completion of problem set with applicant’s answers | +This milestone will introduce functionality to allow hiring core teams to generate links of predefined problems to share +with prospective applicants as well as receive feedback on the applicant’s performance. + +| Number | Deliverable | Specification | +|-------:|--------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide the documentation for the repository code as well as a tutorial for publishing/designing a user-generated coding problem and test suites. | +| 0c. | Testing Guide | Best practices for developing test suites to run code against and a FAQ. | +| 0d. | Article | Announcement blog post explaining LeetCoin's hiring tools to help vet the candidates. | +| 1. | Employer Problem Sets |
  • Allow employers to search through database of existing problems and add them to problem set
  • Implement problem set timer
  • Implement employer problem set one-time-use link generator
  • Allow employers to optionally specify ethereum address to solve problem
  • Allow employers to create custom problems to mix and match
| +| 2. | Applicant Authentication | Applicants must connect with their Polkadot wallet in order to start and view timed employer problem set | +| 3. | Mailing Notifier | Mailing system that notifies specified email upon completion of problem set with applicant’s answers | ## Additional Information :heavy_plus_sign: From 59f50481c7db7227d1407a7ba64859c9f4db6826 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 6 Mar 2023 08:32:53 -0300 Subject: [PATCH 138/665] Update index.md (#1588) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 759f519493b..a7dd89787a9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -27,7 +27,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | -| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | | EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | From 7de59d87dc32ad94fe79652923ffcaae3b0072de Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Mon, 6 Mar 2023 19:59:16 +0700 Subject: [PATCH 139/665] Add Hybrid Explorer grant application. (#1582 * Create hybrid.md * Add technical details to the milestone tables. * Mention IPFS hosting. * Mention more block explorers. --- applications/hybrid.md | 237 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 applications/hybrid.md diff --git a/applications/hybrid.md b/applications/hybrid.md new file mode 100644 index 00000000000..fdaaa6dd72e --- /dev/null +++ b/applications/hybrid.md @@ -0,0 +1,237 @@ +# Hybrid Block Explorer + +- **Team Name:** Jonathan Brown +- **Payment Address:** 0x36a7401F269555916a0243E586234D3Bbf5A0c36 (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + + +## Project Overview :page_facing_up: + +This application is in response to two RFPs: +- Multi-chain Block Explorer https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/multi-chain-block-explorer.md +- ink! smart contract block explorer. https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/ink_smart_contract_block_explorer.md + + +### Overview + +Hybrid takes a unique, partially decentralized approach that improves two major problems with current open source Substrate block explorers: centralization and huge hosting requirements. + +A fully centralized block explorer typically populates an SQL database with the entirety of an archive node and stores additional data to index everything. Operating such a database reliably requires huge system resources and expense. + +When querying block information, or the chain state at any block height, the Hybrid dapp will use the [Substrate Connect](https://substrate.io/developers/substrate-connect/) light client from within the browser. Alternatively, these queries can be made directly to an archive node via WSS. + +For event search functionality, the Hybrid indexer efficiently indexes events in all blocks so they can be found with a simple WSS query. For example, to find all events connected with a specific `AccountId`. + +This architecture has three main advantages: +- state queries are fully decentralized - you don't have to trust an RPC provider not to lie to you +- 100% availability - the light client doesn't depend on any centralized service that may not always be available +- the Hybrid indexer has significantly lower system requirements - it doesn't need to store all chain history + +Eventually, Hybrid will use this centralized / decentralized approach as the basis for an ink! contract explorer. + +Because Substrate is a federated platform, it will be possible browse multiple chains from the Hybrid dapp. + +### Project Details + +Hybrid will be a Substrate block explorer dapp. By default it will connect to major Substrate blockchains. Additionally it can be configured to connect to any Substrate chain. + +There are two types of queries that the explorer can perform: +- Decentralized - ideally using the Substrate Connect light client, or alternatively connecting to an archival node via WSS. For example, querying blocks or state storage. +- Centralized - the Hybrid indexer for the chain will be queried via WSS. This is for event searching and watching, such as finding all events across all chains that relate to a specific `AccountId`. + +![Hybrid Architecture](https://raw.githubusercontent.com/ethernomad/hybrid-diagram/main/hybrid.png) + +#### Indexer + +The Hybrid indexer will be written in Rust. It can be configured to connect to any Substrate chain. + +It will read events in all blocks using [subxt](https://github.com/paritytech/subxt) and index these events in a Key-value database using the [sled](http://sled.rs/) library. This is considerably more efficient than storing the index in an SQL database. + +All events in all pallets that have identifying parameters will be indexed. For example the Transfer event in the Balances pallet is identifiable by the `AccountId` of both `from` and `to`. + +Other examples of identifying event parameters are `assetId` in the Assets pallet, `code_hash` in the contracts pallet, `CollectionId` and `ItemId` in the NFTs pallet, and `MultiLocation` in the XCM pallet. + +Reading blocks and writing indexes will occur in separate threads with a queue from the read thread to the write thread. Enabling reading and writing simultaneously will maximize indexing throughput. + +WSS queries will be handled via the highly scalable [tokio_tungstenite](https://github.com/snapview/tokio-tungstenite) Rust library. + +In addition to the identifier being searched for, queries will be able to include start block, offset, and limit to control which events are returned. + +Consumers will be able to subscribe for new events that match a query. This will be handles by sled's powerful [watch_prefix](https://docs.rs/sled/latest/sled/struct.Tree.html#method.watch_prefix) functionality. + +The database keys will be constructed in such a way so that events can be found using iterators starting at a specific block number. For example, for for the AccountId keyspace: + +`AccountId/BlockNumber/EventIndex` + + +#### Dapp + +The Hybrid dapp will be a [Vue](https://vuejs.org/) dapp, using the [Vuetify](https://vuetifyjs.com) framework for the user interface. [pnpm](https://pnpm.io/) and [Vite](https://vitejs.dev/) will be used for the build. + +It will use [@polkadot/api](https://github.com/polkadot-js/api) to retrieve data from the chain, either via the Substrate Connect light client, or via an RPC connection to a full archival node. The Hybrid indexer will be queried via WSS. + +This grant will only include a basic dapp including: +- block browsing, showing transactions and events +- event searching, e.g. searching for all events connected to a specific `AccountId`. + +A subsequent grant application will be made to develop a richer dapp experience. + + +### Ecosystem Fit + +A major issue holding back the Substrate and Polkadot ecosystem is a high quality block explorer comparable to Etherscan. We need such a block explorer to be: +- non-proprietary +- as decentralized as possible +- not requiring massive system resources +- feature-rich + +The target audience is blockchain enthusiasts and developers. Eventually end-users should not need to know about block explorers, but this depends on dapps improving their user experience. + +The indexing component has value far beyond the Hybrid block explorer. Many Substrate applications will find a centralized event indexer extremely useful. + +#### Comparison to other Substrate explorers / indexers + +- [DotScan](https://dotscan.com/) - proprietary +- [Blockchair](https://blockchair.com/polkadot) - proprietary +- [Subscan](https://www.subscan.io/) - proprietary. Open source version is very basic with fully centralized database +- [Polkadot Apps](https://polkadot.js.org/apps/) - open source and fully decentralized, but non-indexing +- [Polkascan](https://explorer.polkascan.io/) - fully centralized database. +- [Blockcoders ink! Explorer](https://ink-explorer.blockcoders.io/) - fully centralized database, focused on contracts +- [Sirato ink! Explorer](https://github.com/web3labs/epirus-substrate) (previously Epirus) - fully centralized database, focused on contracts +- [SubSquid](https://www.subsquid.io/) - fully centralized database +- [SubQuery](https://subquery.network/) - fully centralized database +- [Substrate Archive](https://github.com/paritytech/substrate-archive) - fully centralized database, unmaintained + +There are no known block explorers in other ecosystems that are indexing, and either fully decentralized or have a hybrid design like this one. + + +## Team :busts_in_silhouette: + +### Team members + +- Jonathan Brown + +### Contact + +- **Contact Name:** Jonathan Brown +- **Contact Email:** jbrown@acuity.social +- **Website:** https://acuity.social + + +### Legal Structure + +- **Registered Address:** n/a +- **Registered Legal Entity:** n/a + + +### Team's experience + +Jonathan Brown has extensive relevant experience to build this software. + +He built a proof-of-concept centralized indexer for a cross-chain DEX that has a very similar architecture to the Hybrid indexer. It is written in Rust, indexes data from Substrate and Ethereum blockchains, writes it to RocksDB, and enables WSS queries via tokio_tungstenite. + +https://github.com/acuity-social/acuity-atomic-swap-offchain + +He is also very experienced building dapps with polakdot.js such as the [Acuity DEX](https://github.com/acuity-social/acuity-dex-app). + +Jonathan has also made some videos about Substrate development: https://www.youtube.com/watch?v=FMr2bNSmnfY + + +### Team Code Repos + +- https://github.com/ethernomad +- https://github.com/acuity-social + +### Team LinkedIn Profiles (if available) + +- n/a + + +## Development Status :open_book: + +Development has not started on the project, however the codebase will largely follow that of the [Acuity DEX offchain indexer](https://github.com/acuity-social/acuity-atomic-swap-offchain). + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 8 weeks +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 USD + +### Milestone 1 — Event Indexing component + +- **Estimated duration:** 4 weeks +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can index a Substrate node and query events. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Connect to Substrate chains | The indexer will be written in Rust and configurable to connect to any Substrate chain using the subxt library. | +| 2. | Block syncing | As new blocks are produced, the indexer reads all events. Additionally, it will read events from existing blocks, starting at block 0. | +| 3. | Index writing | All identifying parameters in events will be indexed in the database using the sled library. | +| 4. | Status querying | It will be possible to query the current status of the indexer via WSS. This will include information about which chain is being indexed, indexing progress and last know block. Queries will be handled via tokio_tungstenite. | +| 5. | Index querying | It will be possible to search via WSS for events with an identifier. | +| 6. | Dapp | A rudimentary web interface will be developed to expose this functionality. This will be built using pnpm, vite, vue, vuetify & polkdadot.js .| + +### Milestone 2 — Event Subscribing + +- **Estimated duration:** 2 weeks +- **FTE:** 1 +- **Costs:** 2,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can witness live updates to event search results. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Event subscription API | The indexer will be updated to service subscription requests via WSS. | +| 2. | Live dapp | The dapp will be updated so that pages displaying results from event queries will be updated as soon as a new event appears on the chain. | + + +### Milestone 3 — Decentralized Component + +- **Estimated Duration:** 2 weeks +- **FTE:** 1 +- **Costs:** 2,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the rudimentary explorer dapp. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Video | We will publish a video that explains and demonstrates all aspects of the explorer. | +| 1. | Dapp | The dapp will be extended to query block and state via either the Substrate Connect light client, or via direct connect to a full node via WSS. | +| 2. | Cross-chain UI | When a Tx includes a XCM, it will be easy and intuitive to open the relevant block from the other chain(s). | + + +## Future Plans + +- hosting - The project needs to host indexes for all major Substrate chains. The frontend can be hosted as a traditional website and on IPFS. + +- improve dapp - explore how the event index can be used to better display the richness of the Polkadot ecosystem. + +- support for tokens and nfts + +- add support for ink! smart contracts with decentralized source code publishing + +- maintain Hybrid as the most decentralized Substrate block explorer + +- marketing + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Twitter + +* What work has been done so far? Development has not started yet. + +* Are there are any teams who have already contributed (financially) to the project? +No +* Have you applied for other grants so far? +No From 5432ac496f0d066353ab5880a81d0d7dd764b0a2 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 6 Mar 2023 14:06:07 +0100 Subject: [PATCH 140/665] Update index.md Hybrid Explorer --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index a7dd89787a9..3ea793e4852 100644 --- a/applications/index.md +++ b/applications/index.md @@ -58,6 +58,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | +| Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | ## 2022 From ab08fddee6db6e0a096964fd8aedbedc7627aeb2 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 6 Mar 2023 10:49:16 -0300 Subject: [PATCH 141/665] Update index.md (#1591) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3ea793e4852..f809db5e54a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -94,7 +94,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | From 4aac62d1614fca4e9c303eaed31b542baab7231e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 7 Mar 2023 11:41:55 +0100 Subject: [PATCH 142/665] Add RFP link to landing page --- src/components/HomepageFeatures.js | 2 +- src/pages/index.js | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js index 23ca143519b..c5823289807 100644 --- a/src/components/HomepageFeatures.js +++ b/src/components/HomepageFeatures.js @@ -22,7 +22,7 @@ const FeatureList = [ { title: 50, description: ( - <>in countries + <>countries ), }, diff --git a/src/pages/index.js b/src/pages/index.js index 7613602e3e2..9298b6fa208 100644 --- a/src/pages/index.js +++ b/src/pages/index.js @@ -21,6 +21,14 @@ function HomepageHeader() { to="./docs/Process/how-to-apply"> Apply + + Browse RFPs + From 8185af04b8ed60ea9ebe4d039f937f08d58a96dc Mon Sep 17 00:00:00 2001 From: Dusan Morhac <55763425+dudo50@users.noreply.github.com> Date: Wed, 8 Mar 2023 08:36:01 +0100 Subject: [PATCH 143/665] Create ParaSpell_follow-up2.md (#1589) * Create ParaSpell_follow-up2.md * Update outdated links - 3 links that were outdated were replaced. * Update applications/ParaSpell_follow-up2.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update applications/ParaSpell_follow-up2.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update applications/ParaSpell_follow-up2.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --------- Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- applications/ParaSpell_follow-up2.md | 246 +++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 applications/ParaSpell_follow-up2.md diff --git a/applications/ParaSpell_follow-up2.md b/applications/ParaSpell_follow-up2.md new file mode 100644 index 00000000000..ae04a28df37 --- /dev/null +++ b/applications/ParaSpell_follow-up2.md @@ -0,0 +1,246 @@ +# ParaSpell + +- **Team Name:** ParaSpell✨ +- **Payment Address:** 0xB7d45Ef044fD9342e4c03e28D9e9bddA2d4Fe3e1 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 🐣 + + +## Project Overview :page_facing_up: + +Previously completed grants: +- [Phase 1](https://github.com/w3f/Grants-Program/pull/1118) +- [Phase 2](https://github.com/w3f/Grants-Program/pull/1245) + +What is ParaSpell: +ParaSpell is XCM & XCMP Developer tool ment to ease integration of cross-chain functionality into dApps. As we have learnt by now, cross-chain experience between Parachains can be very diverse. ParaSpell means to unify this experience by doing all the research for developers. We have wrapped all XCM pallets from compatible nodes into simple patterns from which it is easy to create XCM call. As an example we provide image below. + + +![img1](https://user-images.githubusercontent.com/55763425/218987451-2bfc9526-8f2b-4477-8c42-8c70cbcb6ec4.jpg) + +In this image we can see, that ParaSpell saves much time to developers. Just one call can contain multiple lines of JSON which would otherwise have to be integrated manually by developer. ParaSpell does it in marginally less lines and hides complex logic of building message which ensures, that messages are constructed correctly. This call in the end results into following lengthy extrinsic: + +![img2](https://user-images.githubusercontent.com/55763425/218987583-f5fb10b2-2e0c-4f36-b01c-0d610deab1c6.jpg) + +Following extrinsic can be subscribed into and we can check for it's events on front end. ParaSpell provides front end for testing XCM transactions and XCM called [UI-V2](https://github.com/paraspell/ui-v2). This UI is also deployed on netlify so users only have to run local network to start testing. UI also provides ability to open or close HRMP channels or test out XYK pool functionality that was implemented in collaboration with HydraDX team. In the picture below we provide overview of the UI. +Screenshot 2023-02-15 at 10 36 01 + + +### Overview 🎨 + +ParaSpell is split into three main repositories at the moment: + +- [XCM SDK](https://github.com/paraspell/xcm-sdk): Meant to unify cross-chain experience on Substrate. Can serve any dApp developer that wishes to integrate XCM or other pallets support for they app. +- [UI-V2](https://github.com/paraspell/ui-v2): Allows for launching local network and testing XCM or HRMP channels across that local network +- [Docs](https://github.com/paraspell/docs): Extensive documentary for overview of ParaSpell, guide for SDK and UI + + +#### SDK +This SDK currently support 42 compatible XCM nodes. They can transfer XCM messages in three different scenarios. +- Parachain to Parachain - HRMP +- Parachain to Relay chain - UMP +- Relay chain to Parachain - DMP + +SDK contains many useful features that allow for easier inntegration: +- Builder pattern implementation, easy to construct XCM calls, much more used recently for simplicity of implementation. + +- Suggestions, SDK contains TYPES that help to guide developer through integration. For example he get's compatible nodes suggested. +![1_59xApnboumYhzuRHKx60TA](https://user-images.githubusercontent.com/55763425/219314223-79c31085-2e90-4dc7-ad51-da96de730ea0.png) + +- Console printouts, SDK allows for printing into console so developer can alway check if call they constructed is correct. +![1_2KT6Z1rxxprmE03XWYY-HA](https://user-images.githubusercontent.com/55763425/219314235-1da52511-b4e8-4a41-bdaa-04fa6a9e8a48.png) + +- Exporting registered assets for each compatible node in many useful functions + +- Exporting supported XCM pallets for each compatible node in useful functions + +And more.. + +#### UI-V2 +UI is used as testing tool for Parachain developers, they can simply add their node into network and test it with HRMP channels as well as XCM transfers. UI also allows dApp developers to test and learn XCM before integrating it from our SDK. + +UI is made to be as simple to use as possible. It is now also deployed on netlify so developers only have to start local network from configuration file provided by ParaSpell which starts network of Relay chain and 3 different Parachains (Bifrost,Karura & Pichiu) + +Below are some examples of UI with running network: +Screenshot 2023-02-16 at 13 31 06 + +Above we can see open/ close channel screen. It is simple to work with and intuitive. Nodes are pulled from relay chain by query so if network is not running you cannot see any nodes. + +Screenshot 2023-02-16 at 13 31 20 + +Above we can observe, that UI contains simple Wallet login with test accounts. + +Screenshot 2023-02-16 at 13 31 33 + +Above we can see XCM screen which is also very simple to navigate and nodes are pulled from relay chain by query. + +#### Docs +Docs contain important information regarding SDK, UI and other repositories that are in ParaSpell or ParaSpell contributed to / collaborated with. +The key areas are: +- Introduction +Screenshot 2023-02-16 at 13 44 58 +- Guide on importing SDK +Screenshot 2023-02-16 at 13 45 09 + +- Guide on launching local network and UI +Screenshot 2023-02-16 at 13 48 43 + + +- Guide on executing operations in UI +Screenshot 2023-02-16 at 13 45 24 + +- Guide on implementing SDK +Screenshot 2023-02-16 at 13 46 01 + + +- Important links +Screenshot 2023-02-16 at 13 45 30 + +#### Architecture 🏗️ +![screenFlow](https://user-images.githubusercontent.com/55763425/198412240-e031d877-c5d8-4952-9048-2e1256ba4469.svg) + +UI is purposely designed to be as simple as possible. This guarantees, that all tasks can be done quickly and without extended searching. All necessary screens also feature notifications which will as a milestone explain be callback reactive. The loading screen is only present on the first application & network startup, once accessing the same screen after the application was loaded it will be skipped automatically. The screen serves to register necessary assets in parachain nodes. This is only required to be run once per network startup. + +SDK currently handles transfers to 42 compatible Parachains (all XCM Palletts) ([ParaSpell SDK](https://github.com/paraspell/sdk/)) and also can transfer to both Relay chains. It is easy to construct calls as is but we want to make it even easier and more developer friendly. + +#### Technology Stack 💻️ +- Vue.js +- Node.js +- Typescript +- Polkadot api libraries +- Make +- Parachain launch +- Substrate compatible nodes (For now Rococo, Pichiu(Kylin network), Bifrost & Acala) + +### Ecosystem Fit 🌳 + +There are not many XCM & XCMP related development tools released currently. We aim to aid this mostly empty space and help developers to understand XCM & XCMP as the current state-of-the-art technology by providing documentation and a user interface in which they can do development tasks more easily and faster. + +In Polkadot and Kusama ecosystem, there are few XCM related tools in development. For example Moonbeam XCM SDK was released only recently. We bring comparison table that compares our ParaSpell SDK to Moonbeam SDK +| Features | ParaSpell XCM SDK | Moonbeam XCM SDK | +| -----: | ----------- | ------------- | +| Number of packages user has to install | User needs to install only 1 package | User needs to install 2 packages | +| Support for Parachains | Already integrated for every XCM compatible pallet Link to implementation [ParaSpell SDK](https://github.com/paraspell/sdk/) | Every new node has to be added manually | +| Build pattern | Integrated as intuitive as possible | Integrated, not as intuitive to implement however | +| Support for asset pallet operations | Integrated | Not integrated | +| Support for HRMP pallet operations | Integrated users can open & close HRMP channels on their local chain (Useful feature for devs) | Not integrated | +| Support for checking details that do not change | Integrated & also be covered with some error handling eg (too little ammount being sent, not sufficient for XCM transfer) | Integrated in form of small "map" for different Tokens & Node IDs | +| Support for Axelar GMP (General message passing) that will connect Substrate with EVM chains | Planned to be implemented in the future | No data | + + + +Unlike the already mentioned "Moonbeam XCM" platform ParaSpell provides UI enhancement that uses our XCM SDK and users can try/learn technology from it. ParaSpell also includes support for 42 Substrate Parachains ([ParaSpell SDK](https://github.com/paraspell/sdk/) that have XCM pallets compared to Moonbeam XCM to which users have to implement compatible nodes manually. ParaSpell SDK only needs one package compared to Moonbeam XCM which has total of two. Compared to Moonbeam XCM which contains only XCM calls ParaSpell also contains calls that can open or close HRMP channels. We also include support for Parachains that have template pallet for XCM called polkadotXCM this pallet is a little harder to work with than xTokens, even more for inexperienced developers. + +Another comparison worth mentioning is UI vs Morph which is also enhancement of XCM UI Transfer tool +| Features | ParaSpell XCM UI | Morph | +| -----: | ----------- | ------------- | +| Focus: | Developers & users that wish to try XCM locally first | Users | +| Wiki: | Comprehensive Wiki explaining XCM, how to add assets to UI & Nodes and more implemented | Not implemented | +| Support for transfers: | In three different scenarios | In two scenarios | +| Support for local network configuration: | Fully implemented example network configuration that uses maintained Parachain-launch library | Not implemented | +| Support for HRMP channel opening/closing: | Fully implemented | Not implemented | + +Unlike the already mentioned "Morph" platform ParaSpell focuses more on developers. ParaSpell features complete network install and startup configuration in one single command. This automatization ensures, that developers do not need to do any extra tasks when they wish to run development nodes locally. ParaSpell also allows developers to open and close HRMP channels between Parachains they connected. Like "Morph", ParaSpell can also transfer fungible tokens in three scenarios. From Parachains to Relay chain, from Relay chain to Parachains & from Parachains to Parachains. + +We are currently in talks with several Parachain teams that like the idea of unified SDK for XCM transfers as much as we do. SDK that unifies XCM can be very helpful for entire ecosystem in our opinion. + +Our target audiences are Web3 projects and starting/current blockchain developers. +## Team :busts_in_silhouette: + +### Team members + +Dušan Morháč - Student, project Founder & Core Dev. Faculty of Informatics and Information Technologies STU in Bratislava + +Michael Absolon - Student, SDK Core Dev. Faculty of Informatics and Information Technologies STU in Bratislava + +### Contact + +- **Contact Name:** Dušan Morháč +- **Contact Email:** dudo.morhac@gmail.com + + +### Legal Structure + +- **Registered Address:** Tomášovská 453/2, Kalinovo 98501, Slovak Republic +- **Registered Legal Entity:** Dušan Morháč ml. + +### Team's experience + +- Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by [IEEE](https://ieeexplore.ieee.org/document/9872938). Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan also continues research on this idea in his Master's thesis. He is actively working on [ParaSpell](https://github.com/paraspell) full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. + + +- Michael is a dedicated TypeScript developer with 2 years of full-time experience in the Web2 sphere. Michael's expertise in this field was further solidified in 2019 when he won first place in the Junior Internet Web competition for his online multiplayer game, which was written in JavaScript. In addition to his professional background, Michael also achieved a bachelor's degree in the same computer science University as Dušan and he is currently pursuing a master's degree which focuses on Blockchain. His passion for technology led him to explore Blockchain technology in his free time. He was recently offered the opportunity to work on ParaSpell XCM SDK with Dušan and he delivered many of the key features SDK now offers. + +### Team Code Repos + +- https://github.com/paraspell/xcm-sdk +- https://github.com/paraspell/ui-v2 +- https://github.com/paraspell/docs + +### Team Github Profiles 🧑‍🎓 + +- https://github.com/dudo50 Dušan Morháč +- https://github.com/michaeldev5 Michael Absolon + +### Team LinkedIn Profiles 🧑‍🎓 + +- https://www.linkedin.com/in/dudo50/ +- https://www.linkedin.com/in/michael--absolon/ + +## Development Status :open_book: + +[SDK](https://github.com/paraspell/xcm-sdk) is currently released into main and is in version that is fully operable. There are still some tweaks we plan to add and make, they are mentioned below. [UI-V2](https://github.com/paraspell/ui-v2) currently runs on state-of-the-art technology version VueJS 3 and newest version of Nuxt. It deprecated V1 and introduced much smoother interface and modules brought from subscaffold template ParaSpell contributed to. [Docs](https://github.com/paraspell/docs) are currently in ready state but there is still some tweaking to do. + +Sidenote: We have recently developed article about Polkadot & Paraspell called Enhancing XCMP Interoperability Across Polkadot Paraverse and it was accepted to International IEEE ICBC 2023 conference held in Dubai. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 - Phase 3, make XCM SDK more efficient, add new nodes & rework Localhost network in UI + +- **Estimated duration:** 2 months ⌛️ +- **FTE:** 1 +- **Costs:** 10,000 USD 💰️ + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a usage explanation in readme.md | +| 0c. | Testing and Testing Guide | SDK Core UNIT tests will be provided for xTokens Pallet, HRMP pallet, polkadotXCM pallet| +| 0d. | Docker | Docker file that allows to test ParaSpell SDK through ParaSpell UI will be provided. | +| 0e. | Create Medium article about development of Phase 3 ParaSpell | Add article covering new features & improvements brought in Phase3 | +| 1. | Merge currencyId & currency in XCM Transfers | Merge currency ID and currency symbol into one so user do not need to enther both. Raised in issue: https://github.com/paraspell/xcm-sdk/issues/16 | +| 2.a | Add support for new compatible nodes in DMP Scenario (Downwards message passing) | Check for new Parachain support & update Parachains, that have new compatibility with other Parachains in DMP Scenario & Update list of [compatible Parachains](https://github.com/paraspell/xcm-sdk/blob/main/docs/supportedNodes.md) accordingly | +| 2.b | Add support for new compatible nodes in UMP Scenario (Upwards message passing) | Check for new Parachain support & update Parachains, that have new compatibility with other Parachains in UMP Scenario & Update list of [compatible Parachains](https://github.com/paraspell/xcm-sdk/blob/main/docs/supportedNodes.md) accordingly | +| 2.c | Add support for new compatible nodes in HRMP Scenario (Horizontall message passing) | Check for new Parachain support & update Parachains, that have new compatibility with other Parachains in HRMP Scenario & Update list of [compatible Parachains](https://github.com/paraspell/xcm-sdk/blob/main/docs/supportedNodes.md) accordingly| +| 3. | Rework Utils.ts to remove huge switch that constructs message | Rework construct XCM message function to not have switch and be more efficient in construction - [link](https://github.com/paraspell/xcm-sdk/blob/main/src/utils.ts#L344) | +| 4.a | Deprecate Parachain-launch & replace it with Zombienet I | Replace network startup configuration from Parachain-launch library into state of the art technology called Zombienet [link1](https://github.com/paraspell/ui-v2/blob/main/Makefile#L5), [link2](https://github.com/paraspell/ui-v2/blob/main/paraspell-network-config.yml)| +| 4.b | Deprecate Parachain-launch & replace it with Zombienet II | Update ParaSpell Docs | +| 5. | Add suggestions we received in our previous grant evaluations (If not added already) | Add suggestions from our phase1 and phase2 proposal evaluations if they were not added already | + +## Future Plans 🔭 + +Once everything will be implemented according to the proposed plan application will still be under constant improvement as technology will progress. For example, once the XCMP protocol will be released we wish to deprecate the HRMP protocol we currently use for channels. + +In a long run, we also want to improve design of the UI, add new features that can be useful for developers and support for new nodes. + +Project goal is that SDK will serve dApp developers and UI will teach new substrate developers to use XCM and will serve to existing substrate developers to test their freshly baked Parachains. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Personal recommendation + +##### Project achievements in chronological order ⌛️ + +- 📙 Article about project created & presented on international conference ICECET2022 held in Prague (450 out of 1000+ articles accepted) Link to IEEE publication - [IEEE Sharing Fungible Assets Across Polkadot Paraverse](https://ieeexplore.ieee.org/document/9872938/) +- 🥈 2nd Prize, Build a XCM related Tool for Moonbeam - Polkadot North America Hackathon [Hackathon entry](https://devpost.com/software/polkachange-cross-blockchain-transfer-tool) +- 🥉 3rd Prize, EVM+ DApp for aUSD yield - Polkadot North America Hackathon [Hackathon entry](https://devpost.com/software/polkachange-cross-blockchain-transfer-tool) +- 🎈 Web 3 Foundation base grant [Application](https://github.com/w3f/Grants-Program/pull/1118), [Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/584) +- 🐍 [Basilisk](https://bsx.fi/) treasury proposal 2/2 Approved [link](https://basilisk.subsquare.io/treasury/proposal/2), [link2](https://basilisk.subsquare.io/treasury/proposal/4) +- ⭐️ [Astar](https://astar.network/) XCM bounty Polkadot hackathon Latam Bounty [link](https://github.com/AstarNetwork/AstarBounties/pull/17) +- 🔭 Web 3 Foundation phase 2 grant Milestone 3 / 3 delivered [Application](https://github.com/w3f/Grants-Program/pull/1245), [Delivery1](https://github.com/w3f/Grant-Milestone-Delivery/pull/670), [Delivery 2 & 3](https://github.com/w3f/Grant-Milestone-Delivery/pull/715) +- 📕 Article about Polkadot & ParaSpell created & accepted to be presented at international cross-chain conference IEEE ICBC 2023 [links TBA] From ff6332d17333bad4ddf50731e69fba14e62a3d75 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 8 Mar 2023 08:48:40 +0100 Subject: [PATCH 144/665] Update index.md ParaSpell_Follow Up 2 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index f809db5e54a..2ac6034500b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -59,6 +59,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | | Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | ## 2022 From 6614127cf1d60f731a7895273ac7900ad294bbcc Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 8 Mar 2023 09:06:35 +0100 Subject: [PATCH 145/665] fix paraspell --- applications/ParaSpell_follow-up2.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/applications/ParaSpell_follow-up2.md b/applications/ParaSpell_follow-up2.md index ae04a28df37..9057ea6acae 100644 --- a/applications/ParaSpell_follow-up2.md +++ b/applications/ParaSpell_follow-up2.md @@ -22,7 +22,7 @@ In this image we can see, that ParaSpell saves much time to developers. Just one ![img2](https://user-images.githubusercontent.com/55763425/218987583-f5fb10b2-2e0c-4f36-b01c-0d610deab1c6.jpg) Following extrinsic can be subscribed into and we can check for it's events on front end. ParaSpell provides front end for testing XCM transactions and XCM called [UI-V2](https://github.com/paraspell/ui-v2). This UI is also deployed on netlify so users only have to run local network to start testing. UI also provides ability to open or close HRMP channels or test out XYK pool functionality that was implemented in collaboration with HydraDX team. In the picture below we provide overview of the UI. -Screenshot 2023-02-15 at 10 36 01 +![img3](https://user-images.githubusercontent.com/55763425/218989950-acb681e3-b511-452b-bc3a-c9e5049f7dce.png") ### Overview 🎨 @@ -61,15 +61,15 @@ UI is used as testing tool for Parachain developers, they can simply add their n UI is made to be as simple to use as possible. It is now also deployed on netlify so developers only have to start local network from configuration file provided by ParaSpell which starts network of Relay chain and 3 different Parachains (Bifrost,Karura & Pichiu) Below are some examples of UI with running network: -Screenshot 2023-02-16 at 13 31 06 +![img4](https://user-images.githubusercontent.com/55763425/219366458-8873418e-9487-4762-8327-56c3294accdd.png) Above we can see open/ close channel screen. It is simple to work with and intuitive. Nodes are pulled from relay chain by query so if network is not running you cannot see any nodes. -Screenshot 2023-02-16 at 13 31 20 +![img5](https://user-images.githubusercontent.com/55763425/219366638-38ebcdd7-5ff6-4507-8209-fc7f3ccac348.png) Above we can observe, that UI contains simple Wallet login with test accounts. -Screenshot 2023-02-16 at 13 31 33 +![img6](https://user-images.githubusercontent.com/55763425/219366771-be566565-8bf1-477b-b7c8-3eacec6f63a0.png) Above we can see XCM screen which is also very simple to navigate and nodes are pulled from relay chain by query. @@ -77,23 +77,23 @@ Above we can see XCM screen which is also very simple to navigate and nodes are Docs contain important information regarding SDK, UI and other repositories that are in ParaSpell or ParaSpell contributed to / collaborated with. The key areas are: - Introduction -Screenshot 2023-02-16 at 13 44 58 +![img7](https://user-images.githubusercontent.com/55763425/219368826-2bb5474f-a76f-4828-be15-c3274d9ae10a.png) - Guide on importing SDK -Screenshot 2023-02-16 at 13 45 09 +![img8](https://user-images.githubusercontent.com/55763425/219368879-8bd4fd5a-a1f5-4417-8620-d8b279c99733.png) - Guide on launching local network and UI -Screenshot 2023-02-16 at 13 48 43 +![img10](https://user-images.githubusercontent.com/55763425/219369125-ce0756d7-49ef-437e-98b0-2336aa250137.png) - Guide on executing operations in UI -Screenshot 2023-02-16 at 13 45 24 +![img11](https://user-images.githubusercontent.com/55763425/219368943-4115808b-1322-4551-b03a-b693bec285a2.png) - Guide on implementing SDK -Screenshot 2023-02-16 at 13 46 01 +![img12](https://user-images.githubusercontent.com/55763425/219369060-1c0c1076-65e5-4997-a1c6-b99da9f33bac.png) - Important links -Screenshot 2023-02-16 at 13 45 30 +![img13](https://user-images.githubusercontent.com/55763425/219369013-e147d239-28a2-4701-9c16-2614b975d210.png) #### Architecture 🏗️ ![screenFlow](https://user-images.githubusercontent.com/55763425/198412240-e031d877-c5d8-4952-9048-2e1256ba4469.svg) @@ -166,7 +166,7 @@ Michael Absolon - Student, SDK Core Dev. Faculty of Informatics and Information ### Team's experience - Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by [IEEE](https://ieeexplore.ieee.org/document/9872938). Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan also continues research on this idea in his Master's thesis. He is actively working on [ParaSpell](https://github.com/paraspell) full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. - +![img14](https://user-images.githubusercontent.com/55763425/223093342-7d947a57-b114-4260-8999-fd4506adc76e.jpg" width="380" height="280") - Michael is a dedicated TypeScript developer with 2 years of full-time experience in the Web2 sphere. Michael's expertise in this field was further solidified in 2019 when he won first place in the Junior Internet Web competition for his online multiplayer game, which was written in JavaScript. In addition to his professional background, Michael also achieved a bachelor's degree in the same computer science University as Dušan and he is currently pursuing a master's degree which focuses on Blockchain. His passion for technology led him to explore Blockchain technology in his free time. He was recently offered the opportunity to work on ParaSpell XCM SDK with Dušan and he delivered many of the key features SDK now offers. From be8f81a8afc6da7deebb91b5fc3081321102f7b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mert=20K=C3=B6kl=C3=BC?= <37740842+justmert@users.noreply.github.com> Date: Wed, 8 Mar 2023 13:00:12 +0300 Subject: [PATCH 146/665] PolkaFlow Grant Proposal (#1586) * Create polkaflow.md * Update polkaflow.md * Update polkaflow.md * Update polkaflow.md --- applications/polkaflow.md | 177 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 applications/polkaflow.md diff --git a/applications/polkaflow.md b/applications/polkaflow.md new file mode 100644 index 00000000000..67af9018025 --- /dev/null +++ b/applications/polkaflow.md @@ -0,0 +1,177 @@ +# PolkaFlow + +- **Team Name:** justmert +- **Payment Address:** [0xf5412558d977915D56d8B4d3773871142d379E74](https://etherscan.io/address/0xf5412558d977915D56d8B4d3773871142d379E74) (USDC, Ethereum (ERC20)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +The DOT open source developer community is expanding rapidly, yet there is currently no way to easily monitor development progress across various projects that integrates with the DOT ecosystem. Keeping track of development progress across various projects and monitoring developer contributions can provide valuable insights into the evolution of DOT ecosystem. With data dispersed throughout Github, including contributors, commits, issues, repositories, and PRs, it can be challenging to grasp the overall progress of the DOT ecosystem. + +I am presenting PolkaFlow to the DOT community as the ultimate solution for visualizing and analyzing open source projects within the ecosystem. It offers a comprehensive view of activities of projects and insights into the ecosystem's trends. The project will allow users to gain insights into the development activity, code contributions, issue resolution, and community engagement of the DOT ecosystem through open source projects. This information will be displayed through various visualizations and charts, which will be accessible through a web-based application named **PolkaFlow**. + + +### Project Details + +**PolkaFlow Website:** https://polkaflow.vercel.app/ + +**Mockups** + +| Dashboard Page | Project List Page | Project Detail Page | +| ----- | ----------- | ------------- | +|![Screenshot 2023-03-06 at 01-03-22 PolkaPulse](https://user-images.githubusercontent.com/37740842/222989193-91da2e3d-53f1-4d5f-b0bb-bd66600a173e.png) |![Screenshot 2023-03-06 at 01-29-06 Projects](https://user-images.githubusercontent.com/37740842/222989551-75347c96-cc80-45bc-b4d0-e6cabbe3e294.png)|![Screenshot 2023-03-06 at 01-03-48 Project Page](https://user-images.githubusercontent.com/37740842/222989225-7bc5fe13-e158-4fb4-9b00-9f925630d9c9.png)| + +**Technical Scheme** + +| Scheme | +| -----: | +|![polkaflow-technical-scheme](https://user-images.githubusercontent.com/37740842/222989229-071e08e4-cb4e-4f94-8e47-cee99fa69ade.png)| + + +**Technical Stack** + +- Frontend: ReactJS, Tailwind CSS, Apache ECharts +- Backend: Python +- Database: Firebase Firestore +- Additional Integrations: Typeform (for submitting project), Algolia (for search functionality) + + +### Ecosystem Fit + +**Target audience** + +The target audience for PolkaFlow can include developers, researchers, and enthusiasts who are interested in monitoring the development and activity of open-source projects on the DOT ecosystem. The platform's analytical tools and visualizations can provide valuable insights into the performance of various projects, making it useful for those who want to gain a better understanding of the ecosystem's progress and the direction it's headed in. + +Besides, by tracking the activity of commits history, and issue resolution PolkaFlow can help developers identify areas where they can improve and streamline their own development processes. By offering detailed analytics, PolkaFlow can become an essential tool for anyone who is interested in the development and progress of the DOT ecosystem. + +**Evidence for the need** + +* **Increased Interest in DOT Ecosystem:** The growth of the DOT ecosystem and the increasing number of open-source projects being developed on the protocol highlight the need for a tool that can monitor and analyze the performance of these open-source projects. PolkaFlow can provide valuable insights for the projects within the ecosystem. + +* **Lack of Comprehensive Analytics:** There is a lack of reliable and user-friendly tools that can provide detailed analytics and visualizations for open-source projects on DOT ecosystem. Besides, the demand for better analytical tools in the blockchain space is increasing, and developers and stakeholders are seeking tools that can help them monitor and analyze the performance of the projects. PolkaFlow fills this gap for the DOT ecosystem. + +* **Historical and Trend Data:**: PolkaFlow can provide a historical and trend data of the Github activity in the DOT ecosystem, allowing developers and project managers to see first hand how the ecosystem is growing, evolving, and changing over time. This data can be used to identify patterns, trends, and areas of improvement, leading to more informed decision making and better outcomes for the projects within the ecosystem. + +**Impact** + +* **Improve Project Visibility**: By providing detailed analytics and visualizations for DOT projects, PolkaFlow can help increase the visibility of these projects, making it easier for developers and users to find and contribute to them. + +* **Enhance Developer Productivity**: With the ability to quickly access important data and metrics, developers can more easily identify areas of the project that need attention. This can lead to faster issue resolution and more efficient development cycles. + +* **Encourage Community Engagement**: By providing a centralized location for viewing project activity and contributions, PolkaFlow can encourage community engagement and collaboration. Users can easily identify areas where they can contribute to the project and engage with other developers and users. + +* **See Ecosystem Evolution**: PolkaFlow can help show the evolution of DOT projects over time by providing historical data and visualizations of key metrics, enabling developers to better understand the project's development trajectory and identify areas where protocol gains trends. + +* **Stands Out**: Currently, there is no project that provides a comprehensive analytics dashboard for open-source projects in the DOT ecosystem. PolkaFlow fills this gap and provides value by enabling developers and stakeholders to easily gain insights into the activity and performance of DOT projects. + + +## Team :busts_in_silhouette: + +### Team members + +- Mert Köklü - Project Owner + +### Contact + +- **Contact Name:** Mert Köklü +- **Contact Email:** kklumert@gmail.com +- **Website:** https://github.com/justmert + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** Individual + +### Team's experience + +**Mert Köklü** + +Served as the founding vice-chair of ACM Student Chapter and acted as an ambassador of many organizations including Microsoft and NVIDIA as Certified Instructor. In the Web3 space, he co-manage the AAVE Turkey Community and advocate for The Graph. Was working with AI video pipelines at an NVIDIA distributor company in Turkey before getting involved with blockchain. + +Develops ecosystem tools and applications with various tech stacks. AAVE and Filecoin grantee with an already accepted 3 projects and now developing open-source, user-friendly applications that add value to the DOT ecosystem. + + +### Team Code Repos + +- https://github.com/justmert/aave-graphql-doc (Aave GraphQL Documentation Website - https://www.aaveql.org/ ) +- https://github.com/justmert/aave-graphql-editor (Aave GraphQL Editor Website) +- https://github.com/justmert/peer-cli (Peer CLI: Swiss Army Knife for the IPFS) +- https://github.com/justmert/Aave-API-Telegram-Bot (Aave API Telegram Bot) +- https://github.com/justmert/chainweb.py (Kadena Chainweb Python Bindings) + +**Github Account** +- https://github.com/justmert + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/mertkoklu/ + +## Development Status :open_book: + +PolkaFlow is already deployed on Vercel and can be accessed via `polkaflow.vercel.app`. The project is currently in the MVP stage with Milestone 1 completed. Initially 17 repositories are added to the platform because of the demo purposes. After the approve, the project will have more repositories curated by me (or requests from the DOT Team) and the more can be added by the DOT community via Submit button in the app. + +- **Website:** https://polkaflow.vercel.app/ +- **Github (Frontend):** https://github.com/justmert/eco-flow-frontend +- **Github (Backend):** https://github.com/justmert/eco-flow-backend + + +## Development Roadmap :nut_and_bolt: +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 - MVP + +- **Estimated duration:** 2 month +- **FTE:** 1 FTE +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **how-to page** that explains how the user can interact with the platform. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Not applicable. | +| 1. | Database | Set up a Firebase project and Firestore database for storing chart data and project metadata | +| 2. | Python Backend | Implement functionality that can fetch data from Github Rest and GraphQL APIs for all DOT projects. | +| 3. | Frontend: Dashboard Page
Backend: Data Process | Implement Star Count for displaying the number of stars for DOT projects. | +| 4. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Commit History By Weeks (Line Chart) for visualizing commit activity over time. | +| 5. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Code Frequency (Stack Line Chart) for visualizing code changes over time. | +| 6. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Top Contributors (List) for displaying top contributors to the project. | +| 7. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Issue Activity (Line Chart) for visualizing issue activity over time. | +| 8. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Issue Count (Pie Chart) for displaying the distribution of issue types. | +| 9. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Recent Issues (List) for displaying the most recent issues. | +| 10. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Recent Commits (List) for displaying the most recent commits. | +| 11. | Frontend: Dashboard/Project Pages
Backend: Data Process | Implement Pull Request Count (Pie Chart) for displaying the distribution of pull request types. | +| 12. | Frontend: Project Page
Backend: Data Process | Implement Pull Request Activity (Bar Chart) for visualizing pull request activity over time. | +| 13. | Frontend: Project Page
Backend: Data Process | Implement Project Info Card for displaying project information. | +| 14. | Frontend: Project Page
Backend: Data Process | Implement Recent Stargazing Activity (Line Chart) for visualizing recent stargazing activity over time. | +| 15. | Frontend: Project List Page | Create the Project List page that lists the DOT ecosystem projects in order of their respective stargazing counts. | +| 16. | Integrate: Algolia | Enhance the search functionality of the platform. | +| 17. | Frontend: Categorization | The projects will be categorized on their underlying protocol, such as Polkadot, Substrate, Kusama, etc., as well as further categories like DeFi, DEX, and others. | +| 18. | Integrate: Typeform | Allow ecosystem users to suggest new projects for PolkaFLow | +| 19. | Integrate: Google Analytics | Track user engagement and adapt and improve the platform accordingly. | +| 20. | Backend: Schedule | Implement scheduling mechanism to fetch and update every project data from the Github APIs on a regular basis (e.g. every 30 minutes). | +| 21. | Frontend: UX & UI | Improve the UX and UI of the platform. Increase responsiveness, add animations, enhance user interaction, etc. | + +## Future Plans + +In the short term, we intend to use PolkaFlow to provide a comprehensive and user-friendly platform for developers and ecosystem users to track and analyze projects in the DOT ecosystem. We will continuously enhance and update the platform to ensure that it is the go-to resource for up-to-date information on DOT projects. + +In the long term, our team's plan is to continue supporting and improving PolkaFlow to meet the evolving needs of the DOT community. This includes incorporating additional metrics and data sources to provide more detailed insights into projects. Besides, if the platform is well-received by the community, and gains traction, we are going to open a Twitter account for PolkaFlow to engage with the community and promote top open-source projects on the DOT ecosystem. + + +## Referral Program (optional) :moneybag: + +- **Referrer:** - +- **Payment Address:** - + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website From 1e3b693818d4e345d42a0617fd56f6bbeb8b7529 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 8 Mar 2023 11:16:50 +0100 Subject: [PATCH 147/665] Update index.md Add PolkaFlow --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 2ac6034500b..3128391876c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,6 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | | Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | +| [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | ## 2022 From fedfb2b6a718d16cffa02ba5679a378039e1f9e1 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 8 Mar 2023 03:57:23 -0800 Subject: [PATCH 148/665] Update index.md (#1595) TREX -> first delivery, completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3128391876c..186644de554 100644 --- a/applications/index.md +++ b/applications/index.md @@ -73,7 +73,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | | [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | -| [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☐ | ☐ | +| [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☒ | ☒ | | [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | From 345142ef117972b124681d7134ace95b3e59afff Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 8 Mar 2023 09:26:59 -0300 Subject: [PATCH 149/665] Update index.md (#1597) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 186644de554..e9ca9799dbf 100644 --- a/applications/index.md +++ b/applications/index.md @@ -44,7 +44,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | From 4c62f04a19ac22b4131ca761acabe18fa8651b81 Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Wed, 8 Mar 2023 04:27:25 -0800 Subject: [PATCH 150/665] Update index.md (#1596) Substats -> completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e9ca9799dbf..340aeb2f6dc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -151,7 +151,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Uke](https://github.com/Uke-Messaging) | [Uke Protocol PoC & App (revised)](./uke-protocol.md) | [GitHub](https://github.com/Uke-Messaging) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | -| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☐ | +| [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☒ | | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | From d8f1ca7a9d399b1a2ffc292b8f044935b2099a29 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Thu, 9 Mar 2023 02:24:49 -0500 Subject: [PATCH 151/665] Update applications index (#1599) Grant completed. (note that there was an error before and application was marked as terminated instead of first delivery) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 340aeb2f6dc..869d45294db 100644 --- a/applications/index.md +++ b/applications/index.md @@ -99,7 +99,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | -| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☒ | ☐ | ☐ | +| [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☒ | ☒ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | From 56a98fbddfa617a7819f7763cae62f48c165a375 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Thu, 9 Mar 2023 02:42:52 -0500 Subject: [PATCH 152/665] Grant Management Webapp RFP (#1575) * Grant Management App RFP * Additional note * typo Co-authored-by: Matteo Casonato * typo Co-authored-by: Matteo Casonato * typo Co-authored-by: Matteo Casonato * Additional notes * Additional notes * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/grant_management_webapp.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update grant_management_webapp.md --------- Co-authored-by: Matteo Casonato Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- docs/RFPs/Open/grant_management_webapp.md | 110 ++++++++++++++++++++++ docs/RFPs/Open/img/grants_details.png | Bin 0 -> 198066 bytes docs/RFPs/Open/img/grants_page.png | Bin 0 -> 336802 bytes 3 files changed, 110 insertions(+) create mode 100644 docs/RFPs/Open/grant_management_webapp.md create mode 100644 docs/RFPs/Open/img/grants_details.png create mode 100644 docs/RFPs/Open/img/grants_page.png diff --git a/docs/RFPs/Open/grant_management_webapp.md b/docs/RFPs/Open/grant_management_webapp.md new file mode 100644 index 00000000000..0f71c53ff0b --- /dev/null +++ b/docs/RFPs/Open/grant_management_webapp.md @@ -0,0 +1,110 @@ +# Grant Management Web Application + +* **Status:** Open +* **Proposer:** [randombishop](https://github.com/randombishop) + + +## Context + +Web3 Foundation manages grant applications and deliveries in two github repositories: +* [Grants](https://github.com/w3f/Grants-Program) +* [Deliveries](https://github.com/w3f/Grant-Milestone-Delivery) + +All the grant applications, approvals, deliveries and evaluations are pushed into github as PRs and documents, +so that all processes are public and transparent. + +You can find all the details about how applications and deliveries are submitted in the [Grants Program Website](https://w3f.github.io/Grants-Program/), +or by browsing the two repositories above. + + +## Project Description :page_facing_up: + +The objective of this RFP is a web application that publishes all the information contained in +the W3F grants repositories in a way that facilitates easier navigation for the grants committee. Though the software would initially be used for the W3F Grants Program, any interested third parties would ideally be able to utilize the application for their own grants program. + +By providing an API, it will also allow for pulling the data in a structured way in order to make it easy to calculate statistics or track different metrics. + +The Web3 Foundation Grants Program is unique in that everything is openly and transparently published on GitHub. As a result of this RFP, we hope the W3F Grants Program can set an example of how other grant programs can leverage a simple yet powerful process to manage their grants. +Therefore, the web application and the structure of our repositories can be re-used by other grant programs. + + +## Existing prototype + +A quick and dirty prototype already exists for the application: +- [Backend](https://github.com/w3f/w3f_grants_backend) +- [Frontend](https://github.com/w3f/w3f_grants_frontend) + +These examples are just an initial experiment to test how the app could work, and are completely undocumented, +but please feel free to contact [us](grants@web3.foundation) if you need help trying them out or simply discuss. + +Also, these are just an option, and the RFP doesn't require building from these. Proposers are free to propose the framework and approach of their choice. + + +## Deliverables :nut_and_bolt: + +### Grants Page + +- Lists grants and their status. +- Search +- Filter + +For example: + +![screenshot_grants_page](./img/grants_page.png) + + +### Grants details + +- Shows the grant information +- Overview of the grant project +- Milestones details and status +- All documents related to the grant and links to their pull requests (application, deliveries and evaluations) + +For example: +![screenshot_grants_details](./img/grants_details.png) + + +### Teams + +- Provide a view at the team level. +- Contact information. +- Grants and applications, and their current status. + + +### Applications + +- Current grant applications. +- Links to the PR on github, link to the team page to check their history. +- Status of the application, date opened, number of approvals so far and how many remaining. + + +### Deliveries + +- Shows current deliveries pending evaluation. +- Links to all relevant information and history. +- Status of the delivery, submission date, evaluator, and if it's on stale. + +### Stats + +- Number of applications approved by month, with the corresponding total amount, and paid so far. +- Map of applications by country of origin. +- Chart of applications by status (Not yet delivered / delivered first milestone / completed / terminated) + + +### API + +- The web app should ideally separate frontend from backend logic, and publish an API to fetch the structured data. + + + +## Additional Notes + +- The features proposed above represent an opinion on what the grant management webapp should do and look like, +but are neither exhaustive nor strict requirements. Teams are welcome to propose their own design and vision for this product. + +- Web3 Foundation's grants program should be just an example/first step. +Ideally, the tool (combining GitHub + website) can benefit other grant programs and on-chain treasuries. + +- Long term goals: + * Oracles/pallets for treasury integration. + * Using a decentralized alternative instead of github. diff --git a/docs/RFPs/Open/img/grants_details.png b/docs/RFPs/Open/img/grants_details.png new file mode 100644 index 0000000000000000000000000000000000000000..c18ac90f08e062452e2b1897ef3f1cdb9c1054e9 GIT binary patch literal 198066 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%0D4%dQVlQxT@e;Xzc%F)lDq7+T4~*8 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

y@3Lw@in{tGVC{6J0r`=1}A z><7%tLC+=l%b!em(+Mfxk=n3R9FYM>Yhxe4ONK)P)0T_v;oM&2dGS7dpmsBPQ*fvuVEZ_E=*jaP zhfiS&IUe?v3AUN_Y5BOo0d*FO5c_)6sZx;;r)PIjBp{Fb3U(58R4cwh%?ydKy15e^ z4^FEYG``k@VOxvD$i#E|O+50T2LwR|^L}A>a(UmgQ9ND*0P7IeP5n*7okN-!8ln-R zyxWO7lA=X-`_ABQ#=2_x3iBR)x0^+JTc9wbSNV=>-!Z6XRg;H$gIF+3|lUd-HIr_wIeXNwGD^)FhF4E=gsc%8)U3 zWA{TkQ0 z*S+q0*+Tfg;<896h1bjYS#N;~4AGusslVfkWr$)3s5ysM7~(4R;!~Y0g8sG0>BI;N z0Av(++|rk2OO?XH9&yPmPR`*QjvaO5?u1klyzV$yo!RgK1!&{*&?l{pk z5T-ORk6&&ry<_t6Y9pVfFzDR~5t_>>0(30LW#_I-Gll?_S}fH*yhQUcTlm_%bS0-b z`}q(nI*^#k*`ZQueHGHk6H6V=Y%TfiH>?J0eJ;lC!G2bYVEF8*`0->Fs1fZ74+Z#) z0l%EgAfLF>0e356YB%1M4`l0iXm&1j?x?y+sd6#1l3=j?{KhBEi}cvhB`6v`JQeCG z3cU|;6yC)8%y{u4$0#qN!H9z0sZ)upC&>UHr z6wa+p>3YuvB+)V7WFAR5V6J5tM|kgW!Q9Ju6N%5~s2B~Oc*#IFXv?+u&+ZHfZy0O- zT_$(8|l-m7O#rq?Du-~^T(H} zs+)B**7|3SYe^Al-SfTuULN%o+Ktx*SG^&((4?VV3(RqE@#WUZZ8(TYfd<-f)t>Zs zyf3*~A1C?p1M-?C{1v>v^;dY^_14UDOqU0G4&WTyEfwD-Nmm~M8$iFzX|aJx+un_* z=lX22ZRd_2U-ocEA~U}7Ef7<%7vF3uQ|_yIe9`C5~7lT;h&E@N6 z=8j{+dXkx7yv9{={)WzgB-RY`=zGnvbe&enguih{u73f zbkxEY=Nno`vhnAXOiu~*Jc-$f%{6#MxYMqD3ClL8;<2lEtyLWRonX2OMUGSj7Nq(_ z&H#3|4X8O}h7nqw4(i3}=y9A+n8*apdY!rkQ+I3&sxtO2h4bis?bexuH=J@~e@u0| zmYit!t-T&>gSfbhcdHlsLj@vrB;n=<(e_vEv+*v6e>f4o>b(A#`yo7bJI=FR=kh`( zgs%fi5xm>CW9wV)Cg!~dwD4OjRq>#4Nc008YmU#U&3X_wq9Txm`-w`3Jf`j@o3Pu! zbV@JWPwB+%-Mki2NJT_kQo|s+Efzfdi2LC~+jH`PL^UZhhDhB=V#~N06#2ixO$wqB zWmMkR+w4MF>Rio39d zXj2O`3Mv(xDagD|??AFAputJ<@q+834N7btI4B!i^;GxGQ`mrtmqf>pPR;)|JHLJ>kJt?(^5s`L9I1zW&bh{qLJnb@Ni*nkj&!zG z-RSR7PQnRA)$~*RKYrV3&%gv(>5)5ctmv}eQWf$)JfdS|`ru9K-(PNu_>+-kp%q&w zQCnhnR|pmBmHE3_xn3r%zB+_;vTZRj{A+o5v?7`QqP`0`zvb`zGIhJI9F>)F^{ecP z%K<#`I#-?B-_MYOU?7WEclCbXN}G?u)wrwMV-f1K)@COr3!cu|a3xO#KEJUk98&Fs z(F>UuZd}=1l-e8?Q4o+qf-!$_bE~Q&+n4H?TC+8mr!^wb(PXnh`ZKw8Q_d)1fry(& ze;obz+g@1JELa|cvwe{Cve5VWxU<~A5TilB+2?BEFL~4Wh+Rl028rGSiM$&6G_(}W z2J+zLC6KX>y4w%YA6s-#H!oX;U*4>z;0s<-e`^KTx^5sJ1sTM;JF?L7!5xp%m%}o>XK*9)-5ZzC-Uw!wY)3@qkJx?$2VU#uw`;efnR~Im#r@S3_ zO$j=Jt$@046}s$p=?>qXLF#Yn4`fZi5ETZnu)iOyxr?A$QMLqkJ)PiV(YRk# zQ5QNPShe<}^4KbqMBpRY-`ekO^LPv|OG*$g{Lh5g1g1fI2&&{#m$gHgrVE*JTZU56 zM_HFdB5>dhy#OOY{T{%}>&fv~95tXL6~M#m@L=S8H-wb7V>6K*=jTqS8@L_(B5)vh z;XUBlF(Eq<7xFYLEaUSLo7jARonn7(&p!Z%jC-ZtJ@^H_A z5~wAd&3VF^;R+dC&YKP>`_NmdgG|4AM}*S3UIDGJA3oP5>F@7HyaopaTwwcpX3+s$ zDq?>v2x{o3Kvzb}8V||GFOVuliMo_TeSsxz4Ndg7KtZ7ecmyx53A45W+c~(BMi)J= zDI&samq%4>v4q)jl2o9j(43xE2Yo)2?xwL}obgHb_%n1I4-U)ki@g=d=9&z-S0nNy zUx9|~-a(M4e+{l2)P2mkZS_DT6+O6z>#9d6m!=MMj!lC3-V0EWZ9-Hu1ab?T{iiJc z#(BNK*~U}EbiRpLNx|;4{ma)pfDBpOZJQ#H|L>FfuHVjbd={dJxs9E=V?%c*^Z2g|4O!0Ss6KYQS$$eQw^Rx#NprVJr^J zBf9U$3U*!FS#^HkCNHQCiPi}zLy5*X=UJ!DX}U&qPhw_Zb$B^p*29iS#@1BH>M?G{ z$F^)+GBgYa3;-ZI(7GFcoB7=-3jKO7Ooz_$?}@Ii6| z2rc<#RRobtb36VrV+3kI@fTlr>@f}3r<{u7CO|4k2NmJ+o)^du<+;FJRI6ypxP!FT zK0J<+pGJM3CGgIlvq3iV=4U|_j0^M#9{&j(xo*JBO)$6EMUa3&x0>v6Q`mAgo=H(i zxZzg$IO_`o#xTe+%BI@@yPbq*e)08v)Se&G+3%1FTnYB&8Js%hzE=yVkb~5@R{$aV zd;Vo%!H6WP+`kDCAVUsbju|BTpnJ*wE zh`XUIwsiem_Rz#q%iWNvQutge#6O56b|g?=4;n${Qy{CW;+zg5lJ!uI{V|n>C$V7P zrIBkODhxuHpG7-nf}UEf&3_3v$aJYx8jkJ0DJPeqr{_MuQe{_;%Y}UysgsG+FxrC@ z7g$8>CNbjUXVT5&OaP%ShE}-JailQ-L)B}ysKVQvFYX^pg5hL8ZwXl61TFrv>@i-5usX13A>`}d9fkDn$~VQZ_c2JN32!?eG> zJgOuxh;yg3)};?OJ2w2R1J?I7M5Qo6TGwDOR!Ew_Y0v&g;B8iheiahY|T^EZy0?di{= z_HQf!v1<~bjlDIp1NLsth3^FmVXixH-m3-E6OiBD!nCqC2AiiV1opK7%o$`JTolG- zZU-Hq<a_OmkJ21&a5<^Ern5Ik?qPD z{_$lniqjcBT(&%+-F7DJ4qR;I4KkzAcm2srX)b&+B&QB+IWRe(8ZLDe!_RUQQ^pZO zOW%VFnFWP`G$i~2ppn%;4X#OLAr7us90vto?NDyWseo|yMol29I~kU8 z{uO;~iEMzoZ;u3-*xm4|N-d(Tx>!%gMlLghri)?kOaWUDSJh z{6Q&1bg|mdgA|+n2||VM&@}E4DuS%*Keo!PAdzcuGEY3o<6J;SOqcT8!BlzWa-zhO zrp#|bmCu!-c<#GPW~yRV`4H`uZ8Fl>Sdhx5QJ;&Qr*}0?1j=zYa>b3ZD)8y)+#uWI zRT4fgj=`K)bf2-NAMiPc}3rnD;uUldj`3lG#Iahr5r_ySJ zYz+1pgFnc#jJg74me(;Ee+ud8CNN^HT3%rfH&l&+Yk2wm`tvjQu>^(c{rj+t-+(h3 zwT_@mxr;RB0!V*)!L>B<7ppJ=Em5 z0>$OtaeMbT$3dTX{s1WvTh+5b!A%%V2c3djI&qUWFJHQf)L~}QJ;P!T>=QLamVCl# zQz>HPAlshv^3r`apey+@1OyKrfSC{EhMA8*Ghcyb-a)1GNmBR3X#yQ4c6z9_$hWk9II)QWj4`!~91|xmn@wc@HxisjSQX@%U90rV&>J$`#q&E2el&2Xc+oRSlb=fEsY7>uC%#a=` zNCVaKWL`<}CHL}r5h>zSkm;Gc53qQwQ6iJ;1~pMFf-Nfl#`~k{f5<27$Hld`S|&Xe z#OzOLF4Y;fAPj?6Q|GjxE1le!Lm+7- z{;EaGO2&f_Pc=-oIYH9sm^g6&s=|vyV9Z?%5+#q8v=^2^Shg%MvPSwS;t-LymPWd- zdu6JySgM5Oj%vj<1FgM1M!Um94q!fMO~9OMeT42Kyh ziJb<^MQNi@=)eD@l&k-;6At_980B=!N8Jn@sx-ILdjodx9L4anf1sfMwA(2b6r18Z zu0q4>Bv5Vko)C<$`tuM@U5j-6 zZotE`ZATiaQ^$8X)hr12z??YXVyXMvH1-u_3VceM+LE3*}yNC^kc#)+T9Ybk&IoQpLl7K z4atg|edA4-0M6Y@4d<5`uWk>Nk?!z!otDe~!<9k4XJU^w$!P)VTSo-U1A!5$c9Y*Q zl9kTJ_g1)-0V5BtSU_XD8RBn!(i`o9d*74xrseh&8>}6BQSvC(1j3ji2(CoRb}E_wzus2PvWT)fUZS zH+Ay!Pt6~&LaErWIUj$5BR(mC6I)3WtxK_#^i9LI&Fm4_I6uN};!4oC{bgs)KN6b1|2O^*DBrH$m*yuUE>Z+kh5FQpyg4}7a)FHK zxCGO&k0@}nvysHcP6oT*0&aTYQvA2Y2CjO}2a8-}k3^9Q%AxPm6F|#0->~W7F775u zQn-J&iDD+9qE?+Af*ddpM8=xl!@cnAUI$il346y7yLJg{Bd~k#VTxUm0&qUi-Jffz zzNd5OIOH7&OHVj3c?M)WGC@+;ZsD2%jRtl961rfD6HqgPm#Oz}zt zr`M?1^zUV*KB?A0r~eK@*C{tT|3lX>nl?U~q4H@OgoZB_@%e>d*+>LnTY{ zlm_ugf7d0rU%;cR{8F)H6!@sV{EWo2+OND10CEt-^iV?Nzi)OERRAToH5tmzVHfln zg*-*nj(k0+Nxmyh7z};0Dc5N_G$jDn(==i;D4gKJbyIEnK5yD}CU5~o#C>e?&QP<;Yb@3N$h`I%gaST;`<#gqjod1Mg^<+1X?ZcF z1@h?l-hi*z{Lzi|9~+8sBRnNtHPnuzj}$eQF41TSw7*pdwF`O*1lUNpO9};g-T2GqF#ogM~Z=NF?>GuV$HkE$cg_JdvK) zDs3NC`HyAdCC8y{#i!v^z#ruY3CwU(2mZguV{EkIM+rXqD+_vwzUSS(3<84{bMVc} zx5N_eaCr4r*||FBVt!|UUQuAA8#vij$^hkm6n1qHWIJr#JR?MNk`p*5ln_M;SX`m_=|i6k zrEA0uit6^pNh`NZQohgBkL>0)6&l34s`&}7rDvT6*Vsb>4a21aC-P0RBotYh;?@Tk zRPdd5VJRL&wD`{>mvTk_9Gt~7$Jgmt_~)wQ#vG&*C$&L6?hPBo`Z{?WON=VLQEZ-; zkrDtaSu52Yo3qL-uqpKeNW~M+RqwI&%~^7gPdwEOA}Z#X&oZ(?bx)?KV%ch`I@yI{ zE(eZQ%r>3DkqSV6*LNw#^}Ut>bFiVxwTrE;=%&~`syTu08JjzRT|@p7jj4b}nHlhAe`a2(6omFRYS(F|6F?CqVa7J8{lOaC zf*d;mM|!4@)B%yBWoA>-2`gAa`kLA76-M}b*9NTDifYs`YNls~@57P#<~x3L4BQg$ zyh~Myo8sK_#wyVG2JoQoK>}BvUDGV-+w0k}GI%3xSj+xbfhHI zro(lFa)N>#tRf_1?Ko#-_;?H=WWSIv*J+&txUKW4u-Wfre6InNK6ASXk|yiraLZ&& z7sa4FOGMl}#9q|jO2M4?^F?;W0svwc9=@u=qf8F98{EJyv0~>B7aQt;$a9Zdxcxk~t4Es(fy$4TI3|R7lr)vWEd9w|a z4A2Or)u_W7j?vAMPz5C8byRK46c7M1Ns~icX6p^DKMGJ&gA`_5l>dTkhwJKW+6sb@ zksQViOQ+NpxTfNds#mOi0m^xQq$9ynDim!75uwh6y0KS}1>eHbPsTv{9zdZ|FjQAXB$gqNu7=Sv zY8Fy^p(00XU(_MxB?c+M4M3d~Nwe}E;a$eCG+G)y7iqLt2@o=7KR{Z44g@$@qdcVn zQLF+}yO!e6?(4xytK*&@ZCK)<4HxxkTKn;okao(lp)}Tkn@2N(=QAfS7~6sIN)$f9 zd=6#Hm5avbj{i_u+@ndNO`X#kSa@I_dG@4sn)rC@+#0`cF{XV1wgr{-(Lzw4JMjX_ zqVITaekw@GII1ipjWyG_e+dO>0>|qDri|lL%FoG%4Hq$D2=+&$ zA!K^((lMK2qXznhtG7<)4m4jZ?bZ-mwNHe2Z5D4=2z{^?1%wYJm>|^PmO858kvxrP zl^^eBndyA_bQH31`|PfoxVGuD87whU*N#GP&9BImH??a{KlMRM<(|7omT&u224vI* z`x(3aWFZ8fkoEstRqY?)gsL}$6SY;5kw9tjGLK+0WQ=vJ^LKwU;$m?=FaCj_4g-K5 zQ|U@!HME$E<^s1qchTRUQ|r0*aG&wL71Xge9}L2Ny*!$aWsHIxnLc~UhswGNb5&Wx zVS{lPtGkRlO3l3tcpZW%ULdx@t5G3N{pUtCbI#-q+Rha&*EKAHq_bu|med6tI|-G9-@Pl1YU zb@{ZHSO7#?wtlxNmu?96KiFB5Nu|tn9Xa&95L0`Tnf?(4!sKk={@t z;^{yJ)WPcdM+Oulrdw@vzPAtDN?zm$(rV{N)c$Q-`Cyc4nR`C?X5~oI;ZR7 z6nR?ri?7<~g44RLOkmx+XP@A{~?d7_82H8P?^)!`AQd%dUScT*I z8>bID1rQ~netj2ft)VYtv>PYmDktedjb;60p7hl7uKCFmlJv)AC!e+3a)@a3veMC! z<+c@dt0FWL+8|c}avSV>#94z(ZRSMdP4JV!eQl`O2p^c3r|RhSnl@vH`hegyJTsV| zCru~l0Yk*QMRgnM9XN&U1dH?MH%*g$c`VIRC44V|m8t$>!~4})Ho6bU0z{uC8iBu2 z?5asCiQ696FyqaWZu)4Jv3HHfkwuOUc!r|Y?{K-XQ;I-yy*5Sbm43Ma z=3;yGi|p9wR>H@-bhp}4hVUKFcbF{m2F6VlbJ~p`QGFmg%0gh`K#ZY4cesX@&W$|& z2S)q%|NfHKUOkrnlWRGA{6jz!X8XupsGepY*-uRFTmHfWhRL^Ig1xQ!ZUO2!wGY<; zOsj4J8{D!L55okEICUTN<@;tlSF(f7(L(5oIK)k?(>#_7jn;?AE-lWlV+XvTL*f&X z13gss;fWL_etPJUClkJFNLOuX#QD7$Ser!7HVHRFAapQVD&gd-6WAv$&f?TNt}HSg z^=}o#G*&>F!%h7Vy_)Ia<0ep3s9XmITTL9+T_>uYTjFW{>I4UhMY5A$PG!4-fg#8W+ zRu+-oO=)KDUgWg#7vEDK$#j$y&eqhDmwY*`I*|{lv7lB+z^K+9bu5sNUte{uv=fI? z&SVo(OLxdtPg71p(XqobB?30x|Ee^eVddxD(4I=or zh0sG+r9F+G4(h&)y7;RL#=NFRL7`1Akc&>PiVM2*F9`54BrsoMrW4gvK@Qc363lMcgcXwmVV>YwJr`NuVltd zXRT!NI+K7tV1~;944cK6DEqa8w=QGtatC!2`@QksDu6(kdb7vak4KLI4^^v+_-W>H zUtkM&&AAm-NeLicS%!TCeijnix7f$>ML)_7a_~ayuRbDoutF(p3#X7z&MXpoT$lxs z!nlkp8f#TLG908K?5otG$|dV949#$d{Mf$+5{_M{=@V&#E=YKk0jrzExw~|>oVNFJ zabY(UQmJ+i72Oq!HHlIAhAl~75TY|3pMYX&T(3Xb&!eKwcAjUsQOCuf zl4N~{a*(DAyAtduxo!EpWabv82dv7{pP1ERdk`UaR?Fa?|N*lz} zKfk!UxBY65QGE`h5t91yO);uu z;6*Gm?7{og)cxRhWIB??w0&)12=$K`!dOUFv^Gj(LDYn46JG>wR70Jfen~t9N3LwUC+;)gw*wWv-`I-OZ<0mE`lX)%T z(|w(TK(%j9^(h+%57*xh(10A2`Q08mxorN+EdgF6)Pw6kbC*BTv0}kY%e?5QI4}>L zRnII%W*%t$jWMb6qLK9LX^i@<0|EglP_gP*ZF%A))L+Rb@BdFu=3lE;^#=OjNZtBl zn-~%C8tC=0FZ}#|pSF>~OtB<1Uf8@k7?6euXU%33+?E%YC_@1L)QRoeHvN?r8%hz$ zgxP-oUDx5eaIOxef}56hLk^5>fy-?tvn^lo*Ned@YoptR(!Y1pmq{=n<*W-c`M=jv z(njPY+8>-hHYo{t)Sw4nTzJg&+u>(7LIbk5Y0Gv&60`&VOCk9r4A_nu?#=Ld2%^JK z8hvH{?R)*HjaaU$x7ldN6zTkZDhscm+B8U;-+Y^g2s}+a74xG_Gri5@3C#cX+Ba|i z_1nCktY&T7w!c$eMp6R-P9u`=B~GR9DmHuTVvq{?KrdC!Z!LbV9fwt}U3cz5+a?;K zsxsn~wH<5j`Df49Ux$nwD!%3KySe!_;*o7BbsUfEZ~uxt1sw(BPlpQr-iZ|KBj}e) z`-X{|ez|GK!*>!v!-{Pqm2OLQ=?Xl#ymc+@zYfo@Awd_$g_i>r`kTfbgZ84wXHwpO zw$}btSdOD70*-f*u_1ma3VJ#YujP!4Q{Xpciwc{}DZ~rR95Vpd| zLf>rDrm@xvhezm45gYyeyvf0zkvQp=vTqv6h6;3qy8Agj-24bzo-z_`bB!mHo4!nf z;RJjeF@f-3x($C#c|!>LV0&SwGn+m*!+pq0bT;L{L|*nroRh8qNAoiJBe>M zEu6pJ>eufIfB_ktO}Da{Su4Q{pS6Wy`qxtY^C>;}(e9KZ63=Gd`#8Qf`|4EwAX& ziWC$DdUnJU0KJvB_`0jfniV zL_VALZT6hPp@Qf16q)94J*V>gVJ&109s6T^(|Tl2gKujXe>!UY+fBoaqP#Bevzs4X z6$v)_Hit3&_OC*&panbk_RgnGe-~nle!05ac8N5E#se7G?LhUUs)zyFmo79NdoC4- z%>dZb1BEBg7uq1(1e*NHrMXb zb4;Ozbq@f}J+r3w!2$_2efIQQBW&X*kUaLxD%N7gw4DIJx0)Gz^Aqq79f*k$y%ZtL zI*3ts?#3_IzrS}4`iX#?OK8o%Zvn_IpaU;5a3@6MVlcUIM2}u*-H<>Xw}_n<@X`rU z76IM3`r=k^>4f&btls~rvLm(4BMYVxK6ifF6|?}5mCNqXD4-@9K~!u<dsX^9yGsc7XGu^B&1+6$SkzBbnd@Fe4@j5E(n0y59}}~>*CW!K1d%pOL9*D zdg#A`=-1OuV0BmnO9YV_UsV3d062f{{gzJuKllCr)RU9l=21aPEgLurBVGczofc3~ zk)&A(5b#DvblOA-sF{j99k?D1C7*6YCBMvgt_U>Hht^>BW#$4j*N00)u^A}+Kd-rP z6j5UJZK_Ew%B`=?s!RYM=oJX|-|7Ve1#>`CxeMT?-+CCq|9aTL93>~!3T_^qz}qk` zOSB`7fW3rDfJz*4GVZl`y$}3U_*Xy{!)?Kc3$EL&p(EKtKA=Jg-x-jL9z{{s#37h>Auoi3J4f?-4PQGa?|L5&I zG+=99A zZ+Ol(y<@pJ#1hJ&4DjBe4^mOKZL6CD)&Gn$Kf2p84)<(65r3Tl!_v%_Y2}~GUF*2_E&%x3?ZC#M z*63-mC2>F%w{xel?iL`h7KIE(^g-UST8Koh-8d8G@F!R(ynN6CoJqPYP)3}zh9kCG zL^Afl$q64=Okc45YBqQ%4hxz!MMtcJ&wG5@5?21&Bn>GLg4jCsIJIq>sI0p%LldjC zHrq)V7(DcVb-sIF0qT{FnCaF;-Y+2|$#5x}YSVhZwb;NRmn=knLK%a(($G@;6h01_zk?@Q(bhO{viTt#>4n9J_P#?WuJLwnQgRXcVA{lV}>i&cV{} z5Z}EzY@jq_6wq+$qDTKj65-W?MgeuyTm5hec^+Kyr#sRZ2ldT+VCPlpbUYXFrOLPO z+^q$g{GThN#6WJ9ywe&ORf5140pxGq)AV`iRQZH)xBV|dC6tI>?30W=j4v`nB7z@J zD$zWHCcOii9AspCg6L=CWx zpPFBTEm}=Pl`CLOQ#EGl_;XIMQzRyoXj{gmz<)7*AZ?=r4|KN>KbT}G=9X@)2{Njy zR@3+rB&K=!RPKTZoaeuWT>hrif;n(ud20(TJ2+n;i0GHdBTzL&vrY02{`Ykph;j}7 z{`F&szXC#yrK{46)zUM(Fop+qH|#pLL|Gy(V#W zo!~C+xzfWUj+9OTv70ZnsN%FqJmtGvGPdZG)p%=4s-Ok3hUv)wcY&PjFiuwM(gE-B z6OVcRg?9iohuU$=+WF6)~Nl{@QYBU``K5bMrJo0%pBqtWi*|uQt|K#Co2bX)?cEG2;#1Ta{h6 z=1V4oN*g#cyPz-O+Y4&|;5xz48;ymbW+Y$5v?p|Z>(y6+&S`OW1+k&t`A6R?>&5AT zdS?!DL)RHxcIEOn`A+DlYXUY`-}M-hLPXhzt!cL0q;t)K!>xvjPkKi0RO0QyBk&A(DCeQTjzh=8jN4&29L8? z!OBBivJ{7W8cn?xM6rxRMA>6!ZYcV9$sS`>jJO8PKFS5RL9WR<(ll&lg4BtUJCdAI z3mU4N1x*{Mb?sU%PQoo*1oxxx89txCUT5>00sn)j@$jVS=GWb}V;{?dz_f%~!h!9i z0vL~?K(peGtA%icm741lKNJ9Qq8qwPjDR8J8f4h_1|qi`P_>)2ApS%Sfi6oU;lUzM z=ZZs)g!Rr^j!>MQgw;=)c_9u63z634^7&@wNx zEMT2EE0m1&wAVCOznAX<-vu%b-%RF!$8wg**hBne8q$QM586oTRVh}a>>3x)Ys7x= z$QsAE3flBbKqru6(^o|I1rfODVA@;}xEWE1)CH*#HQPtssgBI>Ln(GZ%lzaG=ETp+ z;@zIU;xN6Tz@o5N2r^wMSF~~ey&1OcNI570ZH#QTTc5fEt(kHWj(s~Q*n=g`dWqnd zA+E_s)_@xp7p##G9x`wxa|-RF@1()p1Z6hT%yo5oJB*Keh`jO1P;p2zqVE^;ug$gf zKuOaaNld>#^?L7xo`b~Ueu6fVS5_KK116Cu+p8{&RIIUA*Z!>=_1Ek}6Ot3A#pu|U zf%^b1A4CCK?FM+G=b?YVRGLF{8M_g@?RrK^7||UQ&_Rthjo|`BakrtfBP#bLM5lsn zif7JVoNwR$-`@ixqsj<#M6=_%!7Y`Ye@#r|D72e!xD zE&xa4z8eun-ko=^(UGC^oD(exmO$#A|2j^8?$PW=+oWQ<$KGA$EvwBb|Ar4b+6Eff z!8WFFdgVh1RCfacp`f2PGa^xrbxhDILLW{rq@ra?|2C_z$r2b_ekc+IdCH*3G+HWH z#&#%Mx!-o{)%?{jX$dhx=it5WS9L>^A)=}ftu=1=+KBZ<6 ziIeRibs@R?l0OQ1pmfE+d7R}70j_{TEV&-7q3a#@XhbI4cU-8bMA*9%O_Mnk%$=TZ z7s5*Y*U0{LV@Oz|F+R4&B>4se3A+2=LQ$gy{PoPCu!w!QU`-~hh`eWe9Sm0h9k^_n zBVqu@&4m(RVuXZLm7R&PYn5l+9)NQA5_khvrDb$oJU!bvJ<&n2{d@UD4$@X(9=Vxt z+Dk;qN%6v-*9v}&HXsy?Xslm*kWW$%TxPw--F+XtPYzqKpC(Fg+hP3_#=fL;h>mZ| zuGo5bQllNrp2%8HLGCoHmI}<{`ES{onT0@vT*;FoUZKi@J5LalDBxW>q^@Kxwx9k5 zb3lD^aVQdo)e2g~3eaoQ>e)!HKwMq%hwRA{K1RbM(yXVOQJ!(qQ6O~86r_erS{1lh zTv06-IT;?>&y)AZ4zX7{8_&N*;5!T&ESz^xcH?G`GOD!Ard>kYt5^n3Z=U(x)*klNxJf1Va8?csFyIdlp|5da{JX50JcSr#WXNKx}kZT|c2by1inO%?c0nzK2(;YhB zVa#5T^OpW`!oTJ*N5xgK=HtZAAaqn0A+w!-1l_prXU#cV-k};SD!!Yw0kISHSsLDY z;;v+`__XC-gO%$J%t40%+#yyP#$kC?kiLfiK#5X<(8l^Q=ArlhcxEZs&eVx*c0I-c zB5%Az60k^A!n$JS?N6YcEi*eMXancx^;g=B3>zcl;aoQZ2BO_TmwC0PBM@>gj4;1eurLWb#&?guR}Ivqph*fps$ zSG@NgF$TS};xD#PPhC;fJM!rp%lP5;OHM>J^Bh~H5m$&P1fef5R6_>d&6u&7_vLqE z=!a95pHxo;ZD^#m!Z~1U?FWah=uXXw0-1fghf}hlX{* zUc0sto-2$$5M?I{qK?_GWXJm4R;+tmXWzfJ{A#97>V%T1FMZ%fXI8?<%qe1+e^Z+f zHJ>pn-fIY$Pib>GAYq??9b9;i2`;<`5>c$M@{}CJ_dv+BHI~|RlxxF)U01VMF0#dm zAYtrY$DyZ{)kveoLev^$#0sHzRsS9wJKd=D8!0|E^TP%7>7*aGG0~Mt@&lX&aeW=R z;z0UKJ*CNy%hiD%#z|0e%?H9^54yR4yhj{a+3UWRS)}ZA>|4)^T)u3;(0)Q!%iA}j z`d4+O&*y;3JYm1kSUhv?+hyoFb*QQYZ^JGS-nxcbJUQ9}{AG=4PHTf*rZp&)<)KD8 z^4OpqL~bP4c@GSapVw&CPdu*OMtOm7>;tGgU)QzDzZfg}{;2dErDm#|J51m!b{VVd za9qsaPc?lS$(?(V7;Otw#4bR2#uu;#IBQ+Yj1)zw`2Jqmaf{5()1htNj#-w`mKCW= zQXy+Udz$^!iV(l0utU>OH0Hg40kl%|x6$~22efeh9c5bWklYY+90GlQ!uh`V9{PnY z`D=1KwTKD+Wl|Sr=;rhz|B~^6r%c6gzK#~5*dNIo^Z*mnwNGJvyg~>RsO}$xO;&km zJtGI*N{z2h8uq<`|%pntKjTTTN1@RQ-uS@3N zP7@Beo32PawiI zVoCsI`#7g+n7U_(a_26_hpj~cyO^r+YH2ciDM{rin2`*L6(l12up#pq(_)lk1jw33 z-wA`LsbZf>fmJB>YCf`)pF1TMCki9VI_3Nzu9^98(4J^+74Z(rSHqb|CkTPvykBmt zfK7u1oT2sw`X~8(sy+W;{uHRAN_vj0j8?}yp*^hOjeKa4WFnrz;8vg0Xffcm9XI1@ zbpa}|4&tqTn~@g#JnIq3Q;YfR?+_92<0^vX8&UK2vgv%b4AYXLL4o&y6I16hD;8Ig z1n!mG+UrC`_4Hhgs&0;a?J`>On;NmTB9t%XBZ39V^bzDNY9hY~gmS)=!bN+sFLvC- z;b6hg71$Q%VyrMfQ1r1hX9?VI-O#dH%FB-al;R^Vr;ejeAJB{J0%{{A`x^T#rlYhu%R# zIv|>5E~;fh?u1CU&8i6*^sdvAhDZn_>Tx1u$;bHGKkPpKNMw?5#z#@g3p6bn{Zs@D zP*bb8SdAk}O+}-M@{)s0@RyFkd93aN8)oga2tZdpvea??>l|~>rSeGBHz3+yGdjBz z@|caZ9W=*o66a3d+{>r}<&6plE}vJ-T5XOY>=#FqL_~e6vJ#A1R+U?-vnEslZx%B&uGq!y!8zN>9#r44Ma zchDk<-8Y5qH=JQJPoySeSV;7F_6nu?mreyC64pV)KW74LX)B9{+WD;h(=rCake&zR`E9g2F&zx0U%ad}m+QXvj@kS1B$C== zd`9i2m`b5MuBsCH*kG{Sm*+C~!5X8CD(vm17w-yDwy*~9V1u@;mr-NEq z@w-XzVJ@%7Q4s6A8k0L2ZOctdG~=^ll=S4q zo^E%#+q%TDJ*ZYR#rOMBbpq8<_JOz@HAb(nT2)NIPXbeb7q@{q)4{|XrfNIoiBe=9 z5|^CkM7dm>dgp}K9Wb6t3X&18Mq$8-Fr~!wYn;-iM!&A|z{?Pb@*e2?{rtgHdIzQn z?v~^pem2I+BSxCN3aI(o&Yw^TSgIr+$2=+m^vN5$fvSSbr{r~>or{1T`txQkTF>f^ zi1vpe=?+vjWy>|hNvFhPytwySnarGTLoHW!9b30XhFuO|1 zHKIiBRPx#O@(H2KJ*}ya);u0oSQDaTxep7$mYVbzo|=9sf1Yxe`nYYo;WrhhML;|K z78a?zNE&pxr08)HL7Fr^5$$5Qy}H+*U2J_c^l=0S7p36LKy9s#(-4L32)%l7HwC#h zGa*omE5hq0rRN&tFC}o3u?-|r^DEPbdcH9k0Ymj7D&_NxR+iKOBAgBB_AiUbhuvKznf0+ zqrOv$LR3z;F+*D!y_bg0$F9K9Gh`2cp&Vy9Dh1gC6#MF#r_@W&X;%s^JzaeW_u>a{ zlvuxxX-X8(MNFYUOdbP%||(35MB1(oV}7=10lA+MD`WnEL4Xz{%|Mx)y>I ziG5VM+)aUIjJVxFa%^$+T+MLfjhuU@?prfQK=ryG`{az`!?cXanqS{0%<|C+Lz_V( zxrm^-Yw z?35}T0#{Dqp0$-RyaZ0_t90q5krY|_98b_3{fwO5HSME`<&@mCnDNiSfn0GJdqY_+ zlj~o4a`;($_`UX?n^inoo>V}oitX@wz0^yE%Lc4Ph0N-51$G|Ymi_Q`iQ#va&E zGUEz^cNhW;DceGgpYjZsLGu0T8doo^Qys?h63(k_Df^~mH*<&x1P87K70YAiAHKQo z+`y5hwXweTI@LLD=DZX^{lEb-G#er?2YYw@K3ImJ+82^m>cAU1*6D$=jQ55aP5yYW zy<|K!Dy+j27r3-gwK4hXCrYQo)f5Ryc?u{Q(4MzQyE4(JSq(}#-*87LQ`w({dx=uE zCo386!@cz7p(R3TnThNv)u>N6&F+a2!d${q@BKgw=D6HPau$;qeFrXRJ-_aN|>vP1S%JX`q32Tkd$T!z`yvPA0&-q zu9nuiDpgje@m`SdIz&XN9$BX$gvD_GeMZ5f;!s5?+z8QRJFb3;tcRKVN;-Rf+Y)US zr1TiZLtbYRV&}|A=Tq!(`IwUe$IZk7u#}m#A0KHE)W_%oDK7PuT|YWu7Gob~sJ!8K zkq1=|7urLbf{XjQq+(GDWsojVEIq17%2Wa>3(rN|OtnQSSui3)PtF8cVT4($6BT32 zX|=9-T-S9r0u2>;EnY7X3!yBuV-`=qv;a45({=REAOD(`r#KPf@r$A^4qnY*9KVsI+0aW!Ho*%2^(-qe=q5m+6weB$e$Ah6Mm+?8Gn%YT># z1j)EWrV>RO%FZFl0}yly$PI5TuVtcX2P zujMkgMm=6PArQFkVOE^1!)jHK!%d1+NqN^NDKYxJ;kIbe_%#J%huh8gadJWZ3aNoM zDk3vp@?&;TFVH&w1Fn}RUt!gp;FmXgfiQNyzM#ikC5v5|BhO@|A{qAkP56eh{A|$* ze?xC(tfm-k_>QQWGK7J%U|3YPCY2kmO^X@r=qg$m3V}JW&8~f~7-qt#0_6v)+w$_> zRkRo~ryaL_UP3e*L-$OxoDSzV0R`hj$4(B*w;3IWBkGS0K&y?I|2fKAV*D$RI3_<3 zXtSiCPG2tSN(y3?|8N={Ay8z^@As_kAnr*}_z~^Xi~&-O?Cpw-nU`X44b3l<`kdR> z8T91*4nw*OT|qa1v~sU9(RCRb^34H%jW84&i+@OI^!O(ituv=#wZ#Fk5nls5&+xOf z6bQYSZg5eD)*9ou_p7lSV8h&}&H8MDzi|welY>>I`<{Dt-GDNlLHryFk^`?|(pc_9 zz4iPKjxoP9ss>H`E=mk69z8kiBdtP%$+ky&ap1#u1W#BEsiVhL1fle;6R^4}IxiMC zmU+JW`)j3Q=d_+Upp~_pG81N6%s#9Qvk z*E|8Im|!2KW69wHxhxf*a45zJk4^L1g>rHbgll>v?kjx^H&nkI5}r`psq^kf<|Of2 zqDkl*s47T#y@_=|Xom1)Q81s`bbobUl;2h6-CDQGMqHgaHil!EXstrHoXbGeY7&O- zy>5yOC!D0W3tmOY#%jq>ow?1L^w$DT*B@MkTdx~%fWf-bu$?YsXQ`Dh z$0n`+d{MPDlQ?t%3L}%i`xl&l@itaQ__SWIR))^4kz{Y{`USw z_jC!Fd8OX$*XQCNMNs)(dz4C|3LGA2B?7plH^WfY`UsPXLMZDc2d?t^ku#`QS( z_ow6?`s9MXFT*E9C5IQC6Y}-YL?p`QS{*Msp|L)%GlE6BrWI1|<9}uUJ1T;A9R3KhGIh=7LrYTspHT8 zL=HCHvc&LcDFrPK*5PM|*+}{IBC--$$^%X0-9}kh+1&qJ`I1fKYOQY}aPBy6^T&3# zUYz_piyv?|jJJhr8T*ujVthdp?)mJ5_NeE*Co6_@#K>Afz`zu`Rpkgt`Bw?3->#g& z4K)yAOnFN8F{+G6(T_%QjjKP+m!dVKI!L5G`9=`(G9JL~+rnJpOdf4HdACIQ9*U5d z@#hOT85iS3Kr!?(yyZSoIW7kVGF`4v#mmN8c8=E^W0?#;m8NlkIbW*|NAYfk zm*#d`zH-DVM!rKMp?T6v8p>8ghSqG|b5-wg4aC6!M;GT$xF-t!BXBSiKI!F*v7`l3 zUiBq&g18~3C_h5A7Iz5WcE|5&#jiDWfrtIir6*@{sn4Ok33!MXv=L{?wwp^ut|6(a zuvtu4n;!bUl`Hdz&}+})1WJAn1NDBK`DvF@Ku+d#6(Ia_l;9d1VPyQdBb4?eP9((@ zrd5w{w^Q4UWz8MnZ|Yj!8Rf&eP)$oTX8QjdS{HXq#UkS+rw4lM+->6EE6f~6e_r#~ z%AtHG_nCs;lWVVXK7|PAe&Krn_YA&IeUhUDYRy1)$y@=CsUdDR?LHOb+ae&wDE|tn zP%3}ppvFwXN|Ga*;w(8e=dR>RUZjL!Dp~<(FTBWpnDET$@)PN6rcRgf!%#@@{;VWZ+m2hS@Of*V!K(DqqPo6iQ-P{ z!Qv6IycsrrG}}h4A!&K|V7lJT49Jr%p%6Q`Dr@LK#WCTcuo_d6T&2rA#Txo__xNso z1Tm8d6bB7QOA)BrKw1~w?g!1&x+-~da(9V-9bD4^J<`1>PuW^|*|ZUhOm|ErBm-b# z)d|`pQ6RdpY6zrGMR%>XgEj-%-vO$cr&94<=8X8MbptH&@?&N1vm>KzAwXyzH zF3VF&HB%R=LNai7J%f_>@7@U;J{U%o8lpdj&&ZS8)*{1!(v40Zy8`9jvO75d`|6}n= zFkFP_3nOHM>=`|v%Rj{*&F^ih7|9_Nyby$>J_qKsjDmWl0Akrl*?GO$q9ZEzZ68i1O^Pcyo?{$vX_5FwAJoD^ad+oLE`(7Z& zMr0f0O%Ef4&}`q&mSbf4FyIO|iH}#Vn-?aD%va6njHo8mV&JE7DOf# zy~$)YL5))mMt|a{>@xaKc2h6Q6AVGD$_|gE?9uBm$@@~y=vwi4n`8j_f_vf;zm#Tj z1Qi2E0U7*yL`1JlXfBy0POzevQZ|%X79e&i*VBMNPzE?9N#;xVGi>{L!?zEg&rH;g$c}dcT*Q~F7^y?1 z^j?7VO&PdWv%fS!Fe^SEF80aCFkd|=R{82}=!n+53eM=lw|4}I|8Pvdy#l`UWk%hU zIhY##x#=k~w;BkCtbvPckLeqDbGvw8Gd}DhQz|}bH2R?{6ql`^BBWNVSdk-}B|$qH zw}(;hgL=`e9eXkJ0frDvH~INk$F7*LWoejXBks*(2!{dk5@tgA2mUl1w?Uz1ZIq?$ zOK%!*YpaFA{kC>xtX$!>j=LL^cclYKS+1d)jjn03tF~uwqYI^{oL^R@J5|qlO0(Jac1$^qS(FS@b5nZxf)|3t)3eETqBHCrn_Mz zm0U^&9VUXG5&10q8Vu8puL6W#Y8T0MA`K(`7?C&;eiXRdEa2u0hV?ChLt$i`d~0E;pSVKyMLP z_}+N7m2OOYk>O^~gYkJm#JP(;XZo9#>w&d<^XZhiR%?rTr1$-pD7Ii-CcpF=w3EPe^m+8 z8<@3Vd-e^0Y59@K;UFvt3)@{A9r(elt)i^XR-PU;r?SMlhic?=1nBQOk8p|&Nc@H( z!X#;UkTc;-a)zoi<4|Zx)R!1WkS~7@w!=&}0WQs`_wu@V4n<3vfj?)rm33|1l6PjcAwFO(W6aU7nFGadM-@^TwYB{)>QERkoK&AfLCk> zS1j`xpyiq=tq~0pzk@{r_V9}I3a4``C zSuZ~q^1Jl&)qsM4&h_*DQ{=*A6Vn_uU@nsfh3Zfp_-;C{WvH-YM!BA{ze{l{qFOEU?84;3&?nGn3)$=s3oF5-uu}w zv2iHZY z1%l@PZje;zz?WWgGUNUBR;G9`QV|csum1Mw@AMT) z1dODn&EjW=U)%f7pZ?DXn@~WL;0F}Gf4hG9fWS5Lr<@fnM&O0+aWfPCTf0qMu>it+ zZ2w9PZs>JtMWV)RmS5W-Mg^MBc<(b0J^(BE-l_PXxBopBX%*0g=e=+c=<2seLceu2 z3^IUxq>p|Zmfxp64cdkSzIRi_f4wh>-GLA4ZRB+IDNdK6w^L1pywV-yI?S!%H>k!DcHg(-LI*zjvO+ z8HD2Wywmr2{&hWqUL-*6&1O(=|E)_epui@@f7|~{SN{9wUx7`4qW|@kJh!F4%`p#620|7Vo{1+2*95BhL%hUU(1v;5041Amr7D{TzH zVITBsN8f_7kVvy)MU&qb$nTHx+yR~Ho;a)WtI_u2gHAQ_b>}POf0!5y*lLlfm$iNy z4zE^dRc?6l|aihP1-(N{5rnnHqfWe*!^z5e)>Q2^cFgzz8K5=4jcdfaU1O4 z|29Z~*MT(4q&2zthxQIa{%pknX*t%f!(kZ!W~Op*oZ|K$9*u(Vfzom9SidbL73k<; zIiDr)hn|{zgWQ4>5j4)P1KbCL5{Ut*2Z?{Of)AlDsninxjzdO67MS3A#GjsAhb-mu z;}qK8?592SY0_@)pO%AJ1n5)38VT8N_ESv}G7g&tSN^n5$)M#X9uWRJNcb(}6MspQ zy7B9L{f}+x%Yz&})ya;AU)M=m3$))1YF_*Px(oj{SpS&`F=c40s$}M3|2nCJ{$S_= zOhKimKTM4cm>JGXzfQ{;uLZ~v5qzu6_=m+X$OC%BJ1NX_<=0mh#(;rS8?T^%C@BB- z+9=4#R-;FLKZf3VgGXhSO8*3(Eti3|l~I+Q(y!zA774BUxRW zX#Vu*GpJM5=igHP`c}&*FfV*#+Z23%7+o~L#xshNSN`6iU`a61bER2N|Mb#ysJ(q5 z8Kb}TbO!o#>q_RgUqAhyc~Wu*?ak|rg8kalGhVacQDS3>D>&s$=KxfN_w-sBDC+SA zB1Qq>wA)d^KjD7AFN2>AG% zS=oIOjpoWJ7jx)VVF}V(>@@^8{^5tAcK4}4yZg3qx9zX{IIR+VnhPrX@e;m`6U#-U zynh1%YU6;0VGYGRlRnuIU5x`;`v48DCT)pwJ*WiP7ak4cf4;`0Ekm}_WnmEKx1|+F zjn*d?ON+h=kZ-hDKpMLQ0wj)ASx8#ds0j?uoGT0w(`2@)$tp~N%}y`G%!-# z>KwGr&Ty;#zFPizrPoEsK8rnh`m51CgO!Ik6AD*tkfJ7hd-I$rbuY-(S^W%JUsOos z>xNLLfGnh4W(jf;RZwvo4Mh&9fZ+aT$y@RJsscqJH}7hK7;pb5nfoaStds+u?dUmt z)+YdiF8RzID7fdl0}2%sV;y0A_bDQt@%A=U2nZ^Q^DM!XVHKdJSY-o@#-Z9LR%v?UAIH$^U8M#oj@N*6AcVt_@0|jN>vU zg*{RC_%{EOu{Bgdb+0pwT6_&)3risE^~%ah#5%}f7F$-&$5eutA+kYk#0EUdq&t>c?m)oTo1hM;ek4>TwGwElkAW*OBx|^3 zKoejA)nftzu)*sf<|(pC8w&pk6PJ(UY=H3FdP5-CYz67lc7sf&G;-Mo3VK7}utWjd zHym2y^k+07Br^nN(hcr^Ly2oMSoFle7F22&{o3#f6nwJU+4HkBpc=|AD3g&YBM>?K z2vx9%T#{P9%wYQnAPrCQB-CN@f1$sAH@{$w$V2DF045vckbbe3Up>LTi?y zwC_NO{d?FqqX^X@P9CVIAU6c5K-cTc#vmAa;jj&??Enb@%mxt@YAOLNu@+EYy)q0f zTKr){=q||eN0tN8w-%6#q^SQ60`nsvD3D+Q6%|)lM5>33MPV2utD^FPVQV9g5hirz?zu=_=SDMI!MceT9!0i?5Od60C6Wt zh3UaBISj}fg9^iP&2XUihvHz|7sgIU?o566U73kEly zwfs&LclW%{{DKwH-mg)#wEyx<(|mC}dVX>NfZn$ZZWzTV zJ(x0kc@rc-DnSVwfRU{JqNat^my=R)2B7d&s00@Tm9!{>$fBT7a;!g?1xZTe%iJ}n zKup095#|#Zw7SWAOqoHZq4!|D?fHr&%*xp#AZtLTcDe{cq4HC%PobjR5Zl5-l>1Up32IcF)T#yoSPMvPpe(WWh>0~8VRa!;n1ES6B@o@f6o)0d zg8$Dq@w9K?;OsE^0dV*UjpM^_00$FUF~U0b>)phw419+fpZxAU!1@Ctl2z#d5IH4} ztemgatbkl)MNW!KCsZ$~IWc$z3BaI*lA)B+(U|8upuLQ%;1_ca8Z)qb-oI{ghKd6Y z|l|?#2@+Oir!V+vJ2;z4<528n-M2c{IfZKno zNALqJYz)xX1o@Q!2R{x*cyo9Fky754S`xYcSg_&m3{)cvBE=i)AJ5*j=TLvw@dKRc z7IN>8gF{;0^EV$`^E~hk3)4vjFXBjGk+Gm3N)@02Dgn^OHcH1H1yClNIpu)=-*EFD5Jp9E;RiJ;oFsat1eT!@!F` z`LF_@yuo6uS4aU$_~@dE`KZvibcg>K6smv>zSZ<#S(qdn+dO^C1g!xCf%&g@TpQ^Tl;h15A<{u&BZu^zR3A+*C(w1dl4vIa((k5s0sabNr*%mWcS2?t zR&fGq1$Tfn_#z-rRRH5Y?ic$g`)l_z47x)^c+DB;(u@PQ;ilTDu^@tSvY_jolEpV~ zIBZJ_fOMo^(9I|UKL=pLM}Y-gxfTFO1u)n@ZCtT#D5x-gAGjNCi#=;We`^6)A%Y93 z(Yd8p(glC%lM(o`GM~_MZ!t@l6u`kwtpNU+sg0o?AWe=Nh6>wBz>|d>%j(>ZkG9ld z?Lcq3k8U3~h6KZ;Gvxt5|1DuH0BI?>>Ao1HtRUSFkp{E?-vI15o|rIWV8o!D$x+x7 z7|AI}{MYFs=SBfF%6=@&`hMg&7&kS#L(>1ZKoN!Y3uuz_WXTP3ipP z(F1i8JnCMcDV~J$T4fV}?4DwHh{r)L(F*nhD-jqR)MJ`LS~RZ8KktjeP;d}Th}>_F z?8?Y0_{p>d*Magk3saDpWq+#78`A3ay>fF5r$VK;9ircER4-EM zrPa1}9lMW#0;?_%anlV0m~E!OH!v2$U;TSEmY)SfIVQ$v?{66>R^bh=2{;5PIG8i0 z0I)JQpPmBmsNevUMqh1jQW!fr*xYO~%^H}Wl$=7o^hFz$E)DgkaaX7oW+sa~iUWBr&qA_e#@6O^Fnt`dFf-|hH&1^(p_c0(yF z_FZR6wy8IqyIJaWr?R6}QNXBYM3reOr>M8z0cY-*wte@PuT7CTiGU+p({RkYe}zrH z{SFfI6yh-mlc2U(J}Zm?q-Q|Mf8t3diO{95+hg&q7MGV9E)uZzs37qeqDK&z*b)e- z?}IgRxC@9BJfkEeKx^Iz*fI-sd68%jAR|J*s;{3FtyTt#9tsyMxbek=Edn3<9k|3X zI<5nZ5FcQv0H6ZE;qy)o0{NR&!DVogR0;n_^WbL}w&l3QG0kAPdm-gz5(VQepqA$XeB9w`1TDTE=KR zD+Tr=hnSU(A+**GlH>9yU@L8gUA9v_1=qI`Qav|)Jk|Fj27wiEhS}+aChX@5_gr#q z(vEr}4#ZA*eN|mhxeh;C1+smkMn{6Qj-7PG)g%9tdr*>vMsojw2(?1)xdgZ4#i2*v zHFMXQ>V0FXjb&jN6AxLAS3tI;Hs1czGNp-CC_I6G819sNpbt!NJfCHPe3HOtFyDLw z__@&uodfXd1u}B8u>-K4cPKZ%Q2ynTfyAl=yfh4(OVM&yHeC(4S`vOBwDO`Ou?Gy> z+AYpi>QaPQH0`r6rX>h2;t#04!{Am`^Atrwvdei2s8TzgE^%dpk7U2qgVmbRk&xr3 z{qv4w^oeIct`guZ#xC9Y)c16+D(W@yzMO7`!@DAnh&D!C%REaLlblkPzi%rXu}9Vu z?`^XahkfH1SYov8I(*j*5^#Qc=Es9QkL1(G8RQe5l3SLCL$vSs52hG2IQY9JVidGN zXr(rdE?KwZ2;6ERCZ|6jrb^bufrH5t(px0}a=-#iyPPqbsm?s0 zYiNj|CxJDe_$m@EusLR4yyqzWggIS4hFSZk%@;Z_!u0UkeEnEZ5N`^(lMw63!%o&9 zjdh@ODGA`!o!mUl5jnu^%vN91XzX&h0qjlUvNO*W2L*?f!4AOKq}Br5^wUf^Ay4Mj ztRR$92)rqGUFc$kcsc>Sv*xpSqgvzlVa2&3w{MbXRVoi(L81l@A{e+ItLtCTLe57Q z4sO!v-1=gCq%4}>>wr=bl-JjD-;3V7vzN%gw?}ROD63UqfmbX^q_rk_H$d3pTlTPi zvmbyIj4~)SU>=qYn45B*yDYi^ij1$+>p9440FZUUxnxnRV8`I&ni?T32t5t}NAK8m zYS4vxix~_up#ro1pKP*`P8J`19~JTYyv}#{fiP+tcS!DkKRiMt8vMa(vgX?k<8+0< zl<0JsM5dj!Cm8g_lkDzT(acyo)a|_w>`@vU#`b!ov(Kl2x4RFRy_!ISphM z5;AGIkW)-QIf6)<7_%GZo3Ig2-2xchc`N@RLW~6Gn-()XBm~a;02nQ9%QcDv6VlYK zz=?$_%aD4b;eV>qtt~C0K{Vd0PMo4tj0{1QuiEtSvyT7bhFyr zT((gcYK4^VAZew=G1a1G(S*eaNHwj4A`_E$B_7@ZXyIcXf~Sf*^bpqsikVG|no;Tv zl^RO^h=`-?Gh-J`z3KebD_bxGlw}@LfNx7crJmNHyCX-!iiga+>G%6P<`B^xP^Ue+ z9!DLlcmgaDbWJ}AbWYHUT^3P0Ejk50&SdTJyT9UxWU*qbv$(v=uIIQE(;gwFUAPpd>YJ!o7baeSjnJ58=!2JiTLw$Z#uSq=t_v>($jAgc8 z!jHiUeP4>fOFrhw10p&YgH$=y09Fq`WlyE4@3l|{<^R|<)Yg^i&$eFxDjj>4Qr7sZ zAmo&0t!QE>HJme*HwLWz>EUNAtz5O05oIK-X&oHBy6q9{dhRT`2^K7imrEUxSw)Yz z`D6;k&y4|n$d1rt=Uc(FxH9Pb?5Syzkv0iuqKrSV4t&o^vU{EC-!-Odno!$F;W+p( zyEM`WMw|?yM1tuob8ev3NvR{3XHm|Ha671AHG{2AHO;UA*j4zDWDs(l z#iS;RNMF$<3=8LN%=EvBRw@=z6y8&Td}hV|vW2TJrTyQydf+~O9lzo8l8LcLORk+( zzh3U(tj112dI3bls=uD@7;Hc3nk~N*0URJyN4^5}DnJC1-Zi~)Tiwl?uzyw&SwBn> zBWI966&6wD7VxBhAB4G%_Uizvaaq2j=1B5*V-$d->x(^<=AfCs(>)_4zyofnn+;5QB7lbioQSj|tTG9BI!QC!OTy9v0H3=( z(p3q;3f>LV!(F~<@ zTm9c>>)!4VX5(_o!&=@j%hyB;Js{)WM~B~!gs0!)U1kVnINPlA> zEw^L+Fi#uzcvmg+Xbrg6ay^2mfL!UxU1#f61f{%ztV7=B`bWj#i^06f$_X~H(q|5U z2N6r(YW6lPXK*#S)wOg}X!?-*2k(I+b^hpf6NNWi!&~a-?bJ&XJPUYn$nX->DfU!z|% z$Z`$CbP{W|5D3ZGEb8EZ;OW};XLUfksO5RbsO}PAcR#3#NOA7l2asGON7w;@JZtmI zc!z4uSie}a1O^ufcc+)R5)&If!Xx;3*heJNS&ZnO%b8n^5z7L-AmHAsdTdf_Vvrt} z+sliDFm6q7n>mhB0lFF+GvObnzfnw1(~0X-4Ac)~}e zFu5hof~s~N{S53}+w0suOP|HfIAmxwW!+?mgQe|gEog3jGHhW5_B$vF#fMC}miz|7iRlZTAP z7`i~EPo8HS}ER9kxpF5DcoVx zFHms(i2v+-g=8aZ@CU*ovqL;@i!F}{_eyg|; zA34aV->5x&KES1MWZ21@a>;w={;;zS5xLprs~8@%%j2~VMd|Bui`E;f2$Rqr+kk!t zt5r+%6CC6@T#>&Fs@l(BPkbv3v*c4ibrNd+3ASzWVZ*!(LyHbrKApA$gnJyx1B%OB zDB?^~FX)Vj#S=@*u#Uu znp+VavI;Jj_`ojOVZubPXaV4*TU>!n?*h@J=;=bR@TFx+g{eS;0k|Aabe83e2uF`H zAOP2kF%;F*OS@WqISoG&`ebbyqI(crdVyL|Y5)}hza_15P3~Y;XoG6uVH^+ctCt=4 zp%VAG-B+ggELUhNlsQ`LOdxYt7?e*R` zZs30rru_(gNyYC4KEcC9%9DkYYCkJS1&fEtcuZN{gnb8*J63aT5w3T0dM2+A-+g}I z>&`ti@oLRwyi3}KAS#kO`AJ$5&Fc*)h&;@O+Uli`$g6{t~T)% zf{fk5CI`q#E%7>qydwOcrr^=q?fgiN({=ikEGh$?sME#>Q#q^%ZfdzutFVboVFMUha~+uW$!H;&2H3eJmNL*HnhX)H9eNFOJ^VC#5e zu7BNL!8taw4Zr91!-$+d$J{fcda}o<<%MX+Scye;ivkH zT{gHRdYYBNy+L)e!+}8Z1Bg-f0&BW)XO?v%wGi3oH9o()fv5?vRCVg%;>)* zUFW=`moC9Sx^ciUe_TR6{J~(_(PvD>LJN3JgCgB`-ecQ1Dr6>Y5iHh-Bwzn9qF?f# z03*o!^V~|`ywjb!%3r*(`Fc`|&-@j6wcTk-&(ZCQu>$wx_f4Bc$Ft5Kh)$l7;4-6*(6AfM z=a-leSJ=FNe;KcoE|i5kSh&TYhZ~s^PD+T9r`;>n?pP@#LZZTQFCqQ<62<0PgYWPM z%uId~x*FoSBYLV9IGx)rij)s0J&Q~Wi>3BSXg9Xg$yXA$Ysu$#+ii^uQMTSh?{J2* zn}fji0t4>JIEUThs?{tiHWXoHIe)oXzGwsl027=qO2=w-)*#lG6lZLS&)v7y$*o6w z(cZ+9Pl=vrGT98K_kP=7+Nm6_ee5eRk7-R;5?>)jmUnRPjYIjyYy(O-`m(t76=vda z_@Vc8G>iBiDfeCgTx_Y3rp03T5SQ}qZp@RdOX=LiG}0R}ymf=c+&+Whk_>z1Hu-D( z?>!a1J_!X3{!Ld@3sA4=WPFZUnPX^mi@S;Zj?1vggEy(_AB-_OVS1``)GdJIh&VPw zT_c?^@+)h~sm)`e2&z@MMqYpUrYokFhIGtjPSHAi*_EzqH#>2HzsohaRc(k|=kg6# z4M(QJiBf9*L6sB`didprs=lra}> zgkpZ{;6y&(mgM@v0CSkJDiOoG>yo?kc-SubcCX&I+R){(EPf87nj&w0*#XNwUggF2 zM-r6YXfvJR+bG9edw$CrE2hjih+Q^C?;;dBq`CmYhpYU{WR$KAuZ1y7cjfBqCo&5U z>auKe=73(%aPFZ?R8daSs=W3C`r}p2H#@q+K)2uJSciSwadNmqCaA2jp<^JVwN}ph zBDSKH?T7LL&X*W6di%(&sns~WZ>yD>PgIK~AcL!}on*l`$*0jHvpB^A0~qgVg+b1K=Dqt#o@F9y0e2u~ zZ!)^4$z=e_>o^qT;-0gNctQDk>1_UYPMj!NF@ii^(=mya=fCAvm_ZVA`>E>})e zteh=0P?LpIE5A+HDj5Z;LoOyvRps2mOcaoIbchce&*+Wc3yq@0JtY+aPsfZ~iZX`? zyc7HxcH#&b0*-eKXLrA9vU?jIG}(q9m1dRPu9+FS{7!;VgP|c%LJ*RBBjBQ`dY{0l z{LKfX;a_##Bv=iCw~ zE)}Ilc7E6FBX|s8DcGpR=;V^DQ}fqTm|@D1Kv6!_SWx^UU69TLdK01nlzV$IftIc zH4Z+F$1;Jv>L_EVZWNgh5|)20y_N1)k9RAkcQBQ@vKC7cMtR}3@tTkOT(4c5Z>tv; zwUB3-+$`37z&J&-zeZ%F?G5VG))%djtloDA${6az;{*%a7)paA?g$<1hKaJRFvTWf zslwDc$|PXvm$$zau0AGwVuDabh-(ZvYA(Z)rB$d0uFK=!=|bts@X&+@enL8Ir<0w^ ztfYD~z?x0YJu=jr#x)(-L$pOX_OKKei3{l&Y-~5@NJ!y1#Tu2~c5*kqFx5%!4d1w| z(kngd&q^e!V}C7#({f(d8X*|HRy-XD!;&dU=yh<9F=3SJ_j7|SzUA0G&EGt7tG_yH zUd+Jra!Y=`z2z80MJ;-iHJJFmsZ_gAWt!Kzy7Ebi#XdbUPX{OPp|(^kQQhk7u3f7d zbP9VU^UsnbBF^}7dg34rxLN-q;jjTDSmgNaBeq1NEIgC`R^f0Okd()igH;?xE*+bYK)`KZ{XBlx7}ZUNBdr8)-iFn7jLseXc{T) zuB+a`d|83(d^QY2Z2n>6^os&&B+vD+#*mw87Dy!DALu&IjhhbDt&iO~9RN6xNM$LP zZbmGiLV_0_t*A}p*DDj4HG6CtogYi(P+Tn7UJx6Jm~{II>JytIWV+u>WHxj_Vvr)1 z!6$kZGx)5&?=S9%KaMwc6cjiUj4k{eGjU&jrTtxq96@xltXO@4G?j2k_!)5MrQ-qE zG_0AUSpa#`QQpinNJ=T|h)$w?F%y}W<=Wk^wvuhso1|F@&3I%#Rzz{d>5e+f z>{@k~Jd-0KiB`2z5jN+b{_9cLi6fmiT(`e#vO8I{Ck8jWbKiV*bZ?j|*iyKB2rK7E z)mm%`9@8>Rj*EvjWlp`2jkykE;MtiE9#Hi&7+np1fcuzEKvt`ILgo3=d1SPVD>>fY zTWd$RGEnCpc{Vvl$C;TUkYbL|>xc~#5xm~r45wqG=3aLPRun{{0gNjzU@8G$zr^BM`xl$YEti;fJ*X6wSVr<>w z7ty0rs!Fo+rHrig;=3G4i6F8VgV7;<4aUsp6yKe1!I4@IwY>?rwcnV+|9d_Hl!jua zkAS{8NHZ0jzH5f3Pi$$t_LoG;T1qli6}q(|D7)`a0F33eTQwe%vV@uT60=U-8Q#@= z*VwNH;y<2W{fvs-NH3GyF>nc&vZrtvm7uXX&DEadZ&QN;Aa-Ab{Wp3Yib==vNgMlz zt|L+){KL2NlSIq9d>+ztI`u_(+(XD zO5XJZ+=e7a!sW_BXT59uHU-BkW+mW`uiq7}Z)BJE1Sqb|OEbR52A4wWnrUMQNMo%q zG)WGZo-kj`eWN?N(cqN4QxIAHS@=Y5KbUkvTq?C~5)L#=5M>?0tOv_IU1AX=90Fc` z(;JjH!-7}k9)*VRo-n6W9#g9?GCZEuIW2Q70XGWkAA{pXaVrXO=pBJ=nPj4IG}<Ou)Y!+aRhhG5;kOl?PQ2O!LKe#Igh$gz zd6~)&x4NZ|%SM0 zZ`|`tCc<_Rv3m4LPZEKg8K_QHIJ~e?^WA%=(}(bq#vM_|+Rpq{wYu#rpkt6N#8{gT zRX$ot8fNkg?)MO4M4)Uhe3>PQy}@yJ2EkqQ<#`1g-+@@Y!f>LEMUSjnvVEZLVl$T` z1OZVTR(Fa#+_v(lj#$kiG9Ap-{*t)q@>Zr<4!N6S&&ao^lhuP<-5wtlCBrtgZ%lmp zMhJ99LFalRq zo+Z!gZsNHQ=f06?RZ|l;pQ%aP?Ba}>Yzi%S7V)37`P&=kY98B99iN<3dl)WPDIOgl zx_K&b$!2v0-kJy1@1pLxF&(WdnI&&~u>QDp_O$16eSNt$+kl%G)8hjWt=lBsSm#NN z>P;e~k0-^OZ%$1haNy{ma}>BLgL<>;D!3NOYkj@a)G8~?bcz{`0`(iX->sww)*aw| zYsy(@=iw(En#9-L>$Gi5efnYHsEjqG$${eqy@tc(epGp<)0A4|E&@M64`%8Uo?!e*srJ7WI#o@=RpPLMz>zD2_)@}G2F-Eaz z#$&uswvC4l)IT@2E2%Eblf>#hAv&nw#>RSnfrYeY9P6X0t;bR}k2*$V zS-Rgr%Jah)yizGk6yv$+J2Zkza~eBulGj|s66vv5=`V7=_cF}p`_d8h0B`PyM|zNY z^L%ZTH`*n2qwsy^C#6aT;9~dWwG`^oewXP(=k2&elryG2X+_?b#^Orv-p;|2)=*pC zGH@q$4TcV9W3@~5m z{D0x0ykZ~>kQGNX%Ufnfy_mQhY8uKf0Y*e7&;+K%pD2XhXWkZmx$`DzlxeSOBfoLe zt=n8cvB$B;TrPRzTe9B^A=H`d<9r~ubgk&I8h|$C-5HFeN89SxN3M6~RGQbx9#qyG z44))zjPJgbVPaf8YXZL1(#(HWg|$+q_XCJGa)m1caI#YBP99p1t{)!1(;iuZBS*K! zGEd*GMEMtXNhwK;o+d>}2snXnDn)=3sOH&6_7e#$b+s>3f8m+IrL1c5B7E&(~Rs`ihtg_=+IeZ!ji6gxKLO{Fu5GBi?wQ8Sa0%klXc{yw zf-{&F`RsM!BkEAN+1qZ|1^eYocGNZ@L4Ed7gc<1D3m{3^Aay4QtdhQ$%3SFz~LGR7i$lg4d5 zdrS~=B=x5`0rdzH#pW!OV9T*-KftP9(4A3ENpNrvEF_zl#Wa?+7ULU74TP|Ua&;EZ zg|ubC9jn702jGaW533Kqk7Z)0lqrs7M;kOsTf2FHRF(90P3v9$nU3cb;*DV=+HpMf z!s|C#dNPbqsJEw%R&Cjv{8_7-E)5q*(G;mg91VA)FiRY4hq#CoP#>(hWk{;t_y-)IC}DBe0Y>^g|L4s$pcGHFiH|!bdO~6?M;)q5hPwxl z%}3po(^|3=9KA&vB=t|#EvZ9S@Hx7dzi0QkJv7mBJ}ciAvu{PVFqg-S#@$;{PSI}* zx}od@R727JE@khVk4yie2wtWI(i6-rM2a;rtXu@cYdl%mI@USTHvEDt_d=_2WmbXa z5z&RcH-D|=7l5g{aW-D?-pk%4%CCv8Bk@j*2UHUi;wtr%0r;OL{fD|%n@LI9o~8mI zc{hsr>BfvHsun7}5IR?IxyRhM+RtdwM`2sE-+1}4SL z?fIwnFiZ{dIEQo3Me#rRaB=ffN5?A$uqe*gV2>`;`qO<&O8Zzf9-#UOm%jki8|&a> zd+(Q+jhU23Rb!V5j+f8EFC98hzm8s);M}XceUGbL$C=aq9DSf+v?ze1FHrg(yO+DC z`;c@_=mo40EvmM)Ej*u+i*U0lYfY-UR=?rFnLwmXKmK>&1U;vhG^;>@s*DYlR(bdH zOTo{6#j@j*T94|Ai521I+RT-%{^ac02IPsI_UF#q6C46ptAed^gl1}OVDMQyk=fH$ z*3h<>$Kgpkz>hK+1=?*10}Dxb-!*M#rl6EDe+#7(QHr1jNG_RzLJx8VoxS|iZbMnJ zq`i&uMe(h5Aq^af!$GdJ4paj&8?lWEpZW zFBM-neQ?eAAZ>C&B3e-g$eDh^6|w+}{ZohT@<_ge#qR2GFQoVl6u1Mc`7v(OXdceq zP6!Tjyz!xUdWC_|eHz_irqKROfohTe13%Sj^7!(pgYf6LFVzgbLVDmA)jTKFoo9U9 z_hqWHRtIZZD_VWVmYQc2~DWNmn|O7Vmf}_JcY!cXvMB>BhYp$=dTSN>EWk z#OfW)QGT%Ep<3{2R_EsfzdFgMLOBkT381>gsbGOnbEmvV0=|!t6=G}xtFSkJ^+n>~ zURRA8@llb|gsE-#GFkqP(!!L~?r^3JWv{?oP#ybZM(*aIG1-oS&3thznept^Pe>Ry zV&i~CgO^R<@L)bvkP z#gk;Z^9PF+=6ZTJi^%Wb&cv?fDSY( zfC~FuBDZ?4@6RFP%`}Sx$Thb9vKa@mfzxl`;@jiy0A(sQck50!k8-^Y#n*2Ew&VpA zPBPfD^-Puc+bzE3um{p6OnsE|)2GGA?HpyLcfOkcD6P_wpDJ&GJ*Ob+@% zxW#!@xbM8Mk^j`gi^L|){DT8uvA1b;J719qqA-ysJ7=`|k`b?<66NKI?8^$`WcnRS>>}6K; z%rTXy1%Fnk^GiD_Vi$nDRSvT{PP8g!B=QeC{Qh9j>q!aE5xsYuO`8xd(uBMu-Luu? z76g(%5-AAO5WF?H=(kki*DdDR>4dnOu})pb0#?h?&mEd)S#eugM1<@Vp%AF(1E;@S zMNf4WSL#VEky87Brue!y{MEI-@(*>q(KDNu`EE5S>L1nG(fPnXCz`s5%+8;epseL2 z7WQFK3R2w;(yqeXC~{lQqYOD+D&+~*D-oukRwO~&3mXbU9M?p))8Ub-jBQ`B`N4k=8OYMkpYqH}NG>4%m_xST$51<8DkxC+l)k$nE+g<2Ln!T_j(+8ZjIr=cvh`c0Wycf|$5?-RfaX1}Cc!I>xlRPl>`Ewwg?t#|C)bKI&3 z?x!Un%6FbLHAZ46Lt)N=rrfo+&{ZZl;v>&}4{2R9K7NqiAN)+5a`qzJG76Cb*XY9H zv?k!YF-vl(RB<1#!JC1oRh+A+V=rQQgL#_L;ALH8TT;>xP_7%G(Ou%H)^O1?pn7>W zfI-~hm486M%=;uIe_2@8lc=jRsv7$km)bgXfZIh{OrpNO$Cd?AY?Mqxm;L;nT>H-c z4L(4E%28~-z7qGylqGEWj*GC zFkj?IEb(#P@oVK*Iq z`PfRgZu#=pQdfw3^EmszQOve(ygfavBLTTncx5S3O zfb%m03x6)c)`o=EYtGp;6un1~oHOQVd^brkNseY=`mpIL=4t&U_1_ z)b*D>R@a2(>^{*tkWy|{4Ux60{eJFZTc@$-^(}3!D$KXqjd1K4V#BZ?4K9U70pkJt zOF_tO_E?mu_B&EU%1My)jg{V9qw4Fgy5@rKN){u&`Ml;18vl7HfL&b<1ADr&N%*g$ z#19Meh!^M4)?vR@L;|kd#7}0SscE9i!?+iQWnq3g4A>e)SfytOir|Ms*rYPl1Sy2= zl960nAI0x9US_!5AsK1(8H=b)u908<>%ywKf=`DQ#*dJph%s4l?-;#K<}E9aNb&H( z7U<)7%k`07TIyw*_gO54gsZR#m@w+;_GhuK=<>k&0W^a(|8@*fYqOwlz8R5U9vZP zy=Y!wR^VdztjlhP7G9goLA)9LM)-Ov!P~30Jw)1B?maZsm92H@Kd(r_o!!#&xPaq*7nv;gk}X%6qaEQoE3K zQf6FGg<7{X?I?J@Y)7%Fk{K#S&q4o%jeoX9hyNvsgvl;8z>*RjydVk)n#k;f|chu`NWRh)*F*=-mtn@-_*ukq!BY(A9tn!t~D(Cda+lYZ#2_G zU_Ew@T=2})t1i-I%=SsVux?qewR=j|R!`FinW1M;J!j8H`*WTrBzoK~h75&|c9roA z6H>B}9_^Ho+x;EaVZGw;$J=WmX}5~cJFj%4yZ~6r5c|u$Th|-ubxZUu!l!p|VhPb( zwVi=>wV5wx;$upKj_%k}22x+@6%UdvJK>r;uMQlBMdU)0^3_)SXK=m$N7{SGWBI=S zy&5Q*POrE;2OpXmaTNY1> z)7PTc&hE8ieCJQ*A+BZYln|rd8pQ#d9Wr)VYuG0wR+e+{*kPrF;^NR6-`8>b#KDVB zvT^$&pWu6qhH)cKWjZXn8~wualTV;>Wj3>H?GIck7yT%L(95k23Z^C{*`YBDcUj3D zDA1Of^km&AW)bcd+@EInF=#?>0NqAidjxpZbVjSe={M~7NA!CtsImDPZHu5F)O-hf zkz<3-$gKOkVAG>@0+hDUtw?`i)XwyRhuxkZ?~h~|V6f#+iHbD#Ji>0;!5NjSQFhrI zZN{8yo5&$r{^TMx{?T@#S-APVKKr(KJ@`y#|Di~OFY?)iyZiv=SDJA7edN{l2O(c;ZN$Q z{mzmc|LauLrpBB_S@6fGk)U(v4$?br?tF>p1ygbKdFQ#_^FAYXLu|MG41#bot^J5x zH}ixS9t?dgsj?r$cVN0nrq?U#DX;sLh4A9TM_hqvm1VRA&`>8xRJt^-P$e3?`z=Ay zA1Ex`-Zs*WnCs64qwH2vvx_2eGU4^Cnmd;^mRi5spQ_?|xB5!(g+&^e7A6u6b^to4#N4Bo*)9K~;oF?$B8Ao8?b}mjWud zC$p%WOn=8G%_0z`zj@o>P{Tq0o{pgZ?YnC3k7EqT3Zq(I^#JL(Q}*H#RSN#K{!V`L zn{ns$FRZ_D@VqlLiMB@=m3bEn@hnk~m-!VWU756ND^==Nn3~nujAB}5@F}tRd}1|g zt^s$fQKdZ(u*5dSJv)_{JQlLG<&%{s&IQzep=%~)3^fH35So+3Cbi$nnL1?$=p4q& z(~2+8%Y=sq7HB7_qvOue-(bP8a>^uhHm{tuAef5PmF_2IA#<8?3TF_Upa@kq57o1h zo}Z`_6|8Em{%85P!}1v{S`Pis@}a^Z!4qPxtvy24R5^8dJ<0bLYlzG9;U+8%8QDiV z_0P=1V|AF)VEt-8RhMyof10Vr3sfZu)+q({Xp!>eX8ImVuCk#w(_u?#F;w_0SYf`k zvUX3r^XP<;g|0K-^+gV;wgNeqhzauwi5g{&4reHE`HIt zX9$JpQq8WDqq>IS>)Bx6Y53a3ekVY4?5Xk&$wtMeO~-H?J?UzFIms%Gu1uCrM4vY% z-=?Kn*JyO3S+pM5mt!8~&ui~4@M_(s#4-o8;;Lw_HLO`Nf}iT zs7o&V`n|M)T-EW!nB3P`)HFZuPb!WN*NHvzKW8ma5a8+u&C~gfkMN9^&~t^E6jy24 zJR6Q5RGQ^~ovXMTzHVhDqlRWO@=5BEx8As# zwj%irLwC`)#x+ao=qYXyHHwqpx1ME8f_60t_Er+Y6s8m<{8mh zDzzW!H7rT?xz^z*Vtxu0mS^n&*CeW~$sMe+*G1>qzWa&dHux5tysH1wjqUAfiTr5e zP~N8G=?9a+i=(!$_$O!6?ZTXE!sGg6PGWn5%LIQL=0w~>xunm7I!Nqa^^-^_y)lG% zKvJO7pwj4>RK+Cql0>5E_ix8S?}oAlo|=g&)_?H0m>iSu@$*v5sfqGXYryC#OfHIdt}rpWxbAUDRYYnheV}t`^gYp!Md^BHnZLj~GLDg$m~JA4Zk)~mbkz6j zk~JG5v1m7nfNArjJFZV&*@kx3#mF@C{UC9RNO$@jc|FAA5Qcq`s{8?eJmLt56dn>7 zaR?Xj8Z+9*IYM+FWkgrch(|az$=%N)XO2xIfL^-m6=~-=TH?f-VpWu={i5X<$7|h5 zn(>&(UZU8iOHE?wtXRc}i7wZUn|e(o|3FXN%5OIKiYB{3nY1H#im5fO)k^4LVNoZZ zJs)B=zSS9GNFkgidwR zj>VE?q$}`PX>MVp1~XzGLg z(^tAus_DgvfR3AUBoUOj+JtAzILTG|{84@xU-KJjn`hjU{sJ*)gyJl~)%*`uZkef)DI ztgIZ1=kU&~()ONoy|{{b>b?GMRMW()+h=^#u{>HXmbKzZymOws6~n4avG|tQ7WyXv zzA+@Z_;mDWi|+TBc8_*pC)-{D(DZaNv$IN7j(xkB-nP`}+v>YVc$5@3gG8EY z8hE{82hZ;@;CmdmP z`2MV!U4&{A{qf?YZfPB%Ygs_WMGr-9ozu%~_sxmoUk;izo=zN}_YV);;HDZeyoH;_ za+Q^IkU^abPK%j>co)j<3k>ls*W!1b?wBdQQ(AoO=b5?Wg^F`=PcldpZZC{ynntZl z61ldY^}D-K=keJeWh65E+ijPSjy$#qk4IVRoLa6wt}Tx4k<0A1B=ouUF33ggRnm0~ zSpli@7t6Al5n$fyrVr4ZE>GGn_^FdlBFSLynpGm4z`Z}Yx2^}_)jN*L9qSM}nooKK1i)DlAm*3S{IxhvEGWmTT_^+8Yu)PSk zMh{o2;q*uy0=lT+@e3;YVj>Q z>OhN5kgZi3ZMWPrQw&2Fw>r1r{RNL$WwQNR7ezFw%;b5V2=|r?;rCm(Q-vC@K3L_? zhA9pGct$%YxkE9{j6YUg_paM4^lakN3x(Z#o!^3Q3av}k^H%0No=Mg~U9wL7s)f4J z*{Oe*ZGY8yRW#_y?8=gye6r!X*_BSwZAg~{Io?`HeQI`G(1FiaX;hT1V`uqh^RBWd z+l3~{ZrSFygl;PF7aHCUFHQ+t;5OB{R?-$UG6HW&l=Nr}?)B1LP0{`+>uS^4J2MT- zY6@Rtlw`>02bayznEn$t>BsnYHW%7<>s{=m$b5sXQ|s>!m84I5nWx5{&im~eRLqzW z-#`>*%|cc)O1^vN?|d4veZ>-jd(iMRC?=t#!#~Ps>%IDlY3&`QHv6Lc==Rnbra9Q! zwj|0m0Un8tq-4*#(d1tjRT6T*BspY-MQZQEbqYDislqyOhVx>NAmN&(pgYGy`M zW?2l45^HI=t*fBSPX0vd*O%Otyzq=Weo6--khvdO#P_xSTMSl=$MjIXcqksP1%#9gx zMc(`c)N??-7ORyn^|_=DpB``T{K1iGu*2JPT(&cyAwo7snVm65Xz15_NefDoOQ4o> zbsNf?5A;FvFMHSL0&vK9`v)?*aglc-s`ih_lv`JTd?XO0RQ{^m{NRuqISjHl^{|uZ zFCc1YW10?bx^GAAaUJ9v`}_N8F(z)a&1RGFM*|T#_A#Ipa7TarVbV{RJImZJ4T5;w zVMytU4~PzC9rAH9?eiSkqy7os|L4mfgLG4dnOW379rgF;`aNiwovpt+LmK+a3 zx+0un96rRy44|gm09+xbpGa@by!HT%CL1yM!R*}!^awRhLxeKpsh`lbzl6w&o4HEe z9`U;lvT(1}AJYYiyS z-lN1;?(Z(F`%ANx6yM=`dVa*TemIi|bs zMt21W?rbW&_Z3Y7R=-pUll9gj;7YuDgF!)z&;`U*gLpiQTji6qfPdkka>9dv@Sv#{ zwN6>Tv&q1}=!%AM4jMmyqWc-iv#GM{;m`lt5*GMRo$JtxBV$m)z^aItx-)-ZK#(0o zGB+QLP&__F>PO5wfbhmBdJ))sjw8Tr;Jo3-sef*3y4ilMK2Un~W#tf7+-|VAHu4&u z;a~dMu<4`}{TjSedUClqq%V8&>vW+^&T@iwre1KM#D1^-rI-v3@v1%R5 zAi^kY1O!k%Rz-zCxA|a4DXU2<+yM<*!%>L-F`TVH)CnEUPIFfixf z_h$|+zyHS95L8n@X4hI_`E>aqbN&Z;cD#rp@Mz)3R4k&Gs65ddAKn-MTpV$E1Dk)pw z>KTK@^gd9|xYf7i`CZjFNQ#rcMbDUARC*<@(+^4iqNpKT_a4^S7*Zm~Ny5ruDkQ!= z#CC|C#vz*$cqwhaLwje)VWT;m|_%ISp6;V*aUSmO_aJ z3|a$_=Z>%@ZGLpArn+kE-1oYb(3O1Ea=SaGni?2nrYqy6e{|>q34+HM*zRqjhL2?4 z8x1t(THKSaKwY{`WVf^wr6?#~2(Kl;za724$)M7DZ_p+q&8nvT&X?Sf*e}*u+1)1K zF_)^>s|1-9>d8gELVu|_Je(9cd^ae|Y;_5v^?{|a9^8Bkc4K6{S`=~H{L>wY_IZL6 zcMT6ZoPQ?UY?6p;@|0_H`r++xl@lgdhUzIeB+A-%Cm7L%ELs;+AL*YR07E;Fcd8@;7ZPxkGCyUl||{60x2k84lL2WvCFM1KTP)}_~oOuOQ>+27++HO zaty#s4#TAQq*c$Az^#6OJ$WgC0(Ra~bWa;6LUXtTiR@Y*kE{+z1-cF79~0B`8qqpe=@Uz*kS zt{Cj3=hI$$;!?@BSVHIu3W@0mQswG2IkhpcJ@t8&7l5)}AhHcg^s2V{#v}^cI_nIZ zUFXA;wg+&&1g&rW#gbiw-NX>Hv(+NAN8z>P%j5^dC>Op>&A^hhsie{AI(f~AVgwX+ zOA{7<>TIT(ThSNO$s>hDfgUUKcnH*_BRxoui6)ug3d^dJh{@ zbEPGKcQVVJ5=db~>f3qqjG819NE_Aov;$sD!z$7-6EEm~0Bg??NJ3)*4NBfsRi71h zIkf)&`S5OPU{Bgkr{fOo5ke|R$V1d_Mj4w#^zGa>L<1kpJ>t7dR+`;nL>d0IotR0a;vW_f%ac~HPK;H6^Ps@ zxDrrn#V&ypub%qi=#N70h(nbty9{>AJTIpx!S?4dxbebPYF}<=zo`dmHF9zsO-RgC zB$Z)+{2KN=*cGIq&MDsao1G48()<6%{ZVXylw|@6g3sjroX5XDICzQV0L@jOm#6Q& zv{>sH;|D|#o!&Yg@Wl#tEC=zY*71NnlzI=Y&?bu;GqME}!a#n^3JO6CL%@I30L)hy z?LdE86ES2@Q59-*M$ee5=55_IYdDGhb}VSBSU3=Y3?;x6wTY0+oe}d~%Qht?d|X&? z9&%oxSW|G4n^!iL0%aKBo0dKN!Z`$vk`@UvE9s@zvb6o>Pl&T4d)~<``hVQup`hlK z9J1$`U7$F;=fO^>O&au$GWHgpz8p`8Di?hc8W_QHg+S)mOkb9u{a=g$+P}rIAkqvCZCg&Awz#>4@7HBtwaKlW9;>tb|L*y(!0I}6@;wLZKjw@Wc`sbeI_h){ zhbpWVIWl>HSn0K%Vh|$6%Comh`%4wRKRL9#{@$r-g8-Z%l7bF9eB8Pv5A#GX z#E7X?V1C#ikC5D11@l(E&jE$;Ga>7+Ri{st?QOKkTpfFkCkw1mUdZ-kh#JVZJgKgR z5U`EGo10=k$+JT|{e(?;5OyoxIrS8~knmWzV@ix3%Az*{)@Q6EV6go-lRXN(Bo+i=LpBG(FcRPm@_eXh^VP(( zd8*`pA6+XlxT&Vv&SXzuv*zpt_1 zSA~ec*y8Y_Z7F^u=>EG1g-#$LNnrF1%>Vv-zpt9vA~zZCr3)OeUY|Db$DNjMTs!y= zT>bYy?cgtMLYk=#y;v}viu2S0E#Faf>>*dC!2?%0^qdX#4>`C)K9G`*1fK8v(vt4bJumu^^Xv1><=^O+ zLqqxJr)%$P!=QkRgyzr_d(OfGd#v8Z*&KS}p?fIlRN>W>B6FP%f64{06C35`i9?_C z@UIKmAhS@c=TLXZmeP@ciQ9|naKQA>yCTo5D?3d$*hhG4PIcvVm`1C&+(jCN*oY!K- z4-QE~A2B4`J_DhHSN{%H|BmehVBQ9owW>NsenKFg4b>)gnux_8i`5B%Bhe_8;1pp)*}!?uHK%`6i6=Bm6SHx6Ds zyhy`k4?$P{o^PSM$Xa7CwD{Be&OU>sFL}E62}o|LH3szv|Z6OLxd* ze0*TtpNfrOIrQxgkJT&^`I2os!{Y}{#w-DuRV|)++rLNfFZ)AAUAqCR%6g~QU;N<7 zrPh)at_t^+SRKea|7%iVgGPRpO9Mah(EPa}sEwySrxX8Rh8p{b)$BXpB04xKAt_{T zq&`1){nHozf8?zWf0;uQ8x;d{(`LAiITTP?sDhd3cZ=HnX^qDqQ{Qp>obJK-i(NuS zvB6XF@Zi;deI}tRFslJ-@0SkUBP$4gaQ2wu#J}!7I72=}ituKBueFE|9+rJ(kqq5z z`s??ZfB3+mG~kq8DGuI0_RX1BMR0%Av`F-2yg?rymY|H%dBU7(?@;3Y&xG zb@-O>+A@gTtc|Wcjr(2g`tLN<`XO1y`m1k_9lZMQpBzKx-RQ0f=b_2FkHlS~s{u|6 z$dN8IyYm0`PO`i{fJ0ANd+08O;8iok!VagW>DZCY9S1{OS>SFLQlP_}oa8D?dsZuUwpMBrvKOht zAK-{+4lQ64=QDgeu3k?9GJo;+kc#$w=lD!MdNaW$J+3}f$61Ka!d>>phiVtFc;@S|$UiFV*jO+s+y{-uiB`@8F8NO9sM?mB|9jQQ1XaOaKV z)@;VLX}79nIAR4LGD5#AEy?>k){nh_50;oS!BI{-YVL{&V~P0*=v1d8-u z=k3_&#c@Eb-5aSr)YAi+aOrbtweuw9bH8)YPuk`qGY_LBLDIeHcaDQlnYkF`<8)8W zI3Un>^JweAVjFXSZfo^>eZyrU< zLt5|TqD#%Tu|5X`cDqtuEF1cSwI=CbL+hwUD zCo%Rn=n$!KJP9I0C0)pqNW)9hBb(8CZc=WyIcr4yf zsj07A`8agWL$KQesW*7r7WVuBQ{b zD7$%hwEB8KWUtS^9{38m<9brj;ZGMnJoVn07z<*1a?9PTSnJ!HV_Jx`Vhj6N(0Z27 z*6Sw`)SRm8&Ux-%^S8~hMvD!BY?Ch?Jja7MBZVB8@fCj!*>{V6M2e*#&v%PHz-u4z z4Y7751A_r$jga!AI{}(0)Zf8b5rT|^&dH?3LS%LDL78<|?21ptmlxIM?_H*3KdZLN zOYeg>@;gRrw~xpC4=L^s#hBM7CojV z8?^7*rwco;SiIc{7@TC}i<`TTao(!AK8Lo9{tfKNM+=sjDHab9RwggV7>{uTTX& zG&Dl9bo>!>YFn)AO`Pa_0wxbfSv~~Fg^$O(tie@C@gUh@uS<^@{1l*|WWNCz zfyB8-ZR#B2*9>gZ@`1A7pA2&Kn%7mK`O#3xpjF-rD4G+VJ%wI%2~9_~fcANie~Hcq zjhR(Y5?cRC8~ZRr0P({287~qIe+GSlUV%Z)@33+yNWu6MP|xgW3OtEj}&Qgs4y+BDJzB6pz?gs*a<|02O2T**}^A9o1?;~ zGh}vcZU;^-BK1&xr>2us@kmgF+F5Ea2Q61JNJL+c+g$=0?sSXQG~nx0scj&~??4*h zY+g_ky->>f&5vQ?+H*S?@sRhS~TUtu{rvYU{nWvoWa?WKye_WEIqm>ny>&kbz3d z_QRBtlpUt`Sz5<1fNluwK zFJ8+C+E6dR^Q1jciD%cyWzu&RR>&XS{pr#mwLTp6lK{`s8^we>Y!wNhi1#m$WMZQ?oZ4t91qhDy6R7ABUJZp~SQ=V zL9#2v+Rh>W!atB{j^-U`I5bF(EI;wOxCk52!~D?2xd%$+AfWYvo&0s+%e)cLSL!jZ zmLy+c9=u)AxhWv4pep^l%3``RPP;bKExmqX)DVs3ezPO6-F~f_(jMyljvyHsebJz# zye9LSf=F7ltCB|h`i-yTXS%c`PI=Lm-{Q{| zEMFTJJ>v90cu;2iD&BL#H{^t+?_6%VuUaXealQiJAL7%m(#~AMA5@H@5KU3Vd!VT_ z`YUnKgY&KC$ES@hH*_l)>1B{uAh|+_^Iy^3!9Yq#3(lXXwjXnGE+ZI$Nhch0LaH5& zTj$0eK#-Z7Zi`z4$EMW{`o)uUjAA4Ed+UJ!QD-6YNY{+VaHtm% z`l6!Ny9>joNgdGg5}_?e@FayAqwuU+d~rt%g(@#Gqg^3td-kit8!aLM<<4wXbR~W` zXQMir`ZpBnR?wZLk3Qi}jEd->suvMpYx#08}Dq6s2Q*2>eE`E7JP`W9|;*wYaQo9CbFt!=}Z$ zsF#*`!ui!utlSRne;pe32_MHF3O%SM>8o;#DCMy>HhPaGxhN^EvA4t&WQ;mOKb?P> zt9u6%66$D4YkT%2e^%s5E5l_`KcW5Z!-x`6e!IUoU3q>@KH-&vK$GjR`l=N=WZbJB zmw0^=LByfboiwAu37*PAuz%+^lix)@c^PGQG!O#dZocH(bU!M10bRlUhPvrnAIakF zAT)WoaSdHX+<=u+)NE~#WJFiW-oEm4{x>MajPFY7@aN5LQ zMR2-YHBfaVDM|nJDeb4hI=T7c4Y6891p&o_qb|8m&JRNtH3&(KPIJ{NpvmeV{a z=3GfRQ&|i7)Y1_1K89If@UPMAw62k|z@kh{iGM#QO1Cbt`pIGg)`Tv2u~Ast{;51p z0o!7TeeD)h-)q*I@F}*H4}lr~ZT)b#7c%)+CO$D8`l>~>qFSu(Lix+kyR#GVGoA=O zKD$Qj5Mq6pesW|U$k1N>M2sss29j9ud-TiovS*!I|ljyQ;8Q0|*S`GnD zy(S9IhMou1cxz3;UwftJXjfT3aP?+&heoBXv3E;vK8~v6W(Xa}yP;ktHlW{hv~%WV z$`ne{3Fn>Q-0nBx+MrfF-QJX;rua8zyeYYN|E_yO;)DpZ#r+j;58awkLRf0*8 zfPY%O+39)&=3dpv%Qu%WGZ$0O&54bDrLCe%6MFV8>+2^@g|RDoNo6_uHC`#YuBu{M zCD&|vMY=;!3SIKiHC*|boL#h1@2*U*?9xcBuM)>}v`JAmIq*-fI6Gahz)Y+qmYp|= zzDlj~Ho*(O;1oM{E(Ch$oklTdhEZIA{ytGU(LmwRsRMGl)E2$ zw7*``yh9+S>gRTbcj?GFcMP|KNE}FSl4m|t)U#-sm(1TX4Y`F`a%WW2ts?Unt7&bN1iAFe z$FXPD*kA9?45S~YmAZMQWq`{c6{Pf>15MO2$s08Q3X2e5PB~h2t;jj&+E7XpC`?jF zQKja0HOR^+rO}zAh+WC6ENK$kL-LOt)jmNlwPZ;>Tcqns^hvd~2kd9@FFntkin-VP zt`>pY{*@wi$^N!M@^ds&?x~Jl?%KOo^nO8a*>eSDadSWRIMI4ayyLHICN8$hZ@!w2 zDQS8#QpBUASs(9VzRGabUlKYJuw!#Y0zYM!zE}pC6p1~lY)V@Vx~DNV!u*xljWeL1rZms?LVjFV1_e5)fuB00ZIC1RGt=dMGU(kiH^WyG8h zq`f8{Tsjs&{~**axDhqruN>GNOCldsXX^RrElJCT*-7*q()dU9*=aMxE&O)PH5&{` zZ133-4hzaNixfM{I4(A6;P=TANscNDc#F5u$LwcT+I+JyW9H?2J3-09UnfaqsMc&T z8$s}7z@6|BU!zbW$+Fh>2LPie!CSauf>T0;T@@xv>yIw{$|~1B&R?l*nWy2@mW+WG z^Q8v8P0%%+#N3;oEL>M>#oeyxPj*Y0JeOfeo7dOy%gq}_=sJE`+OyYGvO!(t=lTrO z;3-eJ??FMS_Gx7nkn+k+wjbz}QyJ$yCOF)GebSd8>OuW6*6a}4Ik}|5r@0}dhQd@X zDx#w;YhKyZ*hZ^YgTLOOJ=#4GXp$RcpS0Xd1_1#ny))LY=36MvJ0mCM5^TFK!Sn8R zR6ht|EAuK`cvjU$J~p}dxMIDeFn9Svf7=pkREObbXTj|^k%po*M%bZ0)d7S zqopc}6B-*PKFS7^MxewmgcH694GAuTb6myKwzsHRb(AwN1nDU*7QUKA2?=Mlk>C}2 z{VPgCv|QWd7~7lK?{IDdhVj}t6m+w`e!<5ZJ#b?3m~Y5Zaa2R{-F9w0ljh+sv`)K$7;)=8nptl+fWE;Zx>x;0=To-Nb`}^IWdAh3nR%>Pg!WMsWGsrt#lpj< zA%i#{OOj-E*O05~BNE5;IicK1EnQEEjsrW;YP>5EFQ)Qz=+xOK`qAe53MjO+!6ROd7Z!Int->S0MXU&g--Yx-~B)-5wB#p~zXMK>yXT zPE;c$af&sI;p%^;YMA=jK*5CkC#rF`8grn(JO2C+l< z_X!)V&dVh*Xa*~4pECzSr#0~EKIA!Iz4Jf>WwC1r!PQMD7ZvhbinHA)QB@QNL~RXN`(Xvc?A4YE9r z!Ep^X5vT{Kb2lZ&V&mBeIqK(r2s~;S^0=Fh6V|Kx)Z^@TC1^P}GnDVeVok+86%lBwq3dxgIGg>pbU@LDY(#s=UFHsjYwW~@(N_BDL8-0 zuWC`G5M;Wk8Y%I7UYnYK}hNLWm9wio^sS@y?;b%o)$}Da#2xYcmeXlk~d{iWpV$r&i zu>id%Y;ag7%_801nU-1XCsT^hKVAw@c)fKqiA&q-4NQANjaDw*T?hdrxx~r2N8hy6%E9Ki!}t z`|bzS(t4rKyKe=v|5T_05-*ChhG%i^)FE;;OMB}zGIn{@TXQ~WfjNb9zxxCaJfr+Gvq(#eNwqaiV zP2;QI#UDSd2cf_b$`6o#m8bsVH{+8vCAMxw{mYNb>$qb)pj8b&PA3-TzPiNM6y4b; zb1%7e`M;~dZH@kg$&9&F12mrQnMmN)O`FwHXtuWWqr|xH9DTR*Pb~~?G-FJ&4 z=x$3=U8;@bf1G)F5Zzy^FURMOdin7jX1pzlXV6u*&F%*CQ^y1zR*6hI$LHBrY#W|D_r2$Dfd8!v|V*8&05zHCrM6I zPU3par~THJ>@!=Z8OEoTeJyDN;oH9^~N|i zYJ{ka#({bOqkkiKa^R>otJ5P91qwxd07&B|$&Opv9RJ+Lrp-xq!e}`A{5`J~PS=KP zJVw){LY?)>hXkP^0u@}Y%9RXLe{%u2wDns)MWMUK2DNCKsH15yWjo4KL^IH_MW!Pb zF3`lL^eeoJJJ;ic0}hf39nl6IB58b(0BcG<(K<~AR2w{ElYi`c#O%FImRHu z(T{A};D;ny8189IDIU+eQoJs9F#&by+a`||B^4iV2k(Gw##BCPObf%YJK7-G3)+N{ zB^}ihQi1@#6?9B%e-JVnEY0}Sa&NT*msy*k)@<4_ZSet%YfnmdY^NgvE8dU19j8bGejxNu+knH`oT#jNo#Z@x=|ogWG^6W=K&s%aLio?|$OnDv(~!ubPbtfp#m>=YBerRp#yPFsRd0j>G;($C95l$=$smyF`8 zD8BV^9Cv$tZ!N5hLG5ITmp#|W4Y%lr^aq@}Qx_5Q_F8hx{65Zet zBxQ~cxlYbnF{*G1ywjbEKz#-Hbf0vRbYYW~Pxo>uv`ct8VQa`b#q%H1j<7%HD>~iE zMrOwoxG)(J=q+Xfge(d;q$!h;$e_WkDwQzdb4BIQNl#0|<`<{rhgb)m!{bB@u1nyVD*xY=JURW=%`k{{_ZxnXbv3z8O0Qb z7gPEv)BZf8$s3KF28CC(PGi(x6yv$sak_oT95t1>=U{j=&`a6N|4oO z(VXTTm*`3rBtjE`Xl+oHM$`ik;EY1Q9K5%O^w5|u+;8B>*ss;v(}4;`~=RyyAa`n?<{voo2y?nRmPMa;v;#7-RKiuTco2 zO9(H-k1G_%Elxn{|HWAq?#ECH);1~3JuA|5qCOGY&7`N|tKSt1cRI6l7Tfe(_TDZ^ z-p!fv63DZTm%c!Jb%sn|LeNmq4^=f^3Y#x;jKho0_f|kl-Q}*|C(to9@*I0@qyr9v zgqrgf$eDiE;E!i|d^poLJp4SN-mZ$OM;4s^>pC82_4ECthIIzQv~2ULOpld|u_AMUhgM zxk}@qAocDma;){vlvu~=C^Wyo(f+^|=K7{7$E_*rRI*SP7VWs2vhzmD3~9G+ruv~E z*F;^eofZBP{ z-0SRLP7b9-Wy5;W)4!4N`f<}0;nSI~p1jVbS7CU>$+*!?fJu4|+-Wq$NYZS7W-u`(pAy_K=nYHhOu$Y4RFm^V= zbB}{X>xIgnuE%ymM{3b+R&WrfF-q-^9;0loHrM^Sq`*<7wgS+F9PAU9XAiEr=^*_n zhL2!`3a1wEC|y<0w(oa6^(s!j76>J}>UQ<7KQ!W)lRShQI3hHDucH{76V~sdfL;ND zmzW7KMB9+*$HG+*`S1l(5r%N3*aKAI%ka;oCpx7jQ!Fj+(D--Ns(r*&015!mGWni0 znQ#21EqdpcHFB)XMpN|lky4ztV_BKJ$IQ|RIpd*qC}6#1)Wh;!ahu?ddH91C?RVmt zTwKMM8-9@*T_<`mcLznk-q&rah*}rI81VeCgqfTC0UZok-6@_0H#EN9;)LcBi<3_( zfsX_!4?24_kc!T`LpR@#uGC$q%jQ$2viRi$@+zKt#Xb2_1M#&rd(j#_`$(EE%Y!f( zDf?g`_{k*(CWto@uDf+B!^e4Z!n+Z)hvE1l@JkT7_aVF45myApzrB>uJo?mYmF>h@ zQ5SHR8D0J9y^Qn4-bNN9|9<4-Ez#qyTY3Y2G6&rc;xp{eYh4E}Jr zYzab^QiZ>$BUJOcE#o3l5iRT!(CXF2%2lWP@om3};W^pXE9=ddj=P%q^(R8#ZP{X0 zMv~gpHnh?Wxgb4TB-cNuN&9HXqGNI>uGVo0b~H-e1E|2&q|32E_LN%Alx)aqog%TY zhAA_J#;x1s7s^B^^Dy4 zSx2`mG~VJ0S-E{ttB<2I3)yCSN0k%f;^kG>0gF@PdC+BD zo;SZvj_HNcLuh(9r+Xw4`fQO)u?p2&P%L;rQ+dut!H)6Q-`SkiljZMIeKQG%yga5t$q{=1Nooih>!jGz!OK*NED5*jsGus0fj{t7B?@| zU_~-f7PmM;C)YQ{GH^@{D8suHL{+PIbDUCT41sMW@bYWT2h6xKD^SQgBh66S&h3?i z7a-jkAm(&BR#5!c7mI8QCszK(w$H^({`BT=`>v`Fbs4Gvsa$nLN&Ma#kLLIu(oQ>` zY7+e(@&lAeNDjB2W%+npZ+d*vF(_)ePnzE8dLcRIuLdN<8&_}$irVON6|+p=G)q__ zf#x~A5xdRMktg+#@;x)&c+c4bxXlSCxwTZTwUk+>#Bw(h^~~vy1l>p_ml{qrj#Xad z*}Ot`d}1!e-2RivEg1yyf$Ms^5CUWVc@T$S(aO1+!MzB;AW(|;2={`6_!GLjuH{~d z&Yy{N$WLa5aPf8MTurWOl|OlX_{*(VVRF=qsq#QM;9UmPwjDh-@ekH~$UI(1Fjl3e zZsnZly>M$0fz@qH33^|bT=9OFda~&li3g#9a zV*r~GT02(W8I*Lp9->Ja040Qw$0(?oZ;reoOYLle=CaDyKVMxERLIkvMfcPo_zeX9 zGE41wZaIdgYSxeIm+DH_rr4TVvL=0fE87CAz{%)e@#C(rg5{_q{btVc_>YYu-LEu2 z)yDH+3~T6w^e}dl3kS0UY8g0ex|Q zjfo_0YB+~(e@A-mVu4poZuQc$;v<{v>vWr}8YM4#|8l0TYD`m)pUb4(z1sFBe)NbX zHZ@91%`S04@9Ool(TNM){#ix+~ogts^bB|i5m ze~NM1Yo>RwE#E=Pvs(fm>>df}Oh#|b`*^t&D@=a$LtuAuS6=!53x;+O59?zBPPj+? zc|%BcLZgM88^DY-qcVFnZ8ZG6X5^XFqTXoWhz`7ZDt$UdGO( zsEbX01CIK1fFX_aifYl=V9jl%+OXQ0daybZQLpHrGBtKv(k+w7$u*C>YW@FX@4e%x z{@*{~lIpbWCW$g5GK$QiVP}s}8ahT&$dQo}IVH*pnOT`BBfCVTL`I2F*(6yB(S2Qh z<(&F_`rMDl{m1>+_dlJ}dB0!tn$PQbX_r^}sF`_0Zx?K5?fZJzL#lLbA?-rirK;9m zBZx%`)i7sx_)Ib|_{)MNBto4v+ZE3B*3)nooSJ-;%`R)HNonPvRHl%hZi8C3KjRu?^KX~=XPba_}gRtc0{10wWd2lYv#jcTXVj3Bx3XFJsx5# z;?ht@PorV;YGmJ*bW>%mfIfo-*kJoN_iofCnGbuehgmraUi>` zuhZtj5Lbu$s&O8(l!vj##WIXXxJ!g-Z`O-_R0dA#utR`OJkyX9_n+umEI=Ua=iCr0 zu;2?j`(v%eCGHPB_Fqw!zx=SE{6g-L+U3669c`mr4Wj35dPL?=Ydj+`^mI$= zO|L5trBwCUWSv5|{EKaugna4nSLceRXDlT6eA{F9xYX1iOs+~_;b*&mE2SguB*2`O zT`~MpqcMJ>p2<{Zugn+rC$YOcqZUTgmn(?$4MF|tGFxKUs23fF;JKSKt)uZfe8>rD zLw;V5>-oo5S<^%>`Y8N)Q&SHRzjnx1T$;D=PE{L(`T!U8ZO;X4 zUL>s8rc6-$B7Xn1q2-oU##=VO`kD* zpgH(X_H=wYn?QejTi=+?g;#td8g(D?!`n7Mnpiz=aUy4v(0H;qg4RRcjoI}62lOur znSB=V+;L7MGS~z>5ZZLpl3`fo%0+`KOBAER;W9JVmH-I+64!g13-Wiizo$jm{zcuC zvfpbvemAo|Al%*Ap)jxZKtZeDZNhH0Am_)NYB`u@TqW|XgZ za^C_Y(0PkWG!Jv;9@BWU_I4@#=eu-p4QfKu+BeZOTdNDLd$xHC%S z5KBH(wj}KS;Q3$Kg7*Y{^&^z(%GM*Ah~*x+;g7{0}z=&7K4ug`_z`SCgH zM2ZWs{`HN5&wnBQ%@y->X&kf z!>5e-t^zHaH-CX_%;Fizw?Ll6#$tFfTIhIXfZAiJ-|JZBiYwd?;L^pWIxV9vr*s#_ zyQVS}_K?;|{XM_wgc9@t5?OT35x8e=(th5vn?z?q2^v;J}M z0twW^eTvn!?a4APd}#Byg!I8%uPIr!Z3CJ>U$S!wQ>8wA<)KGJ`jf6O85!{V1MVm#%o~g1q@lJfi%{b%CjK@8O-h+32Y zyj*#%#a{2>*lVK&m+0eIZA&-rPjtl@xl*+YBc^lxK` z;--a|JL9#z9PUGV;7xA<|MvtuyQXcIAU$O9tzw@H!)LI*``$rrgH=sxsMMmkXb8*{ zPxLn2Ee)<)q86$HW0Rv9&s1p{bIDX0~FG1VJWIXSUm?u$k zmMTaJ3OV-7W{LGCX+jU2?FcX=S~%spmY~T z-oO_%VfUzK%q52BB5zXQyTWET0IQA{cidDify9>n5l3M5WQC)3-y(7aEiV?ZJcK6X zC4;Wx`899e=!HiDuMx70v0zqy^Q~vxhzU3i;fSu5d(c$V6SnsO@T~aCOrB(5?3@OV zpBwGe15zW;O=q?vrPzdaBami4fnfXk>mYkhgOK7DrsoL5kQ_Rqv*Gil=Yc%K3;y@6 zchK7D1H$IXmXI@Ef>EL;Kscdarq}imh+m$dHP7bueTZpCH~l=o=AAim$46Yr#HTNY zjdo`T|N5=7lu8JVJ_JNNywlDr7u|CO-o3C@mjT?jc>^#2%zs5cQRTUl*c%tDmVf0Q zohtF)Mb;g>tUbfxV!s`bS=ErSW&h!e^lQj|-B4{pIR7bQpW;Aklq3HnfCeL&4OsFf3C7YAe<*;3jeAaRIt zpzj^G%#io#!NT!)$D~VTPZ5ngOB#gu`rZdS1I6iCHytuG^WI{p2DEl=%S-`oO+yo< z<~gq$R*L{UJ4Vc(b`(#j&hqHFcF`cO~_$uypDJ5U8En(iJU*J|lh1k1klr zT8^828%sF*`q#K3=fkH;?XLrZd?av(_g1O%Cw)O%g7%=_}_fqHhHpLvwj z8CGSNO)noa4R2mP^RGpR?Wm1y4Fpd72J>KyfKQj0ma&|^Prv4xUpGMKRcO{py?TFx zYrTmLFooR9JP!tU!tn>gxlp+vN{S^tH)_2ZbS+fU-eMLVuI^=UB4o>VBqq9YScrBT z`fc`XtE9Oj9L=(PdCZ}?)&A#7wxoVYbs4{rsRY?fhBXR8A5R+om3mM&0_>Sk+cI0GIVsb&Lj4nL6e z36gfWAp6vTHU6vaOX--H^n+Kk5?Hd1$S}7;&mRxaOb-}dz4u=1EA{ru6p#Q`;-Vx|Syu@+v@z*xDAE&|7jI*9`>C=i_ zij`|w)lY$6CQKh7NKo6yz?jjtxkLWK1F+mX-_K8%+4{WfrqNra>OC8toTX>Gc7Kz8 zjNosCm2-mDJp-ldr^c}Rze!i*0rb!PDlp}-85UuAwjbgpz5(x#)Zx=XX`$lQh7TdX z{RBAR4v`*wD1qJPLiMP#!7-l%sGg*03=WV!e3++vDDb)C^!vrK1mrnk&i;JE>#PTF zs$i+S-4j#dm6J125v1+)CGpa^O;$kgy1aO@A-(o%0IyaF6wxsS9U6wFe{DycnC*Xj z^P(jTM0>I*^@y<>bFyEtlUI!O6f9gDr?Lhktu~qF=Ddp+=ytDQpU=CR zeLhXJ$0OfrXSZ(0!4v2FTdZ=QTc%yTeYWdGh)B2CxQyGkg7lEGVf!KVln9ZNHBle8 zr`{`B+6#jH`J1XsQdN52dD+O_cOqj@@DhOsM?i2PNoff;ErE_*?!vtJG(Z1v@1v*d zxEqlx#PI8r`7}P8*(>VyKNv7tzdNc>KBAGq5{itJGpcm01R4rTlf*MDsvuAhitL)B z5SNH;T$vPCD^+n8M0h;VEfrd=OP<_tref2C6KaEPMc>S12HT3=RxS!$Q7lPh>v((k z(u!JOUebNL8Or{M#GabyVns&dEuNP==D!S=A zLf|f5J)wF%u-R8ppL;`$=&Ir6YlPTaAmywY;d2#vth{cM*I$&n?7=xV!=HadIW43m zC7nBU?b_Vr<)oJphU-T@O=f#Con-6q7Dy!zq%HN6=(@$}Wx!Fx!2bmAP+2NhIryDB z2B1u(7mmH9=El{9PGd^+79m1Mc9YUce%%nGRR`e0sa6xdbd#y-}VPb zuU&Y7UA;m5#(ajkuM(B#%SYth*4@}pK?B>JQP==MwwhBnQL7GQ)~TuPmcqE7A@H`2 zeATD-lfWt|4;M0Q6XRG$Q#F?A#T;;g13%oi3-zACIRFX9#|0TC6g}Dv#XEG{K|!d7UW?AUN?5Mwcfc<}Y}433&QsHBI8W0OqYEkDSR9n| zOJFgty0s*8Q;h*kzX_YTb%vRh-PSkY(v9I&N^uZ3b3cI>h^ccjt18lAb+AmtULEj`2E=Mmgp7N!)Z`OV7&Fl~wjLi>7 zyHdNxGV;_@UTUTIX_1PPFG^wEvmszgMv_lG{NQPa#B=FBsZY|tu+4-z)$Y7+Ge}yt z*q6K)f+*%#@G){+Zy^a|;G>wya*X@Oh%d;kA`pg0=jG{94k^1IE$KUfP#+>^zL11O zqIPh`f+R7V*92wUb#SYK`%U494x8A*70!u;7RgM(ox**KSFs&3S{zE}4ZvS~aXbE@JWWp1L#tu+w{DYX$B0_WZZRuD2moRe00ya;?1xivB zbz~x-Xbj9{2MbNTLw0(8+}SV5gU%r9$a*=Bx54JB1KeR`&JzB0cDjDtla{<1Ok)^U zTFFwDyPHa0|KEA2aiO^=)nY!NN;$)X@9J`X-EJ%|3H6t8y=geJD0QJ*grBB;9*$>pP@N4`QA&gSBzilMBqqU zCqP-oqFVg1y1VK**x0vA;rG5J| z#F_(?QXEDBch_|yqf+zxXG4Cd^*iMR?I&vCHs3Y@IUov^X9;M+mFb!bq>Aditp<{` z2pK@mRVF=qdGvBz(2O{jW#e8&j}Mr`lzJ(A^l2=*Hoi811FLRs${KUAw(Dn^yD2}H z=pyXmGM*$Veb;jagr*?(R~niu0lMT~thVk2xqE<~<%&SmiBMv^gPXR;MXWX(&IOS! zyJEd~N-ECEcaO>GteOw96;(R;kQ*!8}*8u8J0yhUz(NKZ7G zUFdhQ+0vPj6^P z(x0cePLRDqWWdvDPGPXiMNPw*8Q3vGJD-M?ZYP|rk=NQ~cQRBPpfKy;AxVZ?F>-pe zB(uwr*eyQ&4C8_;I<98xvk(re2o0GQ=U3i`v~U8auhjkfe39y^ehCwMzzpAGa+y~* z*CJWLky|%2>CjqBaG6!%u-G|)c|MYTx=cw?cm{;22&;YlL2LV7wmho|IeO+&? zvpoK(F@t0uO;}O|EC;qM~tXUBYaDela?GhtM6P!O!eUIyK826j3c zfrTWqEdNl*Q3Q@*1;jFV-xe1KB;WbF1x}lF~DF+S2EBOzMeQwz$4Z#=iyif3j z<#1Opu5tmlM?z{8+>!*7LZ{BdH8+(74Zg1CHotAV*CdtuC6o!*6mT58ouh+wobSY& zHUPUb5h2IPx#y|Y6;D4zO)pAWzkjGm5teenO9;buYg4Z;q1%a)5YbUgkG(J*nTl5B zmnW;#f!bGS1I++S&nNb3kOd*om;GkB?N4QtDG?7L^3>(8OT~4O1@>(bn8S`j*-yyD zUOZ44eq0h<>0#1$$gU2?VryWDFBoBqMb$*oiMTJ%&rMI)1lI1bg$(4W)xbk=ZBSBf z_+#jg0zkXOZ|;zxx&p?V;0iD&O~Msm`UVR$LgviqyR!SRA+6-DinGvgI}R$+1y&J3 zqpHzM^`GqB?`Qt8)SHObb96ZJYywkX?;oMua|p59T*0^vOgHIT z2!({TjR8(0*ytq)&aL54zn?n;u}u}Ec$XPpMKw8`|9`45czYCiAwTdgVT^94JIeR=Wlr zz0OID1@$7NSvg&2ALWS59&Nj5xR$Fw_JvX%bY1Wk4C8Ds;YUdaqWCXL4Y{D_FA3VJ z4h~Jt$L^=ur|G-i!mEeL(jcv$9~+Qd*O3b~!L_jb{!>%1*?|~SaV`SiAfBFcZ^uYa zzD-+^f1%dGKNlkl4zF>4@;Rz2XbAFy_*PK>|EqS09N1qUMUE;)Bt$szfhpzEJ2N$? zjuh*mLPtuD(O~ad5GIa>V6BF}>p$sd4qjC+cmmH|6pN8|Mdk;POx)C4M!x#$&c1}8 zl0CW6Zoi*~dG3OYaJ#n~vQmjMAfRVgU%&Gdo)Eb)g0`m-@W$K_MbpIgH1<%+gQBT3 z`8PQC#k)>Vst$#m6e8Bfj)KgJU(Dvn-U2pWZ?qSilBx5MqN@W0Kh(f5I}27?Ze*C_h1k!nqFz){MuHF*Jg-BhzXvCL+5686l8^F4@wm|eawIq)q^ardX?{8|>9^ z$wH9L|6SXgqOVz_K)RCgX-=e=23_UH>_$n&Wsx_a-03HSSSyhchLPDm@oM%frE_OFuB>o7xnP)xuCiC&vdP z5oUVd#VTCv@S_W80>%TYi_i*I$;^T`ub*L6p{T>B#!QG?$LotF@USi!o{bR~aaKYr zj*zbanu*D0lD~tFv6nMw?}!b1L&5BOK9w4-aJn0O>&hHBh1GUYA)E7BTbgQ-@n8ro z1Y3`HUal(TuFD03hhn!RSq)vns0Rzp7KUM=ac(o@L3XX!C{s|ScWs>*ABKD?tdWO> z$>^+3kp2*tZV`BZ2DKpNf=&R*RAsY&_`Zi+x}Uwjs9PD>!_b1Po7Q)bKrfAuci9vS z?Ikx{L=xppkOe{0WzVp0iyb_#bCwr<05adIpL6VlA!@^9WT}`74N7W(&#FOF#GdL% zqX2%S4I@@rc$16jbGtmakO}^Mez-4rO7EeGjmbJ`C%ex@si&1wN*;h^5Dx@G0y)!A zt)l07ft(Qz0#NI1sl*?9QlkcY;&73uMztpixF<{R%qpg+U9{NcJriUZO8f1_p8?nT;z%$o zK9|>Nj!_2wAz1#kyt?_`49%9tK)W(gFdV6W#Qds2c7=RMVjJA=5f(l4Fa71zN6*3m zj0ZrWj4T^}_d7s25&npl)$#)9T%m9yBeE7a&;-SKlM@em7Q_?+z!XI%C`!9tX|MH`+?`& z{FTq2&T-9rnD@#kk_SaTxD(MjJh7Vgr5b|4|PNkbO|t86le9w*GiZUb%n zmNK$b)$@8}ZgRBOAIWVtSm=WjZ)6d3 zT~2lBwY4H#K5WvGfXX)Ng;3P94_W#?C*D7D=XD();05DPjXYyAV{twWi1oL~ZgeSY zdjXd~rY!Jm(@5I&Y@eD}U@G{PukFr=Yec4=1-n@X>dsQ#=GpCk4kHrCPuw!M$Z}DZ zsN-Ji4btXmAFho(z?;1`4}^)PCBL`!N_Jf?2}nuT0{L4@r3JMboZBZ+P~^l#A8%3} zxKn7kvz*wrsYZ+jj7Agkk0vcV%htKe?4E=n znXEfb9a<-H zLIs0hbsSf>*6N4UG=C_B)0(Z?zITBHiGc84s?>EbOm@J%OeQhD z`C|)V++sWsR=nhYqJr{OpB$XNm0Yj5MI#=85q)dXigooJPpSb=0F*`3i3f~3%b>?X zAV!AnTY%uLejJ(j4PaHZ@HV~Ht5H?pHfuo~4Cx2awzCacDf|6PCY;6KH`qU`4w7Pr zOiZD318<2y`9?Qq#BHCQhJ0=JhAyIdbIcQOM(%i!N!%?U{UoHc>Z>6jMT9wGBPK1h zX0)_}%L#qjPS%k7?FDJ80_LSf9`KxKjv56t=o$&khBE;jyfuky*WL>~=xC!W4&3eX zq+<0*8Q#fOumozMX_oP8-whJmSt0JlOe&v+VOh}K#!?@B@t~UhmP4U_6 z+(bEDKhIl_CTy=@X9KmuNCm}^NpmMuPHfpBAS>&ImW;e!Ym$c)^p63N-`4)n$l3S} zNH1jrX^3D4B#$~nq>TtXiCYI10kF{Xs?*-~3?L~IKtN_bd~qbG@`4KOISvi&0EoZD zV_-SmQLCO=KH_Vpk2yx}q*}pIO6y4~Ylr+*2)1zG8V5F>xJ)o{gX}SnLv`gJsZoIHlV%q)OVw4_SFV|4iy~( zbk8@?^7Uc2kb;GVwgdbBaq0fkHLAb%2%??-m$=F)q!Cd zmT4>h&lvz0kyK0jCjrW3Ac!)9OzQhUmQy7lJ_@}8zVb;dtt)e56@Yj??^BT{%SB=# zb|79>DZj^a`2iR)n;|jTI_2V7==H>`I;^XeQT7_!Ya!^s4i0iWBHIf#Mn_?mvfvaX zan{pkPLyqPy@4S!*ugu%xVSnFly?}^-IFT@^&;nu2NR9%n01Q_2qBT%-O&GBc zR@-gRyG8GDc$&bN3KS!~pp&cLWHh`*52$*2&p$UA1Bxv+pM9t{Id*eJyPjOsqJI|D9NZ!G0LtZ&K)*rk_tZE7w zcQ6ueDyob)4oQe%jM$GrvLjW@X|(6rQ!y}_3zn+CdIqBJwm4X_&JuP#HC)ZX*n_PX zN*V=1yN+JVI-?Vb=27~6Em28myQfKeh0M@wjTyX&?YeEex`WT6Az*sv=iH9pil4X@x|n2WIR#fP z7EwE$?S<#Z)#&|*CT3+}->%1`6wgc&8}A*NxKDx%KuI1XyU6jKLulqcz7rF(y@D}1 z3JvJ8RPD7Ty!;8LhXJP*i}Y4jSs-h=b(~{3vR7VZz7V4V^+LpsiW|ho3s=8@PQ;Xf z{*tM#AX7i@7~e}ZyOfId9dc1z3m2_od$;)t1OKy9i*2)4PXe$`b+BJ;AMedh;5;U3 zl3!;w9^?ES8UM(Slt%{Q z`HIyuO#wRJ&}MsoL$q|YU!)Zs@Juezk)Y; z0HS!-6Q2OM7lciXhV!!gg?M)>gwuC;Tc?{%CCA(bZ-)q=pRIxklWUrz6bXquwuJ!m zO28Tn#fD>Poh$y4IiF9{!Ug8Bb-jrKMVW|U?tXq?eX>_ zcWJg(+vMw<+VwUC2U}&KK}{_(oI10P2Lnuhl z3;nErS%;0oiq3)o+R37Qypu^ylC$D0G<=DLWJ-av7Ht4WqP77_Judz&*ul{sxZk!F z-9pad;fz}k5X%z|)<$mHnZStqHyEjo#{Y$a+)qLFw%6gzw#}6D^qzmdJe%wS8Zo{v zV72hfh826TJ*cQv69E4n^Dkb15H53+OT$77(ydx7Xv zpdXEYj1_eCza$J}_Zww2c;33D#GGyS*&%MQuovW`GBU=!@hzSQi_0R)o&OP0f(y@vkuPDVZCrEnuBid(wnBPZrYLA3GGoVK^57Zw3vg$M z#nWG*$xW6n`Ed0u;iI+S72if4R<41Mxm}MV;GYEt=uTW(A-+FjpbiKQe#BurPz;u+ z>b85Y%!eqRV>PJ1&^;oyY@I;0ctR5LOLYhlO6RP}1n)i0w*6^m|F>@N8I*@s9E4pS z0f1wtUlruHZ%$ovTM4;PyBhh$acfW9+Jr%MiBd!!1&pghpd0gWVHi{;;1@4E`(E418SNChyJ%1G%@e5Z1ap-JZ$+(Tq=wz7){p8)Pvw`|8 z3HPy`+jG2!j(mgXAZ4h#0DS^Y4b{*RvAV3HZEpxOB>l|K9X?o2=?Bp=d{!tL2Tu zeAxqJW^ZyW-~}36ErIH#DtVB}CC3h3`8v4Ftubd`$)s!qgxJUJ8;|P5f+u+IK=`tM z-nj_$%+{W>q4<9_J#hAXW|n=Kw%;UVQJ+|lS_iR-=8xm0Nx~3%Jl%u=cgVfAnS~{O z2eesOvoz*1;s5YAV{i~7KD>RXpY9j!x+FDJtN*MELcz*dIV$1#G4|YGD?$_wTw1&; z;?w$F{1uFYlaOPmgCJdmCj{@`k|i@PzCwcoamk`!T{G>m99qM_2-^m#epck+*JacE zBX|rO;A8@3PIvbs0_7{w7?6jYFY|2DjNDhreiuSi1uu>CkgO=??aTP2FjEN4>gt2Q zRp|;Oq3mKxey*K%N+iq0?sz^V#<`{8au8qK5+(u{gfcdent3YYGHKUo88#{n3E1y5 zYxX@%hZ|3PbYVV;|323WqueVs+E(**0|+xnoh5LpOefQpN}~PJkTR$tAAIGa+L9S= z_KFeNW#(Yg^oYA-n0LiG(L`s{+vQ95EuHg#fBhk654N6mxzrkp8R)(jUGL1bbNr?X-i776-0gs!{pJ<5Z^HPy5vx?4HblcEMkBhARgcwu(BjG$%N)kB-rx-PnXF zZ-~AHPktQ;3xZyPqK;qQX9A{A^|dZ#ZGJsMt{T!#qbbEX6l36|Hq3f&IH^tbf}Afw zB~+BRI0sIt^swtT%C-0Wf4+ORmQ1<+?k~Z+=sl!fNR`R@_1`hV#tIu%|9JBx zEoGVh#bKwMTgXrSzocZS%=@1&61@j!eSvzBIwg!&a|sq)`pV#+8NZ(c*9eEN8zi>v zr6et*T0wyIxp=y4{Iyz?N#ZA&MsUYkjL z2|0AG>nl~(a{v2F?80CsIS0>E&`0xWFip?AW;S+CF?Z(1CI=7vHXF?R`B4oc&OG{a z_+JLq0AK4!OE02C?4nNL%pELT*8F8q=tSK)6G3H@LpBr=r;61N{_>Jwc!|A4sto0z z$Th%m)}Cfs%l?;_@PLch^%6FKyEnxPyX%J`_Di{kkZ6 zjM^Oua-oEx-TOcs+%1w2=Ae2C)q(Fh0+)&{VqQAc>5YQ-u8%C*sY8@;=|Fx^YYXF%HB?Wb`n3jzD;h*r@1-EEqHf>{60=<> z+eAHef=b{8_G)cmBDL+$4QI=4d*WxRRi(bBUtuN|ZYy2p&ppW9kO}sr%s}J>WvJ96 z{I9qe^|DfavrZ3I)3&=cm?Bzx4xmD*A3yc)??_aFuaj=GT;iBJ;u_<4Z)D44W^+vc zoJ|uTDCw4M06G@QMQhHPAz!A zjcZ$};tq0g@RT^uv;RI3_Al@f-$=^p&Zm(^5CvmjE7k3!eua(zoQj6Jqo*nB*QX2X zcPinv*I)F=K0J+l-4awoh*yNuXgDhMFTr!1nLRJOB)G2c4rLwx1FV6j@h@4{&Nj^bDSlxI;+apFFAfF`|ZH`l4!v1C}gN_!1qZV%i&89+UD^|JgK z)%dmc8VT?M<6Rm5i9(>f>(_Aqr}C)QDf~mf?y9yuW2%V<}5>tI$e-pkIs0zxU)F&iv1fyj# zMA?*L_Wja_v$jw;)yJ^KZ57uhlOWkV9P=3iD z{6ymp+FFvfo)k1x)Kj!ZooQA?{`*WMO<^V@s$*2y$wvY3lX$Dxh3=k=jsS_N`!>`b z<~$A|joS!|;<6Vc(0z-1^w72)GyNe>2-PLQQhR-sb_W z!1FT-DVy2oXd$FGhzRF^(#VroN?Utj{(>gwuK-n18#1+w(@QtOx(%y=Y^sIAxz+f= z+*U{o$WYLma=u_djecWVGta$`u@S)u5Ty-W{t4ct3Wcr4{*tR{os`}q^dA9~>%=Uy zS5_5iM@l@n#>rO+!${_Y zC3)6EQ&5QY-41X{ELBEQF9ADD1m^q7=qPB}R#O#J(^v^ln7x-|~L8~(HHg6a@gzCaji`=*bLCuqNd zoH>CNYHDh@{6C zI1K-wHG!IDa|^WycsE57Zf6Dtc$1@5{$QiM|2}ryzj;%rzOirkLnh0KSGa zm5eyUF+ebR9YN?D6Mvh+TL?hcVbspKHNq{Aqv9-3hsPlza~0=qF$9}v0p9BQ5f=a; z_Cj=C6-nQ64Xa^ELb3rca$ohf_9D`C*_m&cBoWKq*z6z;;9&_NJ1is@A~OsET>;|* zJ^#grD4U7b+av|r0?@)wumXM6vIIMI&mxgq8Uh?gv}Bcvi(pHIu0y? zDo4w&t73_|i7{XH9X_QOk7cGl`2zwX_mDk2HXixtA4=<#zg#(7DsG&i(}6!q^6_$ZgJodL3Mz*QAi8H^n39o) zBdMZ4N+4X4?97&5l~X5_{#f8v6D8l7d~{hP+?D(S6Tnl9^ldz@xJ%8f(+`pdV(Awc z_~SFR%@hMLw<3_&6T_P=5!%GC$;a_CB%k(Ut3X3I+9MVMT2sz?nTYN&kwBc8`Y&{k zk&6$zda`JzPop7UiNryU(`QTR_XUiT{RstDm`#S``%DKrm9={E37TbvAo%gkzA!?9 z=(Y^LYT%ijKI8&9n9c^9&>Uia-UBGZq|vqFWa)&!`Sa+A?ADEL`9nM2<)0g5YTI6? zA`)2D%-G@W^>Ih;tG(;vFy3uli7?Un8v{=(=l=6(Dj$pF1&-hT2{L?-@gpMWsDz&#&EOyhh6L^jofrD>5!0Jjn4$W3BTn0C|dIGsEMn--2RN z0J$&WteIP>OzUeFc!waw%wMH2MUX5@;yY-jv$i=TuAo-!$j0JVgsMz!!Q$`3c97ic zFv^fNu+n1bgySxFN#cpuDs=?3r=@@Az9^T`sr|x;*6AaZTh+dmk3iJ-inZG}ulfKf z*8_q4ge=iCgfr?Es7rf>n=etzl)-kL|k5EhPG@iXXs= z_ogwmKVpz_si1x9Czr32rGy`vFwRv)60x8O7yN?dnTn3lJPQ`DRM9iG*U1Ca)odm_ zM$$`(<4~<8)I@uyxx~h6Z=ZM?BnUv>rh#LNdznDM0z{3kRLNCt;xqR%eH zvn`=9O#DBX-XPqUP1%;U9FPZ6Wqr~I&6<;tL?g0X7LxDkt>Sklbd|C5=gNAf6~Tbo z=8}(tvSo#N35^lFt*rB}VKuN#uFkbBx{~BUK`7oXxcT}ApN3`tL6$kWlF9zM^)e|S zFD5C5f15^pPcOE2W^Di1i#0!9Pi3H3B_`?Fkh$!Xfg~81VfCs5icqrou?16bl)@y9 zkAq?*QmB(nGPq|xhX!9?L;~n(zz-Yw(baCx>9w_}eFJd5?m)sqv{GeCjp|@R^i|7v z_U6apN`}E7kf=7&MUxuMEYotbbVi=qK|?2*&t*ycuhfqp=A==8{-HmD zHx7{5)khjGk%e_VH^rn)^vOYuy!MoD#&kUxJ%KsyR~vjj?jQkaQ@noXU6MC5lp%%_ z(iFYhN&w4y6S2BX^P_m^$!{S|ekLE1+A?oc2V?gPrx+7%mq4hQ< z9L_tOzkMl?)afjQl`7%LzIgR?J?7gt2k5;m{v+C~;S27@*v{l4?>WCoZVUvT_Kyu~ zH@OS0ZUm%D9T4mtD(Z$>ICVgU7?D_w6cqPw%HGOX36)NvDIAPrc+3RUQ?6+lAQD#; zAZ+*hAfK;}7*i4}H>x)$fVEWS5w>AF;t3~2oM43%&`t2f7YsE#!?p@$`EfC&K}H!X z^a9}K{$j!?>#sbT@`b@@2XoxSt%aneA$Mi>p2WKNXPY7rR`Q57 zGD=pA>Va)NZ=@RbE=-iDx$-p@=}VksbUS~9Vatpz63Y~X8xLu~-Nkyzm2_pV9g&{u zRX8OxHG5T05wET+P_|gK9A4HHSRs60@HmxA)!#w82%s>lV zOFkM#TUPm7jh_?lLp9=A00+lnb#Gux=GqS4iwnyZAkjTC0H9LFHsgvl(LD4gkj8EJ zI9wmJq!CKWlFsjYQEH1~!tDa6a3L`#AeY4WYNG=K(2$k%Jgd_B9iQn};4<6U0^l-I zSpqyPY4xU|R$Qkll0OaZFZ3sff{=XoIp#5I*5ZjOn|P>w z6G;U)jD&NYZgckMS>Li`U&acMv%hN4IH3><91w1zkJ#%9LH?9`yZr~oDzAtC;Uh?* zRBL}WMx+S9Bz^D^$lT>M1Us)s(4Xighe};5!+fvV5*EN_32q!nVz0hJ&smEix=o9A zJ307ipA5Z}#a#uScDN>jHf0V+GFo&4?k*V?ZPWaOv{YDjP&tDrXs$t)4qjs3r_H)j z$Ov)v;bs$tWQj5d>x?*Uqb(PC=vAPJvreeh!0YcJmBn6_%(p{xEPI{2SRE>oHOtzb z_Pn}dWU<`<$y$Q-^2oqMjwmfx4>Gx5zn5FLG*pv>L4`-|3q~rXKz7)YZFrUTU6eW^ z4OoJAW$2V#hvq{uyZ*py)?jXAg>aP&rP@KR0aUGaOTZdB_s`5cy7avjM%4ghVdC## ziUa-&&VAQapyc^^Is%1X9m`Kc4=TM>^IG&yS11vZ_$~ynk{G`9d)oo6(%lbe4Z+1X z$YEf3R`btieq(!W@ahjTM}^k@(HFwHdRXjyMq`WXstf@mt0&@d!^nVuvT%nbam(Gx z?xW4wX3DAAyUhZtnYz(!e6C~9=k}m%x~p7&1%HX@!H?sPfXxb0HS14lOd0?uyXr_r zs6UV+=rQ_XE^=$~PynLGggKWBmC;bHH*F95ng-xb}u%l?npRUf8PUvf8gQ<6uC zh_2@gU-N_m0tDEopb1dKVFi5I3oTMhUmMOs`OgDd?Ic4|?{#+dl$#9Ai=gj`t#BTt~u8Wet6e`78q19ve zL%3w;(0N3W)*|TA%yqU&2U`V{xdlf0q{f(8roL99&2xp~s_tfhjkeW7Y^Bw(?pYsT zy}CfR@Kohwho%haG1I@406v@HRB+mMDki4gXKJn}TPlm5dnlBG@!P07uqA&ht(2yp zc?)vC4xDd;Y@!X2R^-68b=A}Zs>~nV{rlVg0B}Yf#02m0cozx=!o3f&WOvghgx1lt z@X>9$SQ#i|)^JmwbSJA;N^$RNF>4QwbtEB zziKnhs)I4p@{3sm5Yu>H)kDMq1lRB+KzUVA3RLzhvKVZh2Ai{L(+$Ga(rg7NV&NYw zKXC5}pEC!Q$>a7zYu|%c^FJvEDjv1dDYJ=A3l?n>C!2%JVVbY=f%kWc?}70 z4Sj^37u}#zjCc*(Zm*$tKSd9wRBKV z7175)q_I*)pd08ykrzUH$fwIO7{&C1Q~9{Tr)1_s$oa?wh-rmH&JxzD=fL6jcJn;# zS#q0Sd@q_F0c3{cs8W6GW69NK^3Eo+9g4?qJkg;)BMG3|guW4QJ{mA+)twDXdam`N zK#3$qAF=!SaG#jszMo%fKHOq5iQ%06XY%00N;CNIwME5F+{joAJ=W0ze{7c{U zyteKl5_YDK0}3X-9Dx~cW?u~2Z7?DG9Xx0jmI2kuDG%-b0I{vW9Jxl_z)?z|Slb7} z+zl$1-RXKv+#63=pwBd1i^b=U38XRy+ieA3c9Y+$1T=c~L-@ocU$_0) zD%UY}k9THbVYhNBQQRgBwU-Bf2>)o}aaIs4AKf-Fz&~!-nS99D0#w*b`P<(-gH4=x z6$uGEQ2teQB(}@wqRt``Ioq0*bCe}I`npF*Q{NkDiY1HsQ9~KdW|pYYQ!01f6|R4u zxuDAucZVgVeY?u~IEUWzC8ylf8@i>*4W=gaq|y+-DkPtBiZS}iXQ&ySxA*#n5Iu7e z@DWrFF>wp0!A;NR4h0$@avxVY!MIdc0X6N}TX!C=<&Qu_Ij^pp0g$0y?GtP^6fmEKk`wcU*|@8;B$W7d3A}|5BDs=x zsJ=eElz9lK*!X8GizKy&P8PdPpLuT%-Ue@yq4d)rWBSsyP$5RP&Nt-CC~SfI6Bbi! zwmz@YK?}gEEM~w-WJI2oKcWB z0$&@*!huE??I)M5zxRZ28msO}FUzm9hM8sEZnUsKCPwt261+>l+M{*os_s$6afs!^ zE$p&bmThX=5-|)&)Q&bst1KkFiUn)y!YLpVc-icsNOyoL5i*;07MEr5$wUF}X!G0aXX;5y#6 zZ~F`S$r@mfna|p}sGehtDJI2xdH)1C&PIZp0M&T6C0FDOb7vZ^axmzIDn5TizBC4lQtydx+Of)HU z*9hSXiZsXs%&p*Wf5Zc@#@r$A~%4xX=!R!n*|4|wIa|Koa1gNg2Zm^xQHlw%TA-=E9 zQs8;aS3HS+-tDYLIM70d{ z2*50?N*tstumZP3qE9tsT8jhlbd_uvIYqY~J#AMt()qgvJ zb8iga1~Zw6ccMB+hb!SHTH>{o%S<_Uu+r;rOCEE*>!wPaGr)WKLI_W&XH5Cge-f8c zR*-6*a)*;Z7Q~Yea8gZF5~&~k(878dNJt z_3Iuy;Gb`PWuy9<4=yL4*zJFx$UOISc**zW)X!J~&xp_%rwT?=PbAR-zD|l@yF^hW z8ac3j_PerVD9o;uV*+EBL^#DkiE64lBqRVosf&5zZVpyRvwMQnA71qTjmJHnW_oJe z#_&Uu7HXDMy=M~ZLcc=z}K7gf6`lF9``B8%igAm)g8TtriD}sP;(zn z&~rfxsuS|-sqpwHcX-)4$6*&q%DS_GQ0$d=PN!VKxeJXi>O-0Nk|fMWS@$uZ(9;?e z`9v)gsbA6p3oyVnLcLJoD1Vk*$)oyjRM*>m5}o7piBU1iB3R(L);&?V^Di@LhRx0M zX}U^THM&H!EFPVv7~)i~fcfqQl{858(f?G^|5VaH&*T48(*GYS>4)k0an>#7Iy3XX z*X~}T*sDljSM(EHx}TmvAdAlbP(x4W9o5Lt%TADp-oUFFdte*)ZaJX~Q5Ogd3S^G` z2Wbc!zG&=OGFE=pt?29t^K%dK--d*rJ0UZE`&ip}_;}%9VWj!jRTbm!nsc*uP-R)F zK$sEZ|El_UK{_fKP?syzd<9u%ZED6yWo}T55O+|P%e7xjQ{)z*eh&yPHuB^@j~0I7 zo(-aon0zLbO7jJQ<|Bq^uH~5%%D?@w9Lqs84xFb}16bnJuzbGFz@0W|nD9RQ-$Mi-%$mbEi%zD%M#cX;@Qw8q6snImP!FU z@&h|$`I5gDO!0%$m#LX`Es!$tDfmSupgI3yuJ?ggt;PMD?Ja~1Li25NL*^dx+aHn$ z++<9$x=xu!C6t0{6@{*$E`phS|B}>0SgkW>WmjV)tH_ zD?b|DAQY4@EerUbIAGIDXdZj`1)vlOz{6G4Y!2}uORR+Edjrj^LV@>ITVf-UN9qJN}RgE;>7c%yc+CQ?FmYpqKyw zxNt8TgtLQIe?!~_<_J%XG(r}o7Ap1Y2AmEdOr{R9D6InzFppvkanQj2*~A4 zsYZ3|@GK|}7)`WIE6cOwZ#xi%6*N8q7_DMtJwWe}^eVrqc_B?5!x~vvXXNZ7>!f`~ zG)IeMR5f-}K%${|b?1+axosgQLhqVZ%K}0W`EJvl(~~!nWe`>i*N<$Q`B`xQupE)EfQUS^)AE95Uz*%GJj&;}r$l3$jl6Ky&8@LKoA+&r5o1)Z0 zsI(@16GruTb(<%#9(~XhnYEzf)Geet`kv6UIr~vQphaqdq~Oq@VM>(k|BmT@4xBM@ z#qbM&$p*T06e9a-pZzb^WI9nnChhL{Wl#+BkaVBZVHY72wo+K%RhLNo^ zlQ76`z->Bh>sMP`l4__Pvy+mBnE-MY$u%Ud+ylI5+{`I%ra|As2d(yv!eVz0 zTwyUdb_0_Q$oUYR@S)SPZheRMz(bBTLx9hVYmB!7qN9N^Ru>n#v)64QKQ)C=KqW|8 z4)))u?7lRFq#K%6zT%|ej!L*_`+H#!)V{0Qikptjl-2t(tI&$VPVy9~KN=G-3HOm1Yuh!Lu1mtVf{58)Rj z1q!0`?&TX4Db<7MI<=(i+?Ba<)_&Z(35dvI+ef<)TVDwtMbe*HHvIHy$TfbxAE$2Z z*A1LNv*?J<31ovbhJ1A3h&wF_vr%@y@zt&I49IA2P2GYB`bf4MQVyF)#O7#JGpbA7 z$YJNxU3Yi+`}Rv)g7i5CAa{hIH|1BRuQ)n{pj#zUti%DpZky@#N9tA*OxD=Q6f@8= zf-|Apk1I(6D5nltkPuh=@yyKHWO{38oWM)Ngi-6@>W`Z*N@jE(e8r(aFQ0_Xt{|_Z z6DVBTE$oS0^#~y@8)$J|`4ky2s^(u$bP*o^xDY@D=b8{L0yIoj@|XR|Gfe~Ca3%wa z*GpF=N61HjoReY&`UoP(R%PfedqO?E-$B6DrhR;ep~qMdcsvQu;9Y}sSvGOkLK(}7;q)rp$2(?n4GCU3<+}B=wEE`gd zqi|xng!l3!NIGl6S!*~X-gx*@rL)=bPyny$zMKLy>uD9}G{r8Q$`T!f{1(lXo9SEM zLN;y0IeyI9Y7_QijYTG=wrsfl@r`VEbHsu4b%P_14CM2EL|ocIUlF1UBD$;=Xm3Jw zOT`o)7M(PQ6?8~T%M~+@60cxPE(U52 zdKGVR0QqND@+Eh)6S7Nft%hck#O(X*H4^B7ni^mR(4SawV!F&UBTMUAv_pRkVQsiw z?SV3Dz}cE8Wf)ciC`>b#<*`2^3B3f&t~a=pikoEs=n)RP*;u%~HMj2lyQdWA@$Ej? zAaIe1UMLhqGk>rp0E%>KGcPI(9Zun5n%2&F?5HSPX0cT}xQKi$HF$+ z^;jA*^ILQ;3M1e}KJVlY=Ph)Cgp-4$qGSBz#u08{&c|ML-_sgvxwF3#kNI^2$W2K!(flVD^RLa*R`(lqc<}kp)#x+W&oJ8_y z^2BOu#06$-(aAKMO2bYKWh_Tt0dYwXkbJv!wCmF+oXn6^PjS%9M7lR0Xw`z5uZdbn zNrgj4mzLvkLGY)vVo&@@P$3W5j7|d#+BP>5;W^XLvv@!D5*XS)v({zx2y4ol|EIlc z52rHS;>e^alxf>aLym4PBg!S0t#(Ogicqqdt%S;@=*pB$MUB*!%S>)#+|rTlp4>x8 zl%zJf4pQxsv5hWnxlDD|+RgNRm3^Lbp7ZbcYd@do{l4#A@B6K_-nD+~x1QcU*SKz; z=a$}8mCCQKI%ns$*8|=^9`mz)mPe2w&L=Rs)T3?ke{j&=|FFUU-9XFD8p2b`&jaIPWZT*qyR_aK z^yG3G%IT5F9KS^p-||MmlGd$`)erSI_iL#EVzs^5SI7BBw(W%y14{t}x$%!dOsfvct!8*%T9Q2OCZ2$Q7K%Z#>`Zt z*t=I71yh}Zm9=#2avm?_u)Jcagj2W z2;(JPfP;=4bi9fZlJDfoDU7W{AhsmDJy3zI7vh39lJj+ z8M_Aw$~k~qd*@2cw`^H=^mc?KHby^3CjU1adz$B967%lkQIPhE+dO!4Xd z8_7~F04RID0l~Zt-f!nV3`9eBsQ zzFM96_7E^K*)9zMo?Yme0^$T+sy<#-yRx7kC~m$*mQ(fUjFYsJ!|eW2Wjo5dDV(B_ zUd!W#zDQIV+57{mv~~EM9LF_$Nu`I()$ib-GSG5xczLKznt+0?pam^zX-K_&=KU@6 z7H6~?eWuPNA-m-I@}pKMj*md!Pk~k`0mo(xQ3027j(xm-6%YyDhvakIRUqK$IRetVb9nORpvmJpFFZOtx=uV)++7{O(~uU+C`3pcce4 zegQJe%Y9JZV35_}HGE6;iDJ48D93l{#rn5$>v zO-Rg7obmh~DxO|mm*^R6bM6BNX=8}w0H|UKgDryqYwA9HbGHCueC?U;-p=Bs8K(iP zF#{REEoLvVsLKc)YPtQD**8DhmZo)CaB`HmSfhfqP#dCU+Vz3|Q>~|2qTqZY92O>! zcebubQm@9^GN;YOz4C`Ie+5)3wvWk3-DH40e*~n~3_GX5T3v|;U+@7bB!7$Qno~Bg zp^LW{NI4&D*9%d9<(F^gw1iR2&%&kys*J5{>O<~m!fwJd7id>QX_|P}@xiu!Td{ad&3=s1VW122jGCd3?tzDwa7zow?}mWHUgItx z%*Om!@7Vp7%5evQ1}x>_o9BlOD4QO%g5&e+BCRId@E%0Fv;#x3+BOfwih&235obG} z5)jH`X4VfvqX^wZY1sMkI+f~-<*@*y)tixnpzpAv(LI25tFb>N+jH!DITij&JhxA~ zZN4w~g=Z#@V((z8;;E!jX(v<6*0S8L8~pIcHl`-i32+Qjrq3Db0FNjV2>T-}LI0HtHS ztj3xdG7c(CP?SJYyvoNn7mwnrusSLQKb30!%I1F1t`=}At6Rbl z9m||&AuI{$-@cR7L{-wOoj7LRO_O#WK5rMuaci8uRQ9#kIG6Q>PqHG?CXZveThXd{ zoIV6h7wxwPo81VZhL*l3uO==54QmeDe8*)l@TtOb-^U%c;=@%c29ErL_|aXaWve|Jn(iCjLRlF!CVRptlN|xg4gzK#8D92{eur>!I`R}_d z)d+oW!XZ=>n_O9Xuwk`a00@fxf`_cIMe%(DKOKvsJZ$W$bTO5~<7$`l(tFU( z;3h@=APHvt-+V=$;oa#O*&9GpxhOVbS(9yUn&KnSSwCAqS6aWc20)SB2LCA%p_%-D z{0qV^f|g#;@5f|YHZ~)xvzM;suWqmaKEo{vQD^o5>dFD@RyJqe9E83-sTjFf+M@^l z`?JHQt4v`P`mc26{gxbjahkTNR_e4rs?uq>?f2lIZ%>Q5p(!xtVf`GotS@g(=5#Lz zf~E2Xiy2``mP6We(34rv4^nQ}n1c8>cXThYf{+EczX3h_T&8t{b6^aJ>6-p#M*b>JHsDdcktkwem{m zUo-jNJU^{0B`!412uI4tr8{VR&V_*}n*#?_PSA3_Tc8haxbipJS=5ZDaS&+1ra0-H zRHyhhWscrU>yq=&9ziWl&FUcj9i)AfUa@6+@RK%YHAbdtJG8@VgtF-S5HMq#8NWSC zH_tqn2Q+ZrV`UDodyZ85v!?I!p6k|pThaITA48!qC0$+G_bbjn!&9fFU=30)7=`{` z-8WYlL)M*NpD(a`thRjz&LMJQL&qIBc8$fWvlY%feZzE_TG;_nnRyD>nqVZp&NxFFM^gl>+sDD_Rc&itoip$&61WQ35_{ ztBw-NrH2$%G(l_Pch^rqp(QPFgNd z{u&6W-Q2z0jtBvGBHf{0ijE9%iFg4hW{!qaTKPhgAQ$%)jELaOIYm0!orDpFoVJUk9MXr|!H+k{dzpBy zl(Z!{n1(oNJWOo04|@)Ocp~y)s;LescBz4Ix)Y|_J11X4w@kRX9tY zh2u+9UVL~u{)k}0D>rqMVTPW_I9HgWyNnPXX^yjEFm}@WG0gBJOk?iZ1lP%5DoF#C z&*jX;1Y9y{2xgI@DU70~!U~03@EI%HRiP9$>tGsFt5ivIGePL%!a4_HFMqTRvk(lt zp?Nu}K)4@u&&mRw*^^J4a}Ks)yplI5L|5UDx~HmJ7^R>%h{}R<*?^>bKF?v0J{_fc zM29bytLP&n>BWJ^22s26iA$vAr6(PR5nY~sq-oNhz+1@+#TdFF#*nHJ=R|x8Zb)T8 z)l7O!T>5BJy@3Vf?@K3Fp^PKms-s4Myfuh1^-i$93XJ`Y1n|@fA%;IuDz(V-CBCTt zl)50qM?3*6)HRsqc=b~+pbm*gxIt`*jD++r0x#FJ!pci1e{xbN8X&d1|Cfq~Tsj)+-_Ru!)$C4z?*j zGwMLtKVnV5NOXg?R(0KWmP967ifiW^csGn}eu#%mg_YNKTt1WZZCFXb91WHDLSV4% zX7CE-e0M$KCQQWG*{JP`BQ6n(0)6gwg4|8k^_!CZy#-9>7AO75;V`0N$Y<+I>~ep) zHf-8h;Z(hdxZE6l>k;wT{4CrHQ7u)(CDI(}jx5+*7j5s68(m3)Hgweziux`@Q+Vfc zED6whAA}omb?wwoAq9Uv$pn!5+D*JJQi$s_LqnRRNPs*{Lw;5&Nluby(3A;f49iEx zFm)R;=sO=l-xE#u%_pCDk_9Y=_lYLLnu>}|0Sh~KRx}jSkQK#W8|FQC^ZD9m#4MBi z;3nM}LNVXx@XOu$5l`=V7@@#C(kKKTij>lMv=DR!)4sRe)f-=H@VNBI8%dJ|&(vBoP%w$qDH zR}pJLTP+OKlAPSrRzc10v)gGQVLuG9DCk_eXEt$(q-T`sHNoH8&O%k)JjPG$NN?-ARfX(2YS+^Urf;PCmj7 zdJH8Ls-@m0Y=zrgxD=%t88Er0U10_0Lozb|H8DcT3i-UV9)Ajp`%9XB;Ep}nL-Gm0 c@p(J*b^t|+J9F1M5%^ngYOywZjpK=b12a|^H2?qr literal 0 HcmV?d00001 diff --git a/docs/RFPs/Open/img/grants_page.png b/docs/RFPs/Open/img/grants_page.png new file mode 100644 index 0000000000000000000000000000000000000000..c376cd444b61dd3e93e398b62eeefa5210110b10 GIT binary patch literal 336802 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 z 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

|;jW z0fCybHsWRY*Y#lbqne1b>+PN-4CejPGUEz!fQgHFh6cOvM>#K*b!OFE5Grn1{U0S4^W*Av9+bATj}DV>T?*avv)!7H^H}RAp=Dj zr6IfkP7-DA&PJ1rgW-8HUsiPMxRtY{AE6r7gliLac<;)g{b&c<$1jKC!sOvGsssB2 zSa6rQf?CKn4Vm$X;fk0de-nN6anw*R#PhUU7Fz{0yR-&ZFuUp{hdF->+NcK?6Gh4Jq?XxkNwB_8d}r9E^$+ORLR~H(K~C{ZOnCeWz7A?TN7JZBgek@ z1||}7338(3`~uU!x>r9|=&QdoNoO4?xkS))S## zOKark8VJ6nC2$CFt7~!@#sse&@U+j8mhJfdF;vB#xW?zGjk~>Tc;hv;I8`jsjed$r zILeITz~znjTv(*RS-j+UvFoMEpEhQJ#8ko^lNbG_5;~YLr!fXxgbGU_o#Y8DlW0<7t zz(ieBe-kX3>eKy=oN5Q76EjH$<3N|v#qTn{q#sD&F6e!iFDes-{Y!n_qgvE|)OXw| z6-*7VzlI9;?18o1(Av)u=%25TUFk|+5~;V}-Cm^}C|e*_vEd~&c`U{byfFBld0go0 zOX4^Qa59b~qR9L){q+X*o9;Z3&K2|hNfv!?bZlzKrGqnInyl9_FIc$!QH?{J44p>` z&Np31nsK8Xt@GkU*r&eLEFCMuVD4F{WIp@3X~2*7XMZv5whn?1B~xr|ne4fWc`qxe z9w8a~n}5*8X^^dy?h@nc2BkMoX>8Q>k(ZB7#AGui$nF7CJ_(g zH)=e@M}bY{6v<6Y%Fy&Rxq^7k8Tr&^zHu_pzDivq_sk$kLQ9XT=cXAjo+GC>L8LpChzrNy0>X*DaLZ+3Xo(wKUU6aKs;O7`eBJ(&%-+N;%Y0Gk z)ceC^OzW4g{A}m<{s8(Mq=HA7c?!d}1mij>>tx!ykTK=KyJSxI;d@FBt3{fkeg*eh zREBVF3lD+Ef6f+L>AbT(I{LYWzndMUQ#6sDF_EuM z4Krq(sq#%nrEhcMj`Bp_^Pc(2F#QE;bwQw(wWJHhyB$zJT%izYOr@M;$~!*%QV*1K z8UjV&sEImbavRm0$))npQD4-RB>L{G>eVzgH<6~J!)rE|-8;3zjn!qN#-Z-8$dL4N zWqd%%U?^Cta?+USQEUDqH2H7f4G{L$(8uqX~D z&$|psXQW3}*;qtg_5@&LO2Cli6q;IuFryiQT8_d360wrbnVko08SL)QJ4^!Yd znYiNrHd6%gIUDj7H=I%F{Q?u!`t4)heeDE0%c}+8zUIq^*AyFgN~Uf;u3Qi`cThxF zAV*9Rok~qWO7&7DN-@Y}L55>+1w3F@<=?vHMn|^Mu3dxA81%4I;RShGwW=+sQc-Y> zPRcZ!I=Bz7tPLEQAGmdTI?o24x%}Im|L=MS<$xM?j#MRF>Y2)EkC&|zoj{#1-oS&* zh$B89kYC+qgD$J_Ws8p*itL}hPUMJ)gNeCl+{ZCI;&E04%&vicg2}K;Y@JNu^)T6h z$p6B?532)HtLU-l6!{`3l)|!Y5U(8=wTs7%Z>~paSmwe*j*=L*$9&?H9%AkaP9l|n z4pIq_vebtSdxmPko1C;f=yB`KS!>$eY|I4hAi(X%`i7IuLRLA&AQu zfVf+>P7F++^P;1iPKXM8V`G}Xus*UJO!JrQ@G>h7M!#R6?dn#GVM|{Q# z0vj*x_|*3o7g%xK{?^L))Yt&2?l(x9Yz{0jklb-2Lz#K@7uQY{jb@c%NawFa|my+fk+RSGVn8wY3u|C_qdK-er&dzd&Am7lEXvNrh4f7}e|Y%yrSUf3bec9zyMO-qTP@6WTC z7qRLPX>Jsa z^&1vkx_`d=mhh>htXhYm%?dE+P%Mv5RxbdLXTyC;xMNbf=fZwF^gA=py7_WLn)k-M zbpp0Iz3`c$r*j#3ieyhKk`fH8V~rq$ZB;*#L+MIM-N;s*3TiruU-?HkjAy9mO{e1JmZ;eB!-^M0Hi+hDMuo|D^>$#MCMunEH_`S0p*vkY&QrTu}?GvRin#fA+{`Ka4KO0B|{?exig75hKiXDSi&23pp z@2($b4@7r=`zrnOg~w8%Y=)lS!7Wc0Qz)bV_u<|98LSF zd+_tk`_|q$6aDGUx6dJOraAIS=p=i6+rc`XpD(<90YQLA_>YgSHmdwSO~RFILzdcA z-u-C58VC-L$uyx~Z~p6N=jieGku^-e{mIDHNkS|3F5$-Qd>6SZIH3!Uzsz4%?0e0= zCKoF7<757?TBpV&5CFBIge!3ZbzfI0@7J6E{@E#P@>e+*JVN&OOMQw8wm$&*{kfkd zkHDnw9RHs$q*6pq1ss(1?S-~KEcJuSyL&BpUi^J!hF5SiuIax&lX{t2fY5Wh}HDB7yZvs{^uzFbCmx*eExHk|H;br|77L=l{5ay%KsrN??||< z?&G5LX%%pC2CyLeu#uRUShuDIBO zw~V>?+@_L!F=E#4^1ohNt8zwNvP}v%f2q9J?Eif2f4!aTpC9ng3jDJI|G!=V*2NBZ zTG1&GiUO^{@%TjcvDYVUV-U6%l6zQelDqCu)>bq=W zQACr-${+r1Tlqg6dNL|yZ=LxhRNuCFJAa7DUlTAk zO!N)-74E<|m19_{JIX&JnfKt4;JHO;w0#1ECuc9xw%-s565(6$XdZWx+||*}divTI zljrV{rTQN)sTld@FP!~v$sz1L;pGaft|k*kTA4L~IKsW9kVyQmD{}_!xC&Z#)iL8* zo%NW#B~ut7o;&~BYx;Gampzd++j0}q(iR9w8(N(QHt#WKcImsdHe9TwDT#`-1f}}k zHQlD#&wO4NgoB!Np)RA)x8R37X_z|HJQ`I;)|GyC)^OKk6^zw)%m!u+SD zf2{yH%wVqkT z^B?ldjhEucvTv-sq&5>mmVF7h$9HShLOtdx^P&H}A{4JDOJ8K1HDzpl8${fh`lr=J zmc5NBnA1~LX*xFd7P1uT4hP`rhgCJ?Ka<)^mK&We7m*8RJ!$wKe;74#qdtFmogD!; z3ZKb&TPug=zkU$6cX3nW-o|pF;{4;yhJW~cs-9fJ^r?(T9_*?_3*CLKe(l!3?gyFi z;Wh`oruI{UAs?$W{?jcmev06L^8ynYDZUtTi^(HVx86MU|MkU}%F{up2)T)DCU*2J~!M*V{P^KcmqKlonK$9wcjBw(oRrH!DxZ+*1yA$|HcEzpJL9! z0=FFt*f2F=RFUo}-j5^C7##Zb#a~GNb*Dm~<@~3E@Z}hCh2)t%hWjj z>x5nQj<~ElIUBKoZ&F)HKWOEmAnY{C~F0zqZjoTjo!P`=2fIuRZd=4%RZj7 zyR&JaKg43KEmgeTD(67IzEOyDC76Ba96>XF`{n9U?m5pHN@T+3Gi3Z$%{_3`PR>F1 z0*@0pYgrjgh`exVV=U=O5413djyDV5{eVBzb?#09Raz_D}1PEMx+7Ml@iYfwNQeg@ljFS5hX%(1Jd*+#t@z90f&aNET zSt&R?8(P0qNm*`PY1TR~8A=k3Ob>eo{wYze;<3cg)5pz3Fsa1~D*+zK=6Hh4AXrI9 zRn8N*GZ=3hkAo@f&Taj?)7SMkSt(w)?@DdEXhV zl-=-*)KC0(U`&Ad?xhn-;E0h>@Hv|aJw12eA%(+lC(j!&%)*sl{uJy5rKOe47Qf`t z+?RZY{?guej(kztfohWbZ39daI?DwEMUIv>9mQ)SUV{VuOyy#3D^n|z$5>H^biUQV z;6DCKi_y*I6?-$Ru6miTFHRruNW6Rx!JeN=1Z`u_L(!pr6OgdJV2czhPcq`3%VIct zuAycMOej={ht;46akI&3X>)m4M%434F*e|IE)Nj&8~6JKIo0iNf{I!SXXrWjJP~{a^>*)F9wwyp;gBk#x3Nn zE(7F^fdJ34Z^vd(zy2gQv7D`=)u5w<-jtBH>JFRZ{BM|V}y0n#Zj&s z6?$HxNVCyna8{aoHwU|WfK#|Y|NfjmGG=6Z@gS}FDbKYkhI}v9jyP7cNQnWxFKkDQ zD4-r{DAi^vxQJ9|EC97P)sn6=s_0NA@gsg3Z_<4uNZ;pIaG4JEh_9gdLefqKTOqX$ z)0uzOZn&L8D5t^T7h-)*VF9j;t;m1^3=5rf0kmjRUraRWm0#kS=7_UaHNNf(o%x@CftrMl6p)d-SCj&}TJm5f5E~HDfoYDfz{y zZ!wZ~u1>W=7ZshecyuK^bPMsoI)-ZY-hIk^n^A?BmH+to?FKxJOv?H!%n+D^DH1%F zcGiYH3J~MjGsD1(_lzu0aH)S4fAg;1c(<23B<+QL*vx^C?R&!>BmG84q>`h9>#NP> z7Dt#>KXMrCthWs`qLymS9*yd>x*5xvq5Gr_AuG zJs*$i-{>e<=~0~*ciQAzVyIeM=J48{)c>2(4Kd%|{@Pc3B;foGL|+4yej>_Xqgj46 zx}+=1v>bU&QaBAtny_QKqQ-ZwU)f&@gX_K|s|(h**|sIjmJiGmvia!@kL6*nRLmv~ z6tlX0dM6gx&T(rye|i(5x5ux#aow#!V(0065VO$^F8f^rN9!}K;RrTSMwOx?WixZ^ zyxN`3N%8g7OC+LGZzbJUi(-8*Kal>PMQ;qd^^fTLPhq;fmv_VYfJWGZI@mQyYfCL>blW{&<0Vv zzQ=OAKg<&x|1@MtP}+u|#*CP4=UEucDELA?O5tKo=Df--?`0E=K7Q)&^#Pce5rPTB zpETni_%_DX${pfM)q`{jzOUaHSwQCRdb4vi-eqOwN7LMUArmCUI?>bPnFob)LDqxu{j?lqeC<-Kij3elr}WQ5bIri$L4w|S@4cz5HO*MZ_r6c`ORYR6 zwFfsQvw2CL!OW~e#`)CkR~@7@)W@dlhW9L8HEj+UmjY-rB-8BI5pd#QZhir0wniJ7 z$&m9|v2mWJbqFD2Y8(+K)%zzGeb2ubd(CO*r-VZ$6rKe8zD>^QAKEEjd<;*x@ZS}N z(Mv0)QA%qW`rD@S=NBVMZ?JxN`pMwPV&v?*MxL6*^j*};+G&`l#4hvE&tZ_cxn{~= zZz<7$CeCs)MXxO=@W}pR=6yEaUN94gq8XXUqxdz_a`H};22Ws@@Jh%-PKTFM&`@>< zTIqP=Q+JWBqngpRev=1$3TFluA??v3-RTEJq^L&Dya6`noSjL&_Z3_g=4gUX+n@OxnSUKP7)M9Qca2OaI+= zn()9bbopptRfUX6)N)X}Dv%RVzjES?FQ%9M(?#Y87)>c*-T%XlySc3CqCkAm@WMp~ zlgR2t)}EB@FVpVfxq3F*j{Bt#|If$~MZJG-B*;=iP1!4nIkjw8H9~^4K8?qtrK6`I zmkk2Y!1_NyAdNd%j?H&Jk>UtIx$eKV`RooeKRS`fqc$fyG@LiD?dISkhOOIQ0V?@> zDrN1CevVbgzKCVD&fz-G{^g|AN2c41p}rWGK>VQj2+Y4af%HE4(N+%A6s37UZadoS z(qy;aMgn(uYd*+}t{eiE5)~?N6@EbJW!su_$t zxv?G0C?uy`8lM~)ePOh-D6yOC9PPg&c~T5tDz|xGWIu$sgq7w{j|J!+Ns*(O6ciTu zC?JZLx#>JEuTK-zSf~@F6cH+PSeBW4uZhbuuu(xM#Mdy2-L;sUi|^V|JD!9uH0`hG zR23r!H{Cy*>5m7m0Xt2Voq$*^OyYk+_qh77{BN&8npvnYrwVv!a)==WyE2EUY~H+ge|7$0(~+Lw_#^qSGo)xZ#^b6bPSmRo}7mC}u4}{F_*AjXHA>oLY)iFmSX611wDk+WpxGFsbI);wc26tM zi8G&9W7j#x0P_Q;na^~5_!uLr$U~$|o#G?07KXG-4AU*6LwpGgYn}!-$(Dy7Uw;(Q z^uY5;vrPfTCPmQw{mB?HxeucB(|%Zw=g$(!75U6Tj|W~{d8bf zX-)b3MXbr#ZTY_w3?HCk<#35-NsiW?I?mz0|A>InnH_pgw%aF)*?=zJ`aI0=F@B4- zAZ?_Wg@1lKTr{u9_}<3fN4)9)91jd#+(l-Hb38YZSjh<@Kiq5o18Ky+Gh4Q5$y-I* z!S0v3>~N3 zK6LL5H6FdxVz~xAn)2}$%e&?!f@8OnOJRouVl?5oH? zX87g*t+xnBJ`jHwS^Ax2x`Ds@3Y~QMw!y+nfu% z7g2PP%*%?Yqxx%C-HV*J0K}08icGv_ymM}ad{L&9)upRZj{<2OQd&DE;XZAqf0TK+ z`YHqOVM(3X?Kci~Tu(gJWtfl$DENEoS?*w;cq(ipMYERB`P4lk1Qh=8-LBLru=$(| zjq2pW9=4&^3$6}uZs%gd7_twHgXcJQKnJUsplBlN#nNdQ%1yM}a9A$12=$DxJ{}bG zBt&gYBH+noQ`g~Uq#bU^_4%aUhUvJ3&lB3PYfY~z`djpGNBLsZHvhWdS!Bbx-8c00 zN1pAgX67>ANbwUJ{jL1%1IJ0DZ`Kezng)iKX8#hLUR`}cJ2JlN_k_0gnmb42m5q80 zN*ke#kH{!g#X?lbs?W)tIY#I<1?= z+hm(oQisSV#Z*q))db!1>r`E>0;RxquY57&0E}^<@_-T73mt>Y{+&=r?i7;9jVMNl zt@h>?1}lUMe2Ye8PcQUmOypUf0mIO9m4LZZZE*MpoZbN9vSz^4xtbD#7;1YgdeRV zW|LH`WoAPO@F&jOvdt8?R~oU@{6)5SU+7#CBcnpCqtbGHF*ul|MIyZ^G$TVApow`=OM2~+4+w7VDU?R-YYLaBl`0HvG-O{RjuzIuOcdqgaRVnNQ06BD$N1}l#&i9>26W!l4jA; zAkxyIba$tK#G>CC;U`^(mPkz311lM#1V~BSpWTi3}6FU>{ zd7N#}E~kcUR02B&A@O7{+YPW=%x8K>*WXRzOKDk+Z@wfo@IArpq^6*|g9}Hg&%9c8 zr0GhXEUBf(r0&zlE!|uF@}tEE#2#PJ8{3ua%sV4***zIFZtgFgFxCuz0wX18)gZ;B z?$YNo#(YE&t#>zzi@{4izx%=r10ymEI~y=4x*JElBU`zK1h32y z0mU}wDuq3Z2tB-N$uQD$#X`&6bgK`K-ML}<{yC}Vt-{wQ*Y2RRQ|QX%k4y8dhi@jORz=!H;D9Zd>2`aP)*y z&beDU93dek6}}B-pfONVJ2+hcX+a+sE|D`!m}yb2?9@O!-OG+85%<2_EZ_ddDowWp zF+;P1Lgkf%pzLNOWlmPX1Ki@ zD9~^nlP-8Kgo2=!`g%HzjQ*Tmkpj^MYt5CQj_|FgmO=HcLWq0mRz#$dq_a=Lbx!Hy zJImv!qcp*Kq9*+I1`m%83D==Ai1h0Py9`mfz!Wh&-!-Z)c$5Ii&G?$ou-A8Xg2`>& zH@QPx#wLV*Fl0(qRu=VVHcQw9kqKxH-x~v7MbW&8i;8J&G>vye>9xOmOn(l`UxIFS z>f8LB&TgC3fK7>fFc|dR-1#2+XDlpyjt^BNb-6z8`O$)|APpEx;=xsfzRi76qvDK2 zC*e|GQzXnrttz2tT6MkTGSAvgZZpa40i_EARDZ@cfXAZ#!+J@T$(F0R6vi9sS7ldj zBm?ce34F!I+-^`fqkv~=*)ef32pp(Ou6*!$lz{C9Tb3q%?|D=8EB(e1 z!2+!kF#eK_%GpA#*?SVgZ`a3A2jw~r{}LTB%DCeB=tNf9V5YWA^@CP2 zZ&#Nht4$_a-9@hSxs1Lpvbvb3uU9h7w+?qNVagdDHNtHFS`R7kPOGh&R}}@H;@+M~ zO)vY(h6}%exK<8a4cg9D;eulbQ}q5~Zzm#j;rm5$9WgD(zMz=c!qg>DT42P**K?yi zJ)~ioL0A#G>4RV;-NZI;>0?)~xCO~rO4WCxicIlOB^)Vdn*?*S`g2>r;G`nqZU#^_ z473pS7{+HhcJs#a(4BuWPU$begZtix=m4PQ{HOtWQ1-l#NqFr;<98Lp7a?&n1NK-} z#y4WM-(VlGn>}R%z~^-tYm5{Dl>?n1fGZv8{s^V>_pl ze)WE|n#fIu1Hhv)m58TEtx_+~qO5o?q>ZuJLH6h(%kDnc`&Rr+%ePX+W-c@wRxPMw zxe0>G)iGx+WOf_sqi1K+Et4ru2l#T?6f z>Nm^S8mZXaMh(J1O?>GS(x)d@;?3mgT9kNnN*PsfU0?q0227~H z+TWMJMe|O`d*zEz^)@GNnOu@{3!R+@Kh!&%`0k988uNROR7m^?_WC}9^#==JY)AA? z!rZoinykM6YUZAsp^ebn)6kf3d@?Wbp2~E*0T?fyj7$i`{hTn08?UfN*V^wuM{I9#(pF5$hZ|0 zYg;2tD>TI}t+)XV<7T|K`E&S|4pHy5pWFqKp-i)UCeDK5VYN?i>XzCE8-=+?wR&4X7K==BhX z>UlE{>yr6gA;QVCk9ELa8=NF|eTg64#A}v`7oEm$$_nw;B^9!fYyk7S{$N>=8fKOE zv8E}PzvQV=4^C=w?+tzY^3goP#{0uM|7|Ze1BY5dUAJ84fJPM2TW%3}1MRCThcHR4(T79K4GhsHRNm)W}mH81m_`ZV(;DYn1?cI zNB5TAsz_uksK<31ce_yIG-aZE zHyND%29g=N<%i?q^JlStt zQ@zPuk~Wal+avKvZwzRGOmL?)kF-C2l-DtbNya^8tB4abU&((b%)Ni?8cI17*GXby zmIm>FlgIN}_^*9J(NAP9Nmk!EVL0yGRkBL+mGy%y$QO)q=h0O70fQ`BPn)ZDabCpp zF&?~qWCplDS(w}po8m%_;Eqy!L*!JOjoCN+)^AA!7b|0&RDC;u=|9ogL*Hf=6ZT6N zc=5v3tte!nZe9^VMU@vJtJ8M;c0c3Xs&fZNPjoPd7;hl%dPm*U109(I;`qb`@M<_c zsa=m}1@0R5N`|w+o4gMDFS>L>T17D8D;u9&vJ^I`_&y3V!k>Rrofu3mIvKh9ifNBR zakJ!>c-m&v6CtKLpF*Li5#P9$1H7eoJXzN^<$1)z&j?Q4oPr#A)?-V0qmpHC&^ZbE zd`K=2q9+9Qm^t~hU>tKcjmiTv4_4ZYURd!7%yk2SKeb7bWv(er-p6r2=)=I^1*-f^RWbdtZ;#xETEGT~C!a@+$I}_V zwO+z3cI)H2H%}VU2H4vRziB+jScU0D@_lb8jIn1d2nIhJxDtBf{V|LQ6shr2FtIeG z`oXfjdu|(L2%ow1TyJ2L&hw`CI6dOd^Mi$-cb9X%55?32aZ)S!=E7ctdQ(?47 zS=Gq$*9m#&+F&0nZ&P;Vc?k9S-zftbQCBhlAN^4i#Fn| zZqw(Xndltw<{acZ6_}zg#66f&R~r=`gk}ruSY|pm+eMSHR|7f3aaQ10C7Iu3@9=|l ziV1%xUXvtaYLQ@C=<}Li6}*tv?iI;+3|2lWw-p5RTbByeCJ-N)qh&Skq`4wT!Onaz zu)7PavD^j`T70p(2yrvLH27Y5cIC~6WhyG7cVirL+ma;ZW5FT{!7omR%dHBPnK}h? zb7m&@SY{YP{bF?DHKQ(6=2{~_Dzt1WQ<8&tb11U4u|i1Z#@v~Vda-NbkID8xrovvI z4tfRr6N`>*r5nrIgD$}fAcyT*-^pu5g3zlIp~aOSxcbDX42pHYl>6K@H~3%S(}_u^ zMBu^sXs+zIv@N?^iO>kPEE{dVdU=vGe}&>KIP86EmW=U7nb2kjRWdW0cDCw%vj@jc zpsX@H$Xnh4BqJF?4dS|T5Lc)%$AIhpOR~*OKN!ZN>KXS_yE8(+2iqZo5M{Rjq}1)z zS=>ScgjjMVzx%<wT40|Ng#9V(|Ay4OXk?WGjzTO&AS&K_-Z>Gg8Vj z7Kd7JCp2X5vlw5FJg+emEr%7|bLal`s(u#qJ!$=vcT^;@l^rI0wUfrkbhR!l<>e@w z&zFt9SNYTRf%S}V(A3n5Z53(h0!7>H0r*03t%IRW1hHmE4p9t zJq&v#QRFB2#7bkkP>WLWE`4B*Bku_uC`qOmU=wY}OI)Le{GI*2bd1@6T9XhrBOTan{&v zHfTP#`n66|guWq0m1Spm+(=-%in4inClt7gxp@AhL_@gInvvdi!#XDozP7B z6NG5RONEpYIr7fMR#DkI!e#lg&lT4A7rlTVBB_UwAc^62iC_x z1w;gBGC69HOLZ&qs%X#~rpI*2u=r?6Q32FUO@6 zPxsL_YktxXW~>n-XCL%nSi)rdlmRo!)=}Quj9Q-gh6V3qj&bBRAck6^z|KXvnpsSZ zB|gR)YP>o8++oUF5|nBm9?n;xbyEMXgPsSO-3oq^i>TdeOV=|*v~9)sViCD4ARC3( zfYJg&o*lKIQUMEU7dSQ8xREl|o6UBYvO%lm$s8L&PJ|}7jVWg5mrfsrS#~*v1i#ww z5Adqe>_1R+tr=P!W~Ib4hn`1=_*Z9+a7P-bLz>86^M+Wf3 z9Z39--@Ijd0ww&}>SdV%Et@xA@axjFmQXzIo$-8(*oS%}-9|z` z)RD+m5vIt>7t9D0M-ao<^3}@lYf2cF%!SuYOg@W?0w+W+KdtO`h2}byn2*%NEySiP z^rt#k(r|=+6`>q>j>dj?#4nIF^1M{YKdJ4u(A_4t9#uN9!c0bf9()LxehNG8Wov)0 z-_;s(yT#~ebWt>i5538Lkexf>i<$ITOhGDK1=7HDz*K7Hvvaw}73#Nd?FmZ_zClc- zXjf@UKP9+Z)=Uvxkxc1JEWIH@>&+hsuTvLhmzjAk9jo5ldWX8vu6@sdXW6kO%nznG zbYO!P82#%2>$8&6PuXQ9$+0gIw*ZEHMGvo!JtN{nb9E9{+e^*FhqBcT?+;~p7b5I+ z&GW%MC`#K_O}&3`A9lZmH|pUnf-i-=)4DD%{1b#DF->v0C@~uX30EB z3nah%mKJLc%ySdi=Q|xB+|@oJ8~9q7EijGT{07BGT_Aet`-v&fz*&Y_d}f7sddvG@ zXMqkZpLXt8%T(#i&|B@R=|VBaL4+hpq1n2KhhdVL*~ZHR39oh3EZ1~Z%_|oC^$TR( zlAyp;k-yvWStsTrV_di&ENf8lhK&B*5^VB~7sq^w3|>6us70J{NM30)NK3}h(Pam3 zjqnfN*xiXxX$+88(CkUE)d#u;ya>dbYgk6u z_c)9w@%$zbB{n6B%h8E2isrbBDWXPGjtSFx4$v|oQ;=0042APR%LFLS8-TYqiVgtg zwZ`+%@GAuGYT6-HSPZKc4p>kufC%I7C-Y&o1G86+(Qs<-rXcA{QcGJTGdz&u$#)KcTlTai`Imd%bRI+shxKB)f z#@|kW(~83`V?FmamZG3z0Z^e?H@syw*%seA0yQDlJL|w?xz6P9t+}4W#+cHO#+Z6;U`-?tMou*m6_k&KT;wVA)dA`bW&-ca8C6Iel3DcJn6+h(ld$REU z*-2)9-J$WikIOh3n0QPHiQ6#h=k_{$=QaL%O^&<`_Yr8WAWZfnL4y5!`J~p%kJy9~vtavoM+E;kczpk zeh;WPYywja4=%-Xk@W_N9^{lwy` z;=I}ECX{%q$%%v9cS@U3=&9)<(G`!_yZRw+nR~!y^tr@opNziAF2=d!F~3~q2E4QR z#`-mhGI`l@J!IMp|1<%Fq#Wa`g6~HX9gt(vA(HXjwj?RD&3rJT9K9_MF%wXJlUgML z?;&gTR(%1e4!j+Jks1=1*3a|d%6)@pNVuW{3Z&V=b$+k}q5wA)`4pm%DO@;D5_`hE zCEf12J*)mq*;&^Pi7-1_jzW?fGvv+EI`1jO9x}D$^B(xtHSd73<1aBXzA@aWp zfWuvQG$nPpSY%PsqFc|fNX!zZO8K}cVN;iMg`N+ z%5vzJN1$JaJ4=0d@E7!ks_H;lH3{fBOa&D(vvL4zy>G`jJ9mR4hc0%-o6Nnr? zo=RkOkKI|jddq-UOhKPHeP7HHL_Z64u4>{Sz!Ztjxstx<6py7a&O|ei6|Hna(w#K z2>rY+`k`850U(4Tszo`1s!p8d$(lhcDc;6P$FZ%+SMy-xK2)GK@eCH-)kRcjDN~;% z3X+@3uG!@`AUxve1$+ti2v>S2d!aowurqq?53(Hu!o$~!Z+`pT-zww%Hqi6_k4-Cc!)e9X)U1nxtAt*3#qVl5+C$F)D_9DX5J z3csc*ceIAeqa+UCz>2?zVYna?|oLKb-;vW*h`orNR5#lNHqfkoGrW@phXQnYy znQ?^DWD9%iM1_>kCSotlUJ;!Zq&(*&t)k(OcM0>U=;L5UJkPeH;~)X`aZTF? z*Z=84A!PNPA@bb&c*pI|=X&wUM^r7MLnt_s$mfNypDPWS0&A} z;W`5yhW9mU-xgD=X&IIidi}Ry^brrk920~}1Ih7;r67?oB!cgQ(G05PpZw5m!(L?x z*%_GkmV6lMM)j#Tl8O(MXqIWP2 z2`D8jp^@}sI4K`^cb@kB=}k%X8&6q=EkkDbsl?b;@Q3voZE&gK49vEHjnvFymvi-r z=lYkD>Uu{{yp8k|&Qj;S*33#1Xdi{9|C~*geMqA49x=jx&SpbOXH*<*pCUU?kwT)2 zUG$@8zs1Ih?CREo>-aI6zqi}j`VX=t*^9o9Un`<^hhR(#Rjr_U512xhX;hg4L&Qtb zU>frYDf~A1nN7dox=Q|#+5CzCmXKiu+agQJDAwGAunmceV6~(DIraJ&!RUw#?nMa+kg4)9u~Fi)X2_QBafjc3P&sV&Q;lZEtQ5~_ZT zH~MC)jNqDnfd`i$m%{s4-u6zgnncavyd}G;V>QivPs93i!vhuP^QTF3$^bMz_o}m; zY){pC{RIoMDjdyAzrY&WYOC~eHOiV6Wl0q*3$YK@uNkP~!7KeRFPwQpjf+gF*@G_h z+aWXRA!^aUrUpwR#^JvOg%q2yT8PKM-enz>LWH05*};y|AqY z{EEWf3!OCj;BSP{ftxt<`pJQ#V!Fu1wz29_6TsTMR=fxb3K>H5>s5RcG%def7kx=x zD^{;viLs6{PE;~GH<%pQ-Z(Q=GWEF1;Ik4Lm)A^ONsV|Cm)pR$TNJo|@K$w_aSte% z8*Pn!nnqn*Lmm>ao6miT&~a?C<348xt+5E%cf&KF;N|VFf){YhXOVdnROr1I6Jw%Y z?7bybta^N{gI*$#`WXu_-Bc2fpR}RLY*OmBYK58f3+=p)W*WBchfUJ@F`eniu^Ls7 z!#rN8%I2uYM58Ck`5-U4Z3Jrv_cMB}TTw2}(cY1LrjHCD{O5Qp4NWI;(|Z}$y#;^R z*a5rW`3?z=F-4z0o*fg6pryBO@WGv0hqqaX!mom%7()n`CF)M2m&QwIGYk&*n>OJ| z6-KGyw24gc)X45=h?w4#A*1g<^Ckq1{??!7R0Lh9-@F$(Gv7&nK)vI=^bm~I4wA|R z{WZv`euonwad)LG2vV$XLXkF3!B0wp88Ti)7kd>*Q18kTB}_Fix7kuoW zQ8RirXC&m2@?(~Rr2S76ZUK`fxrpshP92^c*wX}Rdsh4z4|9>8{>+Y*5`MKrhCFG4mL_a7rNi!&Gl=( z6WWZtVhd8}-%RJIr`ms}*zLkex<>pySqdii7;`LL3uB9U{BAx=kqDgr$mn4&X%!{t zXD1)$(lHbc6;ix|*#Zkzdd)dF;#e*<0T=Q-?X;Oq>2PqR@{0Zey( zCHNYQ<$_Pcb=wmP1>I9EdQBG`)nHoqfvth$X}(jJ>78==kd8)iF-P4;#t+S1Ljn}U zBIkY#Wn1>oBR9s66oRG-2KT6N27=-R5yol5B*J~a(0dZMR-Ug&=+B*gZ*&1wie=oY zviftF8LjiOdFFIB-leoop9iWtt(q|4ozLBkY295zdaRTQTd@5U)sdUi9&jAPGoy4V z74dfgvm@otSnUo-R(D$ZFr|{)nGjgA&=ww3ksV98=+`^OZ}Y%KXruJrORq&41UvY%!KuY^=FTlyZdvK zM_qFQo4A~mR#y3-!l|<@;6B`+3221ZV38w?eF4s5P*Q@wbm{ zwdPJsl8ms~IpxM>?}N;`fEoSpQx1pBx5TIc2>LUt3h*w4f@1snCj1xM)#@=%uzGkz zwN5UQH4&AuXP~?(t4*vSs|pl*-2O>zXf9#t7Nw=b4h!OGv&2;aEoJ^5R_%r6xAmQn z9P!1*5w_8=GbWEM3((Oqhs_@nh$NDN{;g_9Lv)*SiWGh~D2;X_cNUvf@xT&idi@Ez z1~wgqpm;M+5`$rIX2*d`H|kaHi$YoN`Ik`pi_VR)Is`qBjb~TF6WC|5n_~Br3f0M0 zI{hBnt8BTk)nD@*YQtw~m%vE1dUt*1I%YTzlaBh$hQ}QKcr)0muS_08c5$!dudc`C zavBc16D*rLZ(fJ^4?G-b_w!w>W`DR zrkHugMyobK--O1`7P8y;h7wJ0pGa0{CMN|mC>*(}mCNep@J`cx%RF4kTV9f7R z`iON#HO4=z$H6}KxF%=N20yy%-vYOvRf3vXG-*P!3;B(IK~9Q(Q$^An-gu}NY=xlT zVEHat{v|N#E6`C<3>+jhZHmaoXfXY2jpY9YOMjJ2ZbR6TyVzYDE+BpC5Er~T2tvf= zg+xbl5Gfl&yd^JP(Yx!bhF$c}02c?!A0QJ3uz0@H#>@qYy!Jkq@!7Zl^6v_;Pi)^; z&i|lt{N;xH^RDC)fdCv7_rAOs09HoHPXI@1VStw7tk*1P#t@Ug1n_&B>b-PUv$a|k zD=4hyi6Hm`H8QYA_VnCjYiiS-`yLSPLT9pvnu?w}ux@#?{ zc99G;6(%(hFVcN*x9kYS{Ioi+cb_E}RR5t2bIr`tH|)tR&$cJ_!96M%xrBaWxAxM$UfqjPa~yk0Y= z8^Bx->~@knYDOOqOa*^UP;$32lHqh>>%U1z<=IV}k zJRG=U9s2EH8DH&il_uIOsg5HXy&&N5x ze`oJcN{nK@#mM2m57wVCQ)rs|aG<4_@F+1c7FaTUHQ2%T*xG8q z_JO3FnLyL`ZK3tK-ytD3CeNE>u56Ivln#irWB0f&a{7E3*M0O8BZ#?gYGd%%;L)F^ z@$csfn?XFnFYCfjm0nXSHnExjrB%pm)Bzo}IzTun=g9a^dY%qyCkQY?@2E5MLKzdZ zdJ+wr1nmC=RB{dGcSSP%`=|f)CBL9TEXmSqn5u=qZLQ0?N$NMD>{aFO z#DDwV!bqUJs*&4_>|v)^>6nkmnh^?GLYI00hh8;UnBqb zuX8B@^flLrFD&SsGWYL%QhGK@XvQI@hNhIC5Ls_=AbLhx2O?dI)AG{&o<2A;4u&>xS&h2VgBfbmsm8WSPnc zCIxt9S)^Bo{|=djA43m8N~}K39|FL{{9!^>%kKyFii42=5O6`Q_doeM|MTylqJ%zy zvWnkqi0$8|Lip#7Om#+9Vf`EL_nCGI(0OZ|>d^4}C)je3ex9H~D>&LU|KqCub)5J?(}`Ec=Pm?q z1sz!xE`JQA8}iScxUwsHRQh|B{I}Eop9S&9f%ngX__aR%IU#;;*?$(qKMUfI!{O(- z{Lg~;|L%e~X|p&25{}~K$BS|N?%Dvlr~?XHu{)TGVJ(L@-L^sW8yo5rLYhzou$S>q z^8|bO9_OYiK-|$}!rn!XYUc;QPGOwA1g=a2ptK24ekr>9bJp#C$&x&8DO=+EYf9(e z!%?2IkV%VKx7eiy+OjZ@Y9$EyzQ4KVJZuYymFT9qg<_*lO9>4Cjy7X6#%M7Os9CcG z4Or;Fc{AbxHKF5V=Kyd<2I+Mc0N};@1pD#q^Ani+4q$AN$2%>;XF(5uyJMTQCP%o# zkeecSezWE;W2aDP5cyB@>_5!~Pw$^V@%O2vCV&YlHs9x1fld}5Wh^4u05)@bLip!`J7)C3H+yF zrC6N-WXU;XUa-tBfre8M%oh?^H0P!LVfC8&mi2GjZH98_YX?_2Rdzs>R@Mgq>z1Hn#+LPCR z+D>;5sk+X8=_CBt_w~&9Ij+B1OVMk$M)*PN&_gGnZtC+Ci#ILCBp3%y2+vmE0QKHm zaWiMMfa}CO`|Tzf#%gY{tO}^OZ4e_i!v{Xw1D$PiKNzIS{5?9N2g+E?0)8bHXx}IE zN6sOrJ8Hrk#_@oFq~!pj(|{|@grj*>PtY74(86d}3G_Yd)1x)j23D5AgVu zS83w7a9@j8r-pmlQLh{-N^~qCkj@@U6V#WB>YUZI0! z*hY2cZ(J|W>(Er*ncQ)#0p$kQYBw4EU~An_krQR1ArP^}_91m%e*dT%Xo~pD$B}{z zJ!<}L1B6v90GL%DQG#>jXL(?40YUg<%Ev~a3jzi71SpbAB4YG{8HSx2am3$e3M??7 z=UxJIknRzv8YC_S-Emth%5|0J?n8X%pw1q&LR9iW= z@K4JN7}_$11w&BKJKvfQn$_eahMfU+h17o9X=!g^?pTyS<9TjePo}|-9`5IVumGU= z28aP*5~y2x`oS0id%(fsNd!4Re4urcTiwd#D2b{Eb42rCDOmg#>J$FD9imwp3s+f{ zZH5k8^;eaeu0vui-gSaUMx*;o|E+-M(<^bmmeJ3g0wcx$-HuND4~c*F!=TlcO^ho4yGeP_hynS=iVDTf(D| zPWUKgVP#vyW1&k({{-|-=M(zAQCS37!?glHb$m}JFpC;K=1RD?8$Rxf&XD{ykO0a@ zZhvsI2OVyL!l_&Kpo3Wq>!jPE7VnOh>-H8x&ZDvhJus%RClJ=?D*<#=46LjTe|%Jw z<)xVfO_e%;kcM&do~7_9XE-RRyhbfE1!xj`sz2x!A~Uhl94%L$wO zdSL0Y?4iaBk;*KkExrnY7)|ujf$<`|=X(PI$e9p77wVOpHI{QxOUB~rtvz42AfQr$ zx!gz=hyX&#%@QUB=P8N7VMaGlxoFo z(Am*&OxX`;)e~T!TNS$GKQi(un9h(RUC9GlFwbR`GyZedxTM}ZzB+xr;czny-tMI` z3KpUw#+?FyK#ZPYaews;>D7B3+K7@{Hq;-NfrdNl4Kj%t=_KqEr@0u6EK86MP5Z<= z7mrbC3A*`M*j8bc-;-$Tg-t(kh?rL|5J zw!NU$;;Bzs6fbl(i|qphuD`^%o3)TQ#BX_pH#SNp>L&nZZf@(>SDs*t3LSmJ_Lu)a z8004p@3#iGj1PoH^hC^zVj1Mv`GX2HJ)n6_e?XUjyUFTtEX@Pd>>HrYfGq$66k_9e zp+{E1&7Ak19hQ2s#(wngqZ|b%>E+)*BreCpk=o8 zrx!o%HMU~tqA;{RO&`FqYWaNVb)IxsH=7Tm8j+G6KipdKW=<+|cj>!4ZMpP%`4aV! z7T;RDWfSYt?fm?TZ&I@{o9BiquiM(DREIQGW#odLCJyUUv4u1TU6z#1`AR-_)|j|E z9tPB^ufVghC$sELMwYY9vfISCBs zdEyxr>idxnYtUH_p}ruMpMWw#qc>M?5R$(+qV(#6$H*A?(L~X^%U%-i?alxkuD_#} z`VvIGZX{*}jZaW$mVmWx!!G|N`9q>;GC;0*1ZvLTApMN7RFwi#ga;{ymIG=4nZ-*w z5-BvKUdk<~M{CM@0u*x${a+h#L=7}1N!-c|kj8V$q2>SwlSWe(4B0?ZiPD%M3edAz z)Pb(jtO2Wws^j!-qH=ZTvV>x`B1~WHbzzhL+A5vkwx1Pe)BIuG<+-j@1*ioSs0PTp z*ez0_55oJ2ht+i7E5Vt1yFvB>G*>W%#S*&jWTgf(hSjx`odE#1rhY8ob4G0&Lh-sq zR1k&=21j-@mJnV1{+EvW6gd^1doII*Izju&YmQqVUiD3`ZKge0C57IlwagZ?2=+<~>R;syZ09!-4U)ku4TQv2B(aNwl-l7#K; zL2VB;*Y>nHs@fo-rOuQiaGG*ul z1OID~>>OCoCE{!(Xq?xcYO&Vk}-!<@}BS2Mvi`B2+6}_S4jd zX}m#J$5r9=v24LkT^UjZ+lrTaCxrUth1GUff=s8J5MIZrroBS>L6MM;OquF^*R3DQ z`;$$kEEkH7m!w*(QDbg(pOFSW@89?EI3sJqw>ytoJ-C?nICW9c@9S>3+WA;^A=7Ppdaj@?RWZTU1r5cR~^ zZHtJBz!$gDUG6BWUSK8>at7q__lk0lK#OiLUoF(B^yBvTl!*7kl~Ukx0rhD$i$qCS z*ps`Kjt8=<-cRdx{1dgvDrS8)?W`TYPm9+#zs$p#wrsTFXYtt2w?Gv-9=@%!F|^z8 z*`u1DsiIR?=QE}cxAofvHwjAbFqYe!?AA4a;e=4V0xMXFK`Kmw9!ZotlQnTO~`m zqz@r4UgfnO$O$Vl+e59Yd@)jpIGVE?%&KdY|w~ZKQ*CA(;#hJ7F34(65_v5>` zG>SFn!wr%+joyWqB}TK}`HEzzVffVdQ^i9{FV0V^RP(EMq@t*AUe^#DJBabVf&^#2 z1r*3%-H*d*jp*UjZVn_Websfh4793)S4}kMDLSH`an0kK(0$Cw!BFYg7Dlu2#0|*O zmG3hQ&4G@R*I!JAtQiQ4&8W@aA|>PZrs8saFrIG?vOnJ+sS3osb`#51l@r*;liEPADeZhx05b7%n9_g7Uc6a9}#n#$5-L-AANr}C8L`AWHK6POLU~S z?!8Nzd$oQ0D)KF1a{a5<&*&SHyxBFX9SbMaywGk>s;ud}=F1`OgQ4qJZbvMc9XJGh z?%YUUo4r&w8d`ncc{n>!Y8MwowBvEGlbSR!%-qJQJItRPyYE(BJY=jwGhq*i6z|Sc zd*TkJ-miaqI>zXTSE=O^VOO=-%2eDfxJ7o*aw22DL&Lm2cd=g7IS{g)T3d|c;HK?i zJ|1tDNE>h8G&`KC^>VYTV7++B>9L%fEMaJgc~xG}`ihTiVAttIv6KDCbv+n7Qz3HE zY;}TJE-8_@7~d0?-53*m1qp@x&A)tEt40Edp-AAFb*Pn@o2`^dE8SsI(KZ9GQOt!a zb%uV){Ib-xM<1Jijm-t1!^4<2GLH9Sxs2z+n2&CsBaT%C1%;)k+Ky7&j#dwZ=2tbq zRZ*yqxjnF3TwUibh$DQ()6p~QBxJ4(?l*&~-`*mB$jNT(8+QZqZh5Epv5HJ00V-~5 zS{!E3%}*)Bm_p=|k6~!{6h4G`dvut7ebFmSYjy}XOe~ZPryVoSOjz`GP_)nNPnVtm zR`9ZSg(6AhSt&!Aa0XqHYd^Sd_{%o8xnE9{#hz`l)*jWT*W}8ldNZUd7NrbE;?c== zDvM?4uj<`}#zFW3nQJe$SzmeUwF(@bQi;=5B1~(*>3p8eI^~(KlAdcodwVP(x#tWsSv(aiAGE)( zNLh+$pj-K|Ln4mTz~x3uX(ow2^Z2Hr%g`sIfW_Prg3E3A%N~{{`@$-*B(tEGBYwIp3;tI`IH)dovcG>4sTDsx_r6BczW`V_hA3jX3|;B!NiCglYhuftIj@E=46ZR zWvx-rL>_ITH9|+}@J)_Vs_b>sQCAnGtQQ@_s`>VERpdF0F6*;zKOSr!9QFjonH~IS zdWd+Jv^F8PSZSB&(!f6aMcMRl>M}r>R_m=CSoK$+rT>>No{m>B=?;55E(Z2VR+>Bv zgcMZEEp?c9-+D(3^jc^8bMU(Dw9&DA`xdQb?s1{qy8yBKRi1^NEJNhn=W!0K)#jrG z-}oFhUWW*tWPJiZp=cgRghKwI4@rKX%z&$?Y!{j1y1=#J&o2!XGiB|h8FExSAL~R{ z-{3GCFKNT1$<(H`TVo8;-JWaG*d3fb1(GEVZpzxB-XYRVazf`N3{XlT}u3&HUhW z1@)YS?W@|?ZeSFEfJ8_BhM)lyV5oXcuCL$zqyZZYh_(+3eT;E?1cUiR5HWYD^+Nk? z6aHUICL^fs(zq<)T$kxhtB?`eL%vb;J0^oEQ4e;I988Au?{%pB81cJQ|6-e<(YGi` z(3qN>yy|1y_VE3rp~Z#vyL_jCh>GlvbmsMxiHq*UG$-tR(j}#_F=BTXt5Lq|m>SNF z&j?WLY@@HORkl<%K1^c#AZb=vw60ic+@LkQIQUMTHeDltAb>fOwZX!p2NOMW6T5o4 z;qJpv+4*^$38kHRj}WSdZeMMtVBb`?7Y3|2UvCXf3>XUSBW{lssTvFAZ|=ksQ|2Ss zPe)0590IiBKQ0s*ZC(4fWdQ!!s_qGTQ)5nQ0M_{?fh(8$nWN7~o#m7LRf2bL0jDB} zq`YwmGVi(<^lXJ_R$6&A2Wl=rPGItuth)V%+pP{`mfK$B zEaA77*sUtPta1K=-qSi;Skc@QhW4!T{9r=H9ANH( zNkEvcuq&rQ1!t7Z{pcgjD=mes$hQStSe8IC_4D&=1#@2JRCc?_$5LLxv@Kt?z^U>T ziy%hGqn7v;OJFWce#-Zi8hNBhTU z=lr8B`DY?^4r?{hwGQ8;scOsH8I@#6Roo9n^DAGAqtQDXEbc3%{KzxE9ZmM2Gm2S# z{;j9CyRB*|IsFTT-Vbkm7+*|GC7xH7)fr3QZv9~>pfHgXZ|N1uPge*UTgylt+K`hoA`4BH?tf$La4>r^zdyC1>cH0NJ2S z2GcPAlY94{XK7#8(4^`$!Y7ObyLQlIXgslEQbywFlU_?OOF*4iKZtfXOisRKNh&~f zrv$f@EP2jFDr|}N1H*Tsqdbn zueQg21BS!;Qj&-L)57f9B3cHQFs&WD)-(exm-PprnB;KM1b;96Yl=RN zkXbwP2g!+J(C^Y2Qf@w+3m^KV+_QeThZr!Mu6AP4mj0#$e!(GERXU2P5a>|Mhwxb zQya(D;~rDe8r69^loYv8tQfLrfBY3oHABO0%@VM682QhR&es=bGY#Pcm-Fd9LdDT! z$CEM&TfuJ~hjY)Sx-BkZ;_SguQ1e=vu7wr%wAT69IZnu?;&kfBx3W+>^SLLCp!A+@ z-GxIaZ5pGl&38@kJ&GW#*m%WTZc_ytpJizHqui@4}SS5juE` z#4X>POM0DRqQh|Ej5j{6bB%r(vf}CVFbqbt@*Dx>5HR1R&&G-jG;XAWD}OYYcae}_ zAwD-T13@b5{%VI=ob&bN`2MM&tY!`ysN2yK!2tcitzhuO2SNAo-nH&ziN2 zGenavx|^VU$-}%crsZK?SbTEN*zoXCdw$fqP5(`swT*z5N(7pt!uNq(3y;D$S(k4z zt5%A{{56K3UUw{TQK*uKb1>QQYZtuCE#wxNe*C$}@Z;VH?|H!Whjw#Fhr2^#+$wET zrP$ZvM}%qDF9le?nt+S_U`Eu`?3mTGTFBJwTkh?HrHpm#BozIfFUKPPIkmSWXp@)1 z>Ml+`xzy%dp{^Osw+0q?^U0y$@ejPJ<&=QQJ&LE^qacQ`TuXPl3aW?fQ{#-LL0sXp zh##&}@521MR9cx>{mA>uvZcn{pMk}gx2ecl9ZXVn?xg)VTCRfq6|k|y(7`bt(bqcN zjn|65g>h7Oc`8%}qS5zoEZb5PHMr^S(%H|}du14{GQP-(>6Z|@9TN$o%zbEl8L=ep+yScqprt_lAP#Jz;G<44Ay!)5MhP zaQ^8-q}HzMr_}=Ue9^a!kLSMF8?Sye|E7s;Uo>C&K(ZFsVr4E#S+%EhVg|WtZe#xQ zyi?cz!`^#FMU{0?fP!EsMNvTnM8QM`EfEAHiHPJ3l0_(Tkf?w}6%-{XNkB3bIp>Tb zN=9-95y=!e$2pJI?$58od^2li&6>6PPd9eUt5^5Ed(J+4?{jXikB#@DLoKuAM%C36 z+n#m$Kq>a~%G52rVVM=1V@(Qck4xWAhTHr>E8;F-VrWCGTuwPI%l-hX*OEZk)P#J{f=L#=%Yb zorgHSMkyQ8v*b=0ZAS8K-}VOC^>;LR%{bnvA*HX7D{INq(=5b=tEUJRIp8X;$l)?5 zw{ZcsUo}USD@Jl;S;CEPX98%xGhzARfReg$__CSG)vl;6Z0I9L%bt|F<$L43_(2*@ z6JnIMGoMYVE{c)n?LFGlvmw`G*qWf9Ln)t8vXWx#J+SEIa9P)*Em5;8Z1p(+5SOcX zKflEvV6=)FkH@~Xc7p-Nu^4&Tr@j({pITykQ{GSu-E{qzoaUkNxv2a%~V*^qX-;XZ_O!HhNN2Ilz*) zp;iJJ$VyxM)*hEvWJqXgiL6H6+yhA!Z1=9l|16=x`0sWM$D7`|O7An?_L;UjUf@Kp z?Z&JVOQyq-vYUGu1ChEm7$y;5hAT!4vKkqV*)L zzZAv+sTtbOK$ttAI6#JEF(@}RKN?l}NgXnXl4o)qA<7AvZK0k(y?9Mgrx{qL9B1-m7 zfYwGe5B!qj`v=|6nkFfxSOkUcJ9=g+k<@Cf+LyKmIJd!eYj9t7g8cBtcwu?So3HyI z?YpldJhSC{+aVsWltk3h_MJL$jGualFlvIY#!4SQ2tN!@%lhp;<9%&E?y~&HzSh4) zh<4c8K3z2W1~=3aZn@QDqdU{7qriAz0}#YqJnH zixwY~M#nyGMOp~Hx*EL`2UQEca~Rpx@!EV|=tJ^b@gz|Y$HPxfDZzQHaVy58A)!#P z`R#<5X4d>4kTgb)`fqoOc<*uFBf{a9>s@8dIaAsSGvl*O^YI(TweIciy=jwJZT}%5fudB+OBfOrn0HRc<8KCfpZK}qF$R& z6t_KNwz?%%wER)eq`Fu$;qj(2RY}7yAo(&JxXO?1 z3FmGJ&P$kS%uMSK(O%Ig*&er;p4IFRP_2Jo}l>3z)%WyX0r-{cZO1I?9*ckd$<^JPa z1qN9T99m&SXJ^A|AH>x3rEzx`s&75qM@z`5?$~-+&L-AF;bC5na99u~zR)^}qmxIVKsewICLnhTDrX-l|8DGm~~3f*fdWqF&^!w)SNIsnW*DH)u) z-rDZDU6ffbmnwm}P-y*e94l28&wSLDJnCefhE|ah zor!meeTG8n_QQ~D)=>_p)|>=6Z(WVAZ379VN{@oVSmw~Y3HpzU_itN=RZ9)0@#Wx%yGS_Ii?Q=9nOpI&7+ZmkzknRI2w^1w-s zxuaoDWzKP0U2tR&JDGEgC~|tM@pX=^_SpxaT-KRT)#kqvezK3qqKq^<+o0uA5e)S) zSsZIhG%T@S$t`u*D4f~WBvf|<%YJ)-r5;(je2U67O0>@NYi9ku_CXKGR0}L(L6g8N zga4zbK7lGlWh)d<{luZd;VeU} z@lT=I2nyld?pS0RHS;f7PB+Y9?DVKC>zc1LGU;hI$ylS+Y;IBlI{2QKjWHyJDno>2Sh6Oh&u zpXkq^{$a$nqLf}*^kNtBqXhgQd8cpOSvW1$1ETNmq9U5Pk~$LZiH)Y@u4M%jiHmo) z*H=j8oy0A-ol~y4M*Av#?P_3=0mgTu?NvYgSau;#DM(1=c@xAO%CVo`CUk^UDR`;5?&30mMkkvOwjzK-jE3<;CYo_+U9G2DmM5#ne%yIjgDi!A51jiIxPnp58*63!9FYjAz@4i{H4O|D& z_Jx&%at6XHIh?qA9P(!LDJin8_(nBM$VmUypf(`IMt$`474I_~ zIT+^C22Rt~Ti0@*+WMIsVMQS!+31>v_|@ z%=(j?`5$T(7n7Lh&?mQY*N^tJP#T&@ncZc>kR{4+*rrQ;dr^j2P}~@fQ&`R-Yt3%1 z9h0{ls8P(*B25}3JY=As-|L~#ElcSboLg5LC0}RQnxtcIKPlZFy?GMX!)mG2)oUPD zGC0?+Txr;^YACUs$wid-y|Bj9X%izhYVV?~VK-HBV=v}~2P;LCxrFI}tOi{rg&)H?~b_yO0-V8xwJbFsE!xefI+dbiAMYaxW zI!5NAioJUc-y=D|(=_djZBLzaH4KOE#L$3p^FSH|*kd2$7gxVto z_j5xGJ)yV2EkS^qH)E2pd98a=%SF>^tIe-cA3B+G?UoFa)QfV98pg^NY>7(0SWmzy zr@7&d>(%OdRu0W}^C~EKJvRZ`)5y`tlXOz>Md7 z=6TczqTF~=T&n>+A~aCwzBS5jhD`MsoNt1l@k}a)D9Up{3Ar5n8$izK^Wwy*U!m?- zGZ!E*RDrLULXH<0I5AY3kY)2FLI7$0uawx@NW#~fF5NJt(P@fYLU;_}Ggz%Yj zzFChucJ?#A)oXaisf^v=Q^_&JfJexAl5IJz(kZbIG4~lik6g8d+Mx(J(6znjp;?c0 z$7UH@lyxbX(U!kHIa+vRb=8FK`FP#c#%vh>dbPuu(TS7L4^qvit;fJd84oyQ9mSjO zAev7&vMt71(h6L7ph<>$aiAiIrl%)6(lo>HTQ*5wkzf7996ew$)svUT_p*`g7~NP| z23waz@C(R%B;+ox{glJj!kZf}P^1iQt(cdd6mW5>FR8X+)<`~(`|1+SA1KyG8NWuS6#!2l z=8k=8@+oMHOE-uQ@5<6Esv{3hrG7hD;SO&aZt<$(;!Xg}vJ5SO0Y9d}uFsBeekbk$ z#8GyL}dO_zn|7t4;S66)}kh$JO0Z(dY@`btq)kEbV2EdPO$$**gzHww`h& zSQ~KoM%h%%a(Slefz<}{->a4Jy-0eawOr;^H5}J4MKIg_{!7Lu&%5Wrn9=D*)Z>1b z52pE>lsn^PaB(^mfX!*Dl1$S|0mbMuzR<{*2dv?Z_A`VL<9Ab)vp!)G*P&SHUH;B( zGj+GcN4&s4+-bW@l6OsKA@HIPJx4|qM_I(qCy)L!P3HipMd%+QS?s5)>gQRgyJ`c^ zup8!HPP;ZNWEu<1Y|Up9O+2MVR{W8@&lw|x!Zb(y_4|5I=Nnu9YkUGU?v6t)96R-s zVJ#oPhcjusJx^WvATib)`*M|e`ndHwgV8MS9aj_fCri?I#H4%(AEjxi=wiE|C3xMmpB z67aMVj?@2R+gkdh?aL|tPBr)8D;8lE+s%a8@MceJrJ=uWsWhA$$ zecd>lFWZH%o1ig~Z=T@?Y(_a>#-ucVabn0+w86gfSeBrQ-ky_D#}BeN&KSG^@g`Y+ z`dG?MC{a9ekqF^BrQVUM4s(IZau95d9KL*mSp{D58zxUhBX>1}?jteP9tU+$k0L%y zTqf!~ocN;zbEYM3x8_8|TUc`)pphnB91GD#lmR;sC{&>BOW|QB>5c8#NPA7Jw=` z!9g-s+8A{8vlrj?qm`|1FIjWJc-IENOzb@?xaG=H#DmZ*)YUWka^;?`FXc5rVl>9P zxozinMYLoz5$o&Bws zfCF5jn5DniM^oF!i3b+0G?#RyYgNo=>my+z`xwJB1|&?xbHColNDE;?;2*-oudE_k zl^>58Wi0dJD6yz~6R{~puDB4n=jPYw)vuvI!8c(D@2Dx34NX?+9h!G%m-$lPnjj~) zudR4{eG<#h=)d|(8dWUI9uKMJbLO!EQFAByLvLIk$dfq7@+VUd!!d@LN2s{+g%B#J zC0yrXsm6VqgcQ}hZq~BRH<&BdyoRSv`F{X*+5M<9ukt#SKSf96N2i(YT(39FrY0;6^RzoyXJ6qbrFLvtyJ#X!f27W1ns*AH^1G_ z80g00r^w3^(TwU|S`!mcLWMO;n*q+URQ7)(FUBb%z_;!5kV0b`oPVOqE9HBSW&?AU zAGt#Ez+X;=xCL~ouZc(`RAYOp4jU8){$hy&1E>5DQGbR?FNgaWOzQe~Un#ZAEs&3< zbx&0J#rvHpi(cgjICDJvIPBBsw<97}Zrhp+7g|sDE@?EbUVAkS`2BU9&>_2-z&KB7 zdU*s{-|TzAc9#>%n4_|Hsjzq<0@jeWkf1k9@S%`J*!sLE^@+GEzvr9X%)@VrkE&~$ zwOkmfx2*6-m=MfplLe36Vmd-g5uP)+o+U37stdZjc~%;zyOSW6B_?)Zjh+WIgmU*l z#x#JeVTH$@;3m=XA+Zc<>6S0_s82HX3T%hfff4Fmp>`so;%WsqJ5AnmH~*Gd#6lnl z9+NuEbI2?5iH4?jTKmz%`58O)r?2XY*YO8Y`n{*gpt~pTq79#x2lCVBnn2c>M2KK? zISZRd*3FDZyDXOpkO=nJg>Krj)v(W3KVFIOF5{QN%VLr%j?W6H+Wq;EHJR@y4Ar9t z!tqS)UzZzx{FfxPf2`AwTFK=d0f}D=;GGRHN2=!_+uS;Mt#-8{h`xLbj93e_dK+q4 zx}NaG>m+_6j;@IdArXi7c5m1CGpgUdNVp&BR|e&_&TNpD8{tJfzLCNTE$T1TVUVaY zc6jM?$x6RbLH0XS{JG=P7-jHxLY3O#x5dhg9m${quoFe*gAx=DOsqrb{5)2&0H ze6HMOFYcXX!yGNy>eW2^GJG>SPdTWDp#aRd3nqxey5>N`@& zTFP%oaoRy>OfM6mKne7SOc%LTLBdkY6zXNea0YW(C$^=icJQu`Mf)wWolkQS2cwr& zSNxk4aY4KhzfjRyI$y<|?JX0~8BIw^85OfZ_*1S8V9rXG?U5Os1Zn!aYiaht+%tac zBhSSh4Id}%@v@aEJov7}K>DxTo?})VsRp!FG-zD5`t48>0D;Y^#}18?C7Pv*4L5&_ z=aKAOL`t_|DW9DD-Z;uW^CO}2B?nQ`{1awcHo~rCXVc%o`UjX8ODoYLT039 z-Bnv=7}JWIP4fr$IVlE65i*0ABp?ptrOg7wtg~dRey1M!V%|SJyS~$h)MhtKl% z>ejs-G(-+-Hyv2i27$I61huCZ^LFHyVPI_dO3uL zPUcU^ZO_jw43&*u^AQoagBlZ6Wb=FF<|m@qo~CIAy(VuB;;-|?PXchvh0A{?Y6{GM zgi6(9SukC-*85`;Hvno(}*J_nJ^TljyDWX`M+bz-Ps8RC~UFnIeu9F`Wm zG}*z5ne}ork{gLMY)cH{dN1p*oTaNACmGsnOjxG|#amZmLpa|6lJWqe28YDGxlmii~9qH2py_WyuOP!74~`NQfL_|~ zr4lCG$g9}2J`j*GVQJRn*%rgmOa@~`I+ZiT%nFHqB|w&72iJ}t0>SXy_zHJ2yl1om zFA=}oECFhvpH6|1^d8Jh>x)K+#e~FRE*`!W$AVNpR3sv)lB|1?%n=a-jlbvFU(@&m zXmg7H5+CmHlfO(YoM2GRe-OD>1{;O=#o14*F~mZ9R2Ph#AZ1j}j8PR%)M_BPVFi_E ze%lRbSTKECxN6Pt=(Y=mm;fES~gLt8AyL&rB#vC?DO+*mO!W(TeE?bB>IRZQPh@$&KK-AUH~DVH2f~kZ_TKoK zY*Rh($m6%lNS)+rNC!N!$28q1H)bOCs4Vv z*k?M!AmL?$HT->jGcVmK#<({f{MdKxudmO*0RZL|)dq#GP2juqtK`Zk-RU{1Gw(FI zB==qg)g47*;<5>dwcB23au>1EOP^Y~&4~*-d%8bDV6Qzmb1V{rEi?qCw`5cO$Y1Z) zSzSj+n~09V5|#h&OQipn1MpUDL%d8h6j8diw}XJHf<4pFrnK)O5n*659q}DJfttIE zKrVhtOx7&x_u^T;D@W|_W(<8J9mycWWUO&I$k6s`xl@fK>fhno5>fcZP3k{*2T#tH zxyHf@c&l!xOndbbnIutT%{CsSjJjY+RHzwT-Nc==q4s?YX;z$!80(w}i`AP`IiMjK zE*8j=Gh7=uDqjg^LF1l$^XNlgCi+W?l8T_aP8F$y)VzYY6(gv3KG_)8b|J*QPZ&O7 z2}g}d+D!3+Bt*SYq`4)R*J1s;BG34yYwyNIb($0BNfFMfIh4Vb@;n0W|Aw{p2J#Shzz zqLE=KUA-T;Ww5zA$MU5*JTR~kQftwkXuG9}pa52xs9U*}+1}9S_lA;PN2Y^(*L%t(wI5#^_e%A-Bl@+hzg z)FSziLlaLDCBMGZp_y{?8EP3SQQhkNMd0Ov@t?@^@s`u)&R@_BW;cPTrC@0ZmUL}U z{wxPnbB)I{iE&^{&xmE~g;RR^bO#1J!Wra^v;R{X7xT$|qlYN(%exF+b> z3nV+fo)SOSe*nSxlK*RV1eN2-{-e2Y0>e4t56{Rn^tU!v8Z%$Hz9zXm7zhEP6DkX1 zaL}2)!H-3}^npRuY0-_T>P7n+d`QBNiByz^TDL1_@Lx=kBYy#_Hk_MsSR^sJIYEw= zZ0x(^_n|Z>5}UJUAceemLtXVTsBj}{j}bZ1 z150NbQjgYruY@qe0R{<G?gj#ZHm8)5AjnW%E->Z8BN&0+HmyHv)|+quYp5Xea7MBjH-@w zX9D!_qvy?zSl4OP5a1)h^u65j_u%ibbjsnSptkG8AYOVNy4mKGb?t(_BnC`V?DosX zaw9jk@{|RzHHt0qGUtJYw~>4q?8?7Ht3a=q{I>SeTSG^UxLTyog56==O3pc@JB~(X zrN@jIdwQk!TnyRvoUJQs{NfnM022>}1;!)4&hf zEL>-jiF(=xQxj|;c72wTT;J-_3(o;Xnzhy^yoNa5SRASqOQ+39Dacwl*Gx77212NP zt0a&TuD3fQs}bRmjve`Hy7?-PkBC_X6Y%Ri-@jbmL-K2_3)k7Ldg*SsK)mWMw#^EK zRv&hVKXQAd!8Vm5?0rTtQ>XfFG*n#3-pzV_UbxU$0vr!HpoG*f1K)g?%HhRP9mGSO zf|OPxj4cC@>WxS0g0PW7OH49CF5(nug^J;ej7XFfbTSA-<4>%BN$4KXmYxbq>Hcn~ zwxExF+)bq|O9T@rJHmjN{d|0pV8@w5b7BO+9CUwYUO812v;PR380G4DhNl}^S%~c! z6M><&0ncH+RSW1!-87?lXB5XGMIrX$z#ra8V{#`)CU!eOwI|mE2i&8i0(0#mOslBc z-dvDEkS-2R;j2ccU3OA~HY*mPH5eN(>e`I5?6Xzw0G<+qFo-x{0;XvcH3I1GQ1NUw z3ueE6vR@Ux;Gs;0fd8VJkrlp4N;k!iog4bB3Py7EkeRX_M{W=jBJagF(8y{6~TN|`XWc9B7`A=;fgbZBMpyb z%k~&&%7noV9m1|jBGGWT)lK}ZFucFfr~mr>1&eyiS*OjxGZz5uAD!N01_=S4MSZM= zMwz3-)VorMUO1Q&=(*)JQ5)^eYq)L+#X%?V2#2zjOZ=B%&AI`;hm4j-zhjTjt3af* z(Kz>8w)BrMU)_Gr0wAJbONY=|i-36ii1|!$$BEORzvY4zDum78jY6s#CtniX7qlHU z5FXS>W0py8zPYVR2Q1F?4gdblF#GB17PMpR)rRX8$o4fWUBglVpx)L&x{Q9lx<6T) zbF|W(F5*Xd7JU%D32K$$Otit>0(lI)wJg^~8VN$K8R;VEM)ukrYTuKs>DEY-w|zf+ zapn!EWSPu2wk;{!I+nBhdTW57K4sJcZNFwcGOWrY?UEzso%x#(=W@LM6wb?t5YjKM z;&0Rj=sIcPVid}9H3y7A!R;N$r2Ng*eetB9t5}%r2)R)UR>IhkMAI*79nLk)hJ>Or z+7NmuTZCtEtgk39$F#2-pq@g6wSg9XknD*OS|0(mVVYAzk~_Ih#Lg`#vIo+FZ>%BoSTR3_=>z$% zCe~8}TiEK}X)dZYI&sQ2k}lm~W)<3q9GsJ9lMl;$Cx^fidE}*v?RLb9BZ21i-vt_a z2sHQTwHp9`;=s85pu+hg_lu?3K_JjF;auJ7#mnc_q4;g0;=~V%%F-44)4ls>;6J0P zLU39)w4sg@hdugsaI!N)yHo(I{A`vZ;@lw3^s#$`X24(ZfA33iie*&EdB#-^Hn&jmqw><_2afCWmVvZ$izawAlQG_4xfPnQJkA>Xj- z#O*+x8h0-PW28QU1)7grwPd^{t_QAZYM0)UZ?4Vpv zFY6D%xPWH-B(utQua^^s`Ro|c8l!_0Rcub%kMlI4k_)ppnuQnoL64X?WoiU>C@TdD z@k`m19kT<1V@^@(!r6c=^1|xuI>B**jg*Gs~_3arh zx+hW^9_XPl91C+=b`!2A@8MC#MH~M!@90jAfJT~$Nb$83Y^htIZue5&MG

T^I+~ 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

IrCU{%|+PW9P; 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 Ob5mCFYN5<+zyAdynS5jb literal 0 HcmV?d00001 From 527d33b2ebd23cbde518540a09349e1685820b68 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 9 Mar 2023 10:57:05 +0100 Subject: [PATCH 153/665] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 869d45294db..c367e9a5f43 100644 --- a/applications/index.md +++ b/applications/index.md @@ -222,7 +222,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Pendulum](https://pendulumchain.org/) | [Spacewalk: a Stellar bridge](./spacewalk-bridge.md) | [GitHub](https://github.com/pendulum-chain) | ☐ | ☒ | ☐ | | [Dmitrii Koshelev](https://github.com/dishport) | [Implementation of the new hash function to BLS12 curves](./new_bls12_hash_function.md) | [GitHub](https://github.com/dishport) | ☐ | ☒ | ☒ | | [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | -| [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☐ | ☐ | +| [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☒ | ☒ | | [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | | [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☐ | ☐ | ☐ | | [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | From 6f307ee624eeac8e9ab2d818018784f12086f60f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 9 Mar 2023 14:45:47 +0100 Subject: [PATCH 154/665] Update rfps.md Add grant_management_webapp.md --- docs/rfps.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/rfps.md b/docs/rfps.md index 7a8268fbe18..8365b7012e6 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -39,6 +39,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | | [epassport-zk-validation.md](RFPs/Open/epassport-zk-validation.md) | 🟢 | 29.11.2021 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | +| [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | | [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟢 | 20.07.2021 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | From d43ef9bb31c5f39392b5461065b58311de6d6b28 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 9 Mar 2023 14:51:51 +0100 Subject: [PATCH 155/665] Update wallet aggregator library --- docs/RFPs/{Open => Implemented}/wallet-aggregator-library.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Implemented}/wallet-aggregator-library.md (92%) diff --git a/docs/RFPs/Open/wallet-aggregator-library.md b/docs/RFPs/Implemented/wallet-aggregator-library.md similarity index 92% rename from docs/RFPs/Open/wallet-aggregator-library.md rename to docs/RFPs/Implemented/wallet-aggregator-library.md index 0f3cb2d8c45..15d0437bf09 100644 --- a/docs/RFPs/Open/wallet-aggregator-library.md +++ b/docs/RFPs/Implemented/wallet-aggregator-library.md @@ -1,6 +1,6 @@ # Wallet Aggregator Library -* **Status:** Open +* **Status:** [Implemented: SubConnect](https://github.com/Koniverse/SubConnect), [Implemented: talisman-connect](https://github.com/TalismanSociety/talisman-connect) * **Proposer:** [Matteo Casonato](https://github.com/0xCaso) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index 8365b7012e6..7cc0f95d13c 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -65,7 +65,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | -| [wallet-aggregator-library.md](RFPs/Open/wallet-aggregator-library.md) | 🟢 | 23.01.2023 | +| [wallet-aggregator-library.md](RFPs/Implemented/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | | [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | From 826ba1f6d38ea759e97de47ffcd4834fb4fb2314 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 9 Mar 2023 14:18:53 -0500 Subject: [PATCH 156/665] Update index.md (#1602) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index c367e9a5f43..a103b2904dc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -38,7 +38,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | -| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☐ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | From 2f6ed4939280358972d8f27fd5906bf9faf20da4 Mon Sep 17 00:00:00 2001 From: BelSoft Dev DOO <126072104+beoblock@users.noreply.github.com> Date: Fri, 10 Mar 2023 08:16:01 +0100 Subject: [PATCH 157/665] Create Diffy_chat.md (#1560) * Create Diffy_chat.md * Update Diffy_chat.md * Update Diffy_chat.md --- applications/Diffy_chat.md | 135 +++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 applications/Diffy_chat.md diff --git a/applications/Diffy_chat.md b/applications/Diffy_chat.md new file mode 100644 index 00000000000..2999e71e599 --- /dev/null +++ b/applications/Diffy_chat.md @@ -0,0 +1,135 @@ +# Diffy messenger + +- **Team Name:** BelSoft +- **Payment Address:** Polkadot (Statemint): 14nQH1ZTDkRxLWdCWbSZjRGrBJpXgj4m2RRZDtQZExPP73K (USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: +This application complies with a potentially interesting project “Private instant messenger that uses on-chain identity” mentioned in [Open Source Polkadot Stack](https://wiki.polkadot.network/docs/build-open-source) page in the “Social Networking” section. + +## Project Overview :page_facing_up: + +A lot of sensitive data is meant to be transferred between parties in a secure way, but most of the centralized messengers and mail agents, even secured ones, have a common point of vulnerability - a centralized database/backend that stores all the data and manages connections. Meanwhile, some entities or even industries as a whole have demand for secured private channels for exchanging messages, e.g. medical institutions, that exchange sensitive data with patients or with other market players. + +The aim of this project is to develop a secured decentralized messenger that doesn’t store data on a centralized backend and uses personal Polkadot wallet credentials for chatting initiation and messaging. + +### Project Details + +P2p channels between users will be set using WebRTC. We will develop a Substrate pallet for exchanging [SDP offers](https://datatracker.ietf.org/doc/html/rfc2327). For address discovery of NAT users we will use any public [STUN server](https://datatracker.ietf.org/doc/html/rfc8445). +All messages between users will be encrypted with user’s public keys, so only receiving user could decrypt his messages using his private key of his Polkadot wallet. +Also, the pallet will include a “contacts” feature: a user will be able to tie names to wallet addresses and organize his contacts in a common way. + +![image](https://user-images.githubusercontent.com/126072104/220610232-0b9a4033-97cc-44ba-8948-a610b2b0c4bf.png) + +### Ecosystem Fit + +The Diffy chat dapp is very in demand in areas where it is crucial to protect personal and other critical data from unauthorized access during interaction or communication between counterparties. The target audience is very wide: from medical institutions providing telemedicine services to remote financial services and corporate channels for transmitting sensitive information between remote divisions. + +In the [Open Source Polkadot Stack](https://wiki.polkadot.network/docs/build-open-source) we see the [Uke Protocol Pallet](https://github.com/Uke-Messaging/uke-pallet) project, that provides functionality to perform basic messaging and identity assignment to users on a given Substrate chain. Unlike Uke Protocol, Diffy chat dapp won’t use a blockchain for sending and storing entire messages as in case of mass use this feature will dramatically clog the blockchain with unnecessary information like "hello" messages. Our dapp will use a blockchain just for authorization purposes, p2p connection initiation and for personal encryption keys. History backup feature can be available on later stages of the project by storing files locally or in IPFS with putting just a hash sum in a blockchain. + +## Team :busts_in_silhouette: + +### Team members + +- Max Remov, managing partner at BelSoft Dev d.o.o +- Alexey Vexin, CEO at BelSoft Dev d.o.o +- Dmitrii Shevchenko, CTO at BelSoft Dev d.o.o +- Nikita Orlov, Teamlead at BelSoft Dev d.o.o +- Alexander Plekhanov, Middle full stack developer at BelSoft Dev d.o.o +- Valeriy Tetevin, Senior full stack developer at BelSoft Dev d.o.o + +### Contact + +- **Contact Name:** Alexey Vexin +- **Contact Email:** vexin@belsoft.rs +- **Website:** https://www.belsoft.rs + +### Legal Structure + +- **Registered Address:** Kneza Mihaila 33, sprat 2 , Stari Grad , 11000 Beograd , Srbija +- **Registered Legal Entity:** Belsoft Dev DOO Beograd + +### Team's experience + +Max Remov is a business and personality transformation expert, executive and visionary, innovation instigator across telecom, retail, chemistry, pharma. Participates in several crypto initiatives. + +Alexey Vexin is product owner and project manager with 10+ years of experience in managing complicated telecoms and IT projects in Telco, Utilities and Governmental sectors with deep focus on business process management. Led dozens of federal scaled projects for IT systems implementation and industry scaled technology development, standardization and implementation. + +Dmitrii Shevchenko is a TechLead engineer with 10+ years of experience in developing and integrating IT, networking, security and blockchain solutions. Involved in implementation of highly reliable industrial solutions and development of FinTech and DeFi applications. + +Nikita Orlov, ETH Waterloo 2019 hackathon prize-winner, is a TechLead engineer with over 8 years of experience in development and integration of fault-tolerant high-loaded SaaS IT solutions including relevant experience in blockchain solutions. + +Alexander Plekhanov is a full stack software developer with over 5 years of experience including blockchain-based projects, enterprise solutions for fintech, call-centers, government services. Recent time mostly focused on smart-contracts development. + +Valeriy Tetevin is a programming engineer with over 8 years of experience in cloud-native applications. He also has strong knowledge of microservices architecture and back-end development for high-loaded applications. + +### Team Code Repos + +- https://github.com/1db1 +- https://github.com/StringNick +- https://github.com/SealTV + +### Team LinkedIn Profiles (if available) + +- [Max Remov](https://www.linkedin.com/in/remov) +- [Alexey Vexin](https://www.linkedin.com/in/alexey-vexin-800a4068/) +- [Nikita Orlov](https://www.linkedin.com/in/nikita-orlov-aa6910186/) +- [Alexander Plekhanov](https://www.linkedin.com/in/alexander-plekhanov/) +- [Valeriy Tetevin](https://www.linkedin.com/in/sealtv/) + +## Development Roadmap :nut_and_bolt: + +We plan to execute 3 deliverables in two milestones: +- a Substrate pallet for chat initiation; +- a DOTRTC library for p2p transport implementation with test html pages for message passing; +- a web-messenger dapp MVP with polkadot wallets authorisation. + +The project will be supported by a team of 2 developers, 1 UI/UX designer, 1 DevOps engineer and 1 QA. + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 3,5 FTE +- **Total Costs:** 30,000 USDT + +### Milestone 1 — Design and development of a pallet and a DOTRTC library + +- **Estimated duration:** 1,5 months +- **FTE:** 2 +- **Costs:** 16,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how the developed features work. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure new functionality and robustness. In the guide, we will describe how to run these tests. | +| 1. | Diffy chat pallet | We will develop a pallet (using Rust) which will include event handling to send and approve WebRTC offers for chat initiation. | +| 2. | DOTRTC library | We will develop a DOTRTC library (with JS) for p2p transport implementation using a parachain with Diffy chat pallet. This library will include an API for organizing p2p communication, methods for splitting packets into chunks (and reassemble on the receiver’s end). For secure messaging between two participants a e2e encryption using the rs25519 algorithm will be implemented in the DOTRTC library (a sender will encrypt outgoing messages with recipient’s public key so only the recipient could decrypt them with his private key). | +| 3. | HTML test page | We will deliver an HTML test page for DOTRTC library testing (setting a p2p channel between 2 users using the DOTRTC library). | + +### Milestone 2 — A web messenger MVP development + +- **Estimated duration:** 1,5 months +- **FTE:** 1,5 +- **Costs:** 14,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how the new dapp works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an **article** that explains what was achieved, how to use the new Dapp and what benefits what are the benefits of using the system | +| 1. | Contacts list feature | We will develop a contact list feature allowing users to tie real names to contact’s wallet addresses and store them encrypted in a blockchain. Encryption and decryption will be carried out on the frontend. | +| 2. | Web messenger dapp MVP | A web messenger dapp (written on JS) with authorization via Polkadot.js keys, p2p messaging using developed DOTRTC library and contacts list: a user will be able to start a conversation with someone on his contacts list. A web dapp MVP mockup is shouwn below and the basic user logic is as follows. To establish a chat User A sends a short 1st message to User B (limited to 50 symbols as it is written into the blockchain). This message is sent with the connection request. When User B is on-line he receives this message with connection request and accepts it: automatically for users on his contact list and manually for requests from unknown users (connection request can be declined as well).| + +![Diffy_chat mockup](https://user-images.githubusercontent.com/126072104/223709096-ccec2425-f3ac-4c8f-853f-d3656a8c29c5.jpg) + +## Future Plans + +In the next stages of the project we plan to implement new fundamental features like: +- offline messaging; +- group chats (p2mp); +- sending/receiving files; +- chats backup feature. + +These should be developed under later stages of the project. From bc640e865562fc376dc925ee245dd18ccd3ee617 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 10 Mar 2023 08:17:55 +0100 Subject: [PATCH 158/665] Update index.md Add Diffy messenger --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index a103b2904dc..54357478660 100644 --- a/applications/index.md +++ b/applications/index.md @@ -61,6 +61,8 @@ Use this page for an overview of all public grants and their status. Use the sid | Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | +| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | + ## 2022 From 90683c4bd014a679a27b19adc7aede66ae2b32f7 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 10 Mar 2023 03:06:37 -0500 Subject: [PATCH 159/665] Terminate tdot.md (#1604) --- applications/tdot.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/tdot.md b/applications/tdot.md index 10f751ca9f5..64019734fe5 100644 --- a/applications/tdot.md +++ b/applications/tdot.md @@ -3,6 +3,7 @@ - **Team Name:** NUTS Finance - **Payment Address:** 0x679824d755B054a2a50358008472a6F400740319(DAI) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/872#issuecomment-1424407082) ## Project Overview :page_facing_up: From 29c9e7a7f43a1891233c9272554792c1ab042fd9 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 10 Mar 2023 18:12:54 -0500 Subject: [PATCH 160/665] Update index.md (#1606) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 54357478660..98cf6ec9672 100644 --- a/applications/index.md +++ b/applications/index.md @@ -238,7 +238,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | | [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | -| [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./stable-asset.md) | [GitHub](https://github.com/nutsfinance/) | ☐ | ☒ | ☒ | +| [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | ## 2021 From cb2e0c3fa8b89498055917c7ac4ef3f88f1babbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:19:01 +0100 Subject: [PATCH 161/665] Add icons to sidebar --- docs/contribute.md | 2 +- docs/faq.md | 2 +- docs/funding.md | 2 +- docs/help.md | 2 +- docs/maintenance.md | 2 +- docs/referral-program.md | 2 +- docs/suggesting.md | 2 +- sidebars.js | 38 +++++++++++++++++++++++--------------- src/css/custom.css | 7 +++++++ 9 files changed, 37 insertions(+), 22 deletions(-) diff --git a/docs/contribute.md b/docs/contribute.md index 615bedfc735..1faf54fc2a3 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -1,6 +1,6 @@ --- sidebar_position: 9 -title: Contribute +title: ➕ Contribute --- The W3F Grants Program aims to be as open and accessible as possible. If you are interested in contributing or getting involved, there are several ways you can do that: diff --git a/docs/faq.md b/docs/faq.md index d427a34747b..6d54fbfd1b1 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -1,6 +1,6 @@ --- sidebar_position: 11 -title: FAQ +title: 🙋 FAQ --- # Frequently Asked Questions diff --git a/docs/funding.md b/docs/funding.md index 9ce7e8be6be..6067e9a2e6f 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -1,6 +1,6 @@ --- sidebar_position: 8 -title: Alternative Funding +title: 🪙 Alternative Funding --- Some funding sources might be more and some less suitable for your project throughout its various stages. We encourage you to explore alternative funding options listed below. Please note, however, that you should not seek to fund the **same scope of work** from multiple sources and that any team found doing so will have its Web3 Foundation support terminated. diff --git a/docs/help.md b/docs/help.md index 66d04a20bfe..971d657f453 100644 --- a/docs/help.md +++ b/docs/help.md @@ -1,6 +1,6 @@ --- sidebar_position: 7 -title: Help +title: 💡 Help --- diff --git a/docs/maintenance.md b/docs/maintenance.md index 600b04eba53..353195a10f1 100644 --- a/docs/maintenance.md +++ b/docs/maintenance.md @@ -1,6 +1,6 @@ --- sidebar_position: 6 -title: Maintenance Grants +title: 🛠️ Maintenance Grants --- diff --git a/docs/referral-program.md b/docs/referral-program.md index dc030b2a613..702aae8b2b2 100644 --- a/docs/referral-program.md +++ b/docs/referral-program.md @@ -1,6 +1,6 @@ --- sidebar_position: 7 -title: Referral Program +title: 💰 Referral Program --- We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. diff --git a/docs/suggesting.md b/docs/suggesting.md index 90a4f0c934d..89c29f840e3 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -1,6 +1,6 @@ --- sidebar_position: 5 -title: Suggesting a Project +title: 📬 Suggesting a Project --- diff --git a/sidebars.js b/sidebars.js index f420e567c68..e45d9572f5a 100644 --- a/sidebars.js +++ b/sidebars.js @@ -15,23 +15,23 @@ const sidebars = { docs: [ { type: 'category', - label: 'Introduction', + label: '👋 Introduction', link: {type:'doc', id:'docs/introduction'}, items: [{type: 'autogenerated', dirName: 'docs/Introduction'}] }, { type: 'category', - label: 'Application Process', + label: '📝 Application Process', link: {type:'doc', id:'docs/process'}, items: [{type: 'autogenerated', dirName: 'docs/Process'}] }, { type: 'doc', - id:'docs/suggesting' + id:'docs/maintenance' }, { - type: 'doc', - id:'docs/maintenance' + type: 'html', + value: '', }, { type: 'doc', @@ -39,36 +39,44 @@ const sidebars = { }, { type: 'doc', - id:'docs/referral-program' + id:'docs/faq' }, { type: 'doc', - id:'docs/funding' + id:'docs/suggesting' }, { type: 'doc', - id:'docs/contribute' + id:'docs/referral-program' + }, + { + type: 'html', + value: '', }, { type: 'doc', - id:'docs/faq' + id:'docs/funding' }, { type: 'doc', - label: 'List of Grants', - id:'applications/index' + id:'docs/contribute' }, { - type: 'category', - label: 'Support Docs', - items: [{type: 'autogenerated', dirName: 'docs/Support Docs'}] + type: 'doc', + label: '📜 List of Grants', + id:'applications/index' }, { type: 'category', - label: 'Requests for Proposal', + label: '🪧 Requests for Proposal', link: {type:'doc', id:'docs/rfps'}, items: [{type: 'autogenerated', dirName: 'docs/RFPs'}] }, + { + type: 'category', + label: '🦮 Supporting Documents', + items: [{type: 'autogenerated', dirName: 'docs/Support Docs'}] + }, ] }; diff --git a/src/css/custom.css b/src/css/custom.css index 9347a5a8dd9..33ef2e6e0ea 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -75,3 +75,10 @@ a { .button, .menu__link, .navbar__brand, .navbar__item, .pagination-nav__link, .table-of-contents__link { text-decoration: none; } + +/* Divider for sidebar */ +.sidebar-divider { + border-top: 1px solid var(--ifm-color-gray-200); + display: block; + margin: 0.5rem 0 0.25rem 1rem; +} \ No newline at end of file From 74f9ac226543067e3309368d5d8b427b147a2236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:36:30 +0100 Subject: [PATCH 162/665] Fix icons in rfps and add link in suggesting --- docs/rfps.md | 8 ++++---- docs/suggesting.md | 4 +++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index 7cc0f95d13c..479c3ba22b6 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -6,11 +6,11 @@ title: Requests for Proposals

-- [:grey\_question: What is an RFP?](#grey_question-what-is-an-rfp) +- [❔ What is an RFP?](#-what-is-an-rfp) - [📜 List of RFPs](#-list-of-rfps) -- [:mailbox\_with\_mail: Suggest an RFP](#mailbox_with_mail-suggest-an-rfp) +- [📬 Suggest an RFP](#-suggest-an-rfp) -## :grey_question: What is an RFP? +## ❔ What is an RFP? An RFP (Request for Proposals) is a declaration of interest for others to submit a grant or a treasury application regarding a specific project. They usually revolve around issues that the author (often someone from our team, but [anyone can suggest one](suggesting.md)) deems useful and missing or unsolved in our ecosystem. @@ -69,6 +69,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | | [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | -## :mailbox_with_mail: Suggest an RFP +## 📬 Suggest an RFP If you think that we should support the development of certain tools or projects (related to **Polkadot, Kusama or Substrate**) that aren't in the Polkadot/Kusama [tech stack](https://wiki.polkadot.network/docs/build-open-source), please submit a suggestion using the process described in our [Grants program README](suggesting.md). We are particularly interested in supporting projects that could be leveraged by other builders in our ecosystem. diff --git a/docs/suggesting.md b/docs/suggesting.md index 89c29f840e3..b545e6b72d3 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -5,7 +5,9 @@ title: 📬 Suggesting a Project -If you think that we should support the development of certain tools or projects that aren't in the Polkadot/Kusama [tech stack](https://wiki.polkadot.network/docs/build-open-source), feel free to submit a suggestion using the process described below. We are particularly interested in supporting projects that could be leveraged by other builders in our ecosystem. +If you think that we should support the development of certain tools or projects that aren't in the Polkadot/Kusama [tech stack](https://wiki.polkadot.network/docs/build-open-source), feel free to submit a suggestion ("Request for Proposal") using the process described below. We are particularly interested in supporting projects that could be leveraged by other builders in our ecosystem. + +For a list of previous Requests for Proposal and their status, see our [separate RFP page below](./rfps.md). **Submit an idea:** From e9dc6a3999c28607fb070637960b8b06999c1e8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:36:42 +0100 Subject: [PATCH 163/665] change contribute icon --- docs/contribute.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/contribute.md b/docs/contribute.md index 1faf54fc2a3..602699a8651 100644 --- a/docs/contribute.md +++ b/docs/contribute.md @@ -1,6 +1,6 @@ --- sidebar_position: 9 -title: ➕ Contribute +title: 🫶 Contribute --- The W3F Grants Program aims to be as open and accessible as possible. If you are interested in contributing or getting involved, there are several ways you can do that: From 9f5fb231d9effd2ca090d4a67dc9c811b843ba46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:37:01 +0100 Subject: [PATCH 164/665] sidebar eye candy --- sidebars.js | 18 ++++++++++++++++++ src/css/custom.css | 9 +++++++++ 2 files changed, 27 insertions(+) diff --git a/sidebars.js b/sidebars.js index e45d9572f5a..3abb05bbfb2 100644 --- a/sidebars.js +++ b/sidebars.js @@ -13,6 +13,12 @@ const sidebars = { docs: [ + { + type: 'html', + className: 'sidebar-title', + value: 'Basic Information', + defaultStyle: true, + }, { type: 'category', label: '👋 Introduction', @@ -33,6 +39,12 @@ const sidebars = { type: 'html', value: '', }, + { + type: 'html', + className: 'sidebar-title', + value: 'In Depth', + defaultStyle: true, + }, { type: 'doc', id:'docs/help' @@ -53,6 +65,12 @@ const sidebars = { type: 'html', value: '', }, + { + type: 'html', + className: 'sidebar-title', + value: 'Beyond', + defaultStyle: true, + }, { type: 'doc', id:'docs/funding' diff --git a/src/css/custom.css b/src/css/custom.css index 33ef2e6e0ea..01e15bc5939 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -81,4 +81,13 @@ a { border-top: 1px solid var(--ifm-color-gray-200); display: block; margin: 0.5rem 0 0.25rem 1rem; +} + +/* Title for sidebar */ +.sidebar-title { + font-size: 0.8rem; + letter-spacing: 0.05rem; + text-transform: uppercase; + font-weight: 600; + color: var(--ifm-color-gray-600); } \ No newline at end of file From a0be826593ae68963bb82cf06cea31806cd4a5f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 11 Mar 2023 00:43:23 +0100 Subject: [PATCH 165/665] Update index.md Ajuna Follow-up completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 98cf6ec9672..d6930b7d261 100644 --- a/applications/index.md +++ b/applications/index.md @@ -333,7 +333,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Perun Network](https://perun.network/) | [Perun Channels](./perun_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | | [NewOmega](https://github.com/WiktorStarczewski/newomega.trinity ) | [A blockchain game that cannot be shut down (Milestone 3 and 4)](./newomega-m3m4.md) | [GitHub](https://github.com/WiktorStarczewski/newomega.trinity ) | ☐ | ☒ | ☒ | | [Webb Tech](https://www.webb.tools/) | [Webb Mixer Extended](./MIXERv2.md) | [GitHub](https://github.com/webb-tools) | ☐ | ☒ | ☒ | -| [Ajuna](https://ajuna.io/) | [UnitySDK for Substrate](./ajuna_network_follow_up.md) | [GitHub](https://github.com/JetonNetwork) | ☐ | ☒ | ☐ | +| [Ajuna](https://ajuna.io/) | [UnitySDK for Substrate](./ajuna_network_follow_up.md) | [GitHub](https://github.com/JetonNetwork) | ☐ | ☒ | ☒ | | [Canyon Labs](https://canyon-network.io) | Permanent decentralized storage | [GitHub](https://github.com/canyon-network) | ☐ | ☒ | ☒ | | [ZeroDAO Network](https://zerodao.net/) | [Decentralised reputation systems and social networks](./ZeroDAO_Network.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☒ | ☒ | | [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | From c3071b42f0753494ca04268100c9d8e05d56f810 Mon Sep 17 00:00:00 2001 From: VegeBun Date: Tue, 14 Mar 2023 03:05:36 +0800 Subject: [PATCH 166/665] Add Zkverse application (#1563) * add some web3 grant info * add paln info * Update zkverse.md * Update zkverse.md * add Entity * complete zkverse * update project name * update * update * add some education * delete some doc * delete some doc * delete * update * update * update * update * Update * update --- applications/zkverse.md | 123 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 applications/zkverse.md diff --git a/applications/zkverse.md b/applications/zkverse.md new file mode 100644 index 00000000000..5c3ffcdcf95 --- /dev/null +++ b/applications/zkverse.md @@ -0,0 +1,123 @@ +# Zkverse + +- **Team Name:** Zkverse +- **Payment Address:** 0x8554fff69177C2cf470fA276b0C65dB58b5EfEE5(DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +At present, ZKP technology is constantly developing and innovating in the scaling and expansion track in Ethereum, especially some zk rollup projects, such as zksync, scroll, starknit, etc. So the main goal of this project is to introduce ZKP technology into the Polkadot/Substrate ecosystem. Polkadot/Substrate natively does not support ZKP, so this project(Zkverse, which means zk universe) will provide zk-related pallets to support substrate and more efficient zk proof generation ways. + +### Project Details + +There are three main goals for project: +- Integrate some zkp libray(like bellman, plonk library and eg...) into substrate pallet +- Maximize the efficiency and convenience of zk proof generation(The proof is not generated on the chain, but through some developer friendly libraries(like snarkjs) which will be adapted to the zk lib on substrate-based chain.). This is very important and convenient for scaling. It can realize rollup for app-specific Dapps and greatly increase the throughput of the substrated-based chain. It can be said "Off-chain execution and on-chain verification". +- Publish some tutorial blogs/demos to let more substrate community developers enjoy the convenience of the above zkp development kits. + +Meanwhile, We know that snakjs and circom are excellent and popular zkp development libraries. They are very popular in the Ethereum ecosystem and can automatically generate verification contract codes. We observed this very good feature, so we want to generate circuit codes more easily through circom, and generate proofs by snarkjs, which will be verified on substrate-based chain. Due to many people using snakjs, and circom is developer friendly, Unlike some domain-specific circuit writing methods, our project can attract many developers who are familiar with snarkjs to develop zkp Dapps in substrate/polkadot ecosystem. They can also enjoy the convenience of developing zkp applications in Polkadot ecosystem. So our main goal is to provide zkp infrastructure that is convenient for Polkadot developers. Also ,we will show a minimal example with Merkle tree and ZKP for rollup. +``` +h(h(h(sm0+sm1) + h(sm2+sm3)) + sm4) (merkle root) + / \ + h(h(sm0+sm1) + h(sm2+sm3)) sm4 (2 siblings) + / \ / + h(sm0+sm1) h(sm2+sm3) sm4 (3 siblings) + / \ / \ / +sm0 sm1 sm2 sm3 sm4 (leaves are the base level, 5 siblings) +^ ^ ^ ^ ^ +| | | | | +m0 m1 m2 m3 m4 +``` + +### Ecosystem Fit +By integrating some very popular ZKP libraries into Substrate pallet, the rollup function of ZKP can be realized on the substrate-based chains, which is convenient for developers to develop zk applications on the substrate-based chains. Although zkp has been relatively active in the Ethereum ecosystem, zkp technology has not been widely popularized in polkadot ecosystem. +- [Zeropool](https://github.com/zeropoolnetwork/zeropool-substrate-groth16-example) implements zk on the substrate chain, but this library has not been updated for a long time. The substrate has gone through many development iterations and needs to be supported by the latest library. +- [Glacier](https://github.com/gbctech) is building a Distaff VM for zk-STARK proof generation and verification that are used to make private smart contracts and private credential verifications. Also, this project is outdate and not latest. +- [zk-plonk](https://github.com/w3f/Grants-Program/blob/master/applications/zk-plonk.md) would like to implement Zk plonk pallet. However, plonk takes a long time to generate proofs and is generated on the chain, so there may be problems in efficiency. Also, the library this project using is not the latest. +- [ZK-Snarks tutorial](https://github.com/w3f/Grants-Program/blob/master/applications/ZK-Snarks%20tutorial.md) want to introduce the substrate community into the zk-snarks concept,but their ideas and goals have been implmentd since last year. Our project will do more education and involve more zk libraries + + +## Team :busts_in_silhouette: + +### Team members +- Name of team leader: Bun - Rust/substrate developer, mainly insterested in cryptography and blockchain +- Name of team member: Aaron + +### Contact + +- **Contact Name:** Bun +- **Contact Email:** csj1071285741@gmail.com + +### Legal Structure + +- **Registered Address:** 5001 BEACH ROAD, #07-37, GOLDEN MILE COMPLEX +SINGAPORE (199588) +- **Registered Legal Entity:** SYN UNIVERSAL PRIVATE LTD + +### Team's experience +- Bun + - He has many years of blockchain experience, is familiar with the underlying protocols, consensus algorithms, and common cryptographic algorithms of blockchain. + - He is mainly interested in zero-knowledge proof, post-quantum cryptography, etc + - He was used to be a member of [chainx](https://github.com/chainx-org/ChainX), mainly develop pallet + - Currently, he is a substrate ambassador jointly decided by oneblock+ community and parity + + +### Team Code Repos +- https://github.com/Zkvers/substrate-zk +- https://github.com/Zkvers/snarkjs-bellman-adapter + + +## Development Status :open_book: +Currently, we have developed a substrate-based chain with zkp protocol and a practical zkp tool (which can adapt to two different zkp libraries to facilitate developers to develop zkp Dapps) + +## Development Roadmap :nut_and_bolt: +We will implement two different proof systems(groth16 and plonk) separately to meet the needs of different developers + +### Overview + +- **Total Estimated Duration:** 2.5 months +- **Full-Time Equivalent (FTE):** 1FTE +- **Total Costs:** 24,000 USD + +### Milestone 1 + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 7,000 USD + +Implement groth16 pallet in Substrate and develop a tool which can let the proof of snarkjs(off-chain) verified by the bellman library(on-chain). In this way, We can make it convenient for developers to develop zkp applications using the groth16(Bellman is an excellent zkp lib, but it is easy to make mistakes when using bellman to develop circuits, and snarkjs can cooperate with circom to write circuit with few mistakes. So we combined them to make the development of zkp applications more safe and efficient). So far, we haven't seen any team do this, but we think it is very meaningful. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users use these zk tools to generate proof and verify. | +| **0c.** | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 1. | make groth16 compatible with substrate | We will create a Substrate pallet with groth16 algorithm. Bellman is not fully compatible with `no_std`, so we first make it possible and then we will modify attributes according to `parity-codec` and `Rng` to be compatible with Substrate environment. Finally, a zkp `verification Pallet` on the chain was developed | +| 2. | adapt snarkjs and bellman | We will use circom to write a minimal circuit example of zk rollup. Adapt snarkjs to bellman, so that the proof generated by snarkjs can be verified by the verification pallet on the substrate-based chain. | +| 3. | ZKP education(introduction to theory and detailed example explanation) | First, we will introduce the implementation principle of groth16 algorithm in an easy-to-understand way, and then explain its implementation method and architecture in detail of the example in 2 by a vedio and some articles,so that substrate developers can know how to develop a dapp through zkp technology | + + +### Milestone 2 + +- **Estimated Duration:** 1.5 month +- **FTE:** 1.5 +- **Costs:** 17,000 USD + +Implement plonk pallet in Substrate and develop a tool which can let the proof of snarkjs(off-chain) verified by the plonk library(on-chain). In this way, We can make it convenient for developers to develop zkp applications using the Plonk(The reason is the same as that in milestone 1). So far, we haven't seen any team do this, but we think it is very meaningful. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both `inline documentation` of the code and a `basic tutorial` that explains how users use these zk tools to generate proof and verify. | +| **0c.** | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles that can be used to test all the functionality delivered with this milestone. | +| 1. | make plonk compatible with substrate | We will create a Substrate pallet with plonk algorithm. Many plonk librares are not fully compatible with `no_std`, so we first make it possible and then we will modify attributes according to `parity-codec` and `Rng` to be compatible with Substrate environment. Finally, a zkp `verification Pallet` on the chain was developed | +| 2. | adapt snarkjs and plonk lib | We will use circom to write a minimal circuit example of zk rollup. Adapt snarkjs to bellman, so that the proof generated by snarkjs can be verified by the verification pallet on the substrate-based chain. | +| 3. | ZKP education(introduction to theory and detailed example explanation) | First, we will introduce the implementation principle of plonk algorithm in an easy-to-understand way, and then explain its implementation method and architecture in detail of the example in 2 by a vedio and some articles,so that substrate developers can know how to develop a dapp through zkp technology | + +## Future Plans +- Compatible with more groth16 and plonk libraries on substrate pallet +- Develop pallet compatible with other proof system at substrate From 0c3b464014c79ef1121f3584fda971e6bccd5f3b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 13 Mar 2023 20:13:25 +0100 Subject: [PATCH 167/665] Update index.md Zkverse --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d6930b7d261..f7b377c25fb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -62,7 +62,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | - +| [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | ## 2022 From b4f08ca8d5c69f47f27afe5d8d296183cbc7b205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tolga=20Yayc=C4=B1?= <40897846+tolgayayci@users.noreply.github.com> Date: Tue, 14 Mar 2023 20:25:36 +0300 Subject: [PATCH 168/665] Create Awesome-Polka.md (#1587 * Create Awesome-Polka.md Awesome Polka - the ultimate social platform for discovering and exploring the most exciting projects in the Polkadot ecosystem! * Update Awesome-Polka.md Milestones revised, project owner dashboard added to milestone 1 and removed mobile application support on this milestone, also milestone 2 deleted. * Update Awesome-Polka.md downgraded to level 1 --- applications/Awesome-Polka.md | 247 ++++++++++++++++++++++++++++++++++ 1 file changed, 247 insertions(+) create mode 100644 applications/Awesome-Polka.md diff --git a/applications/Awesome-Polka.md b/applications/Awesome-Polka.md new file mode 100644 index 00000000000..d554589f616 --- /dev/null +++ b/applications/Awesome-Polka.md @@ -0,0 +1,247 @@ +# Awesome Polka + +- **Team Name:** Awesome Polka +- **Payment Address:** [0xa632439DE1592936fbA3368053eaafd491443493](https://etherscan.io/address/0xa632439DE1592936fbA3368053eaafd491443493) (USDC, Ethereum (ERC20)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +Awesome Polka - the ultimate social platform for discovering and exploring the most exciting projects in the Polkadot ecosystem! Whether you're a developer, investor, or simply a curious enthusiast, Awesome Polka provides a one-stop-shop for accessing comprehensive and detailed applications about the projects. With this cutting-edge platform, you can discover the latest updates and developments, connect with project owners, and stay up-to-date with the most innovative projects in the Polkadot community. + +### Project Details + +Project showcase platforms face several challenges that hinder their effectiveness in promoting and highlighting various projects. The most significant challenges include sustainability and limited ecosystem partner (admins - authorized ones like someone from a DAO) authorities on the platform. These challenges significantly affect user experience and discourage project owners and ecosystem partners from utilizing the platforms fully. To address these issues, there is a need to develop innovative and user-centric strategies that enhance the functionality and sustainability of showcase platforms. + +General overview of Awesome Polka: + +![Awesome_Polka_Mindmap](https://user-images.githubusercontent.com/40897846/223079422-f5d8a6bc-da20-4be8-a0a9-2f1f84f15795.png) + +### Problems + +Let's take a closer look at some of the issues of project showcase platforms that I have encountered: + +**Sustainability**: The long-term sustainability of a platform depends on its ability to consistently deliver value to its users. Manual updates to listed projects through forms and limited content control can result in outdated or inaccurate information, reducing user trust and engagement. + +**UI & UX**: The user experience (UX) of a website or platform can significantly impact user engagement and satisfaction. Poorly designed UIs, slow loading times, confusing navigation, and other factors can all contribute to a low UX, hence reducing user engagement. + +**Poor Search Algorithms**: A platform showcasing tens of projects will require an effective search algorithm to help users easily find the specific project they are looking for. Weak search algorithms can result in irrelevant search results, leading to frustration and decreased user engagement. + +**Static Project Pages**: A project page should provide detailed information about the project, such as its objectives, methodology, team members, progress, and impact. A page that only includes a brief description can leave users with unanswered questions and reduce their interest in the project. + +**Educational Materials & Articles**: For users interested in a particular project, educational materials and related articles can provide valuable context and additional information. Making these resources easy to find and linking them directly to the relevant project pages can enhance user engagement and interest. + +**Ecosystem Partner Rights**: Partnerships with DAOs or other ecosystem partners can bring significant benefits to a platform, such as increased visibility, funding, and community support. However, without proper rights and access, these partners may not be able to fully leverage their resources and expertise to help the platform grow and succeed. + +### Solutions + +Awesome Polka is a social platform that aims to benefit the broader Polkadot developer ecosystem in several ways. Firstly, as Polkadot is one of the fastest-growing protocols, having a platform like Awesome Polka that aggregates all the projects in the ecosystem can help to further increase its size and diversity. + +Additionally, Awesome Polka provides a fluent user experience that enables more people to stay informed about what's happening on Polkadot. By making it easy to access detailed information about projects and events, Awesome Polka helps to promote collaboration and engagement among developers and enthusiasts alike. + +Finally, the platform will be continually supported through Twitter sharing and events, ensuring that it remains a vibrant hub of activity within the Polkadot ecosystem. + +Awesome Polka provides solutions to the problems mentioned in the previous statements in the following ways: + +**Solution to Sustainability** + +Awesome Polka has 2 personas for managing the platform: **Project owners** that want to publish their project on Awesome Polka, and **ecosystem partners** that is authorized ones like someone from a DAO, or from Polkadot team. + +Project owners can send a request to publish their project. After review and approval, they will receive login information to publish and edit their project's page via their web3 wallets on a special dashboard. This enables project pages to be updated by project owners all the time and have unique dynamic pages. + +On the other side, ecosystem partners can have admin access to Awesome Polka. They can approve or reject projects and request to remove any harmful content with an explanation. This allows ecosystem partners to help manage Awesome Polka and ensure that all projects are aligned with sustainability goals. + +In summary, Awesome Polka provides a platform where project owners and ecosystem partners can work together to create long-term sustainable platform. By empowering project owners to create and manage their own projects and providing ecosystem partners with the tools to manage and monitor the platform, Awesome Polka helps to create a sustainable future for all. + +**Improvement on UI & UX** + +Awesome Polka has a simple and effective user interface that makes it easy to navigate the website and find the information you are looking for. With just a few clicks, users can access general information and project details on the platform. The user interface has been designed to be fresh and cross-platform compatible, which ensures a seamless and enjoyable user experience regardless of the device or browser used. + +The platform is continually undergoing UI developments to enhance the user experience further. At the final stage of development, the user interface will be fully responsible and optimized for all screen sizes, ensuring that users have a consistent and enjoyable experience across all devices. Overall, Awesome Polka prioritizes usability and user experience to create a platform that is both informative and easy to use. + +Home Page | Projects Page | Articles Page +:-------------------------:|:-------------------------:| :-------------------------: +![Awesome Polka Home Page](https://user-images.githubusercontent.com/40897846/223079619-cd90d6e0-f406-4d0f-bfda-00126b4d41d5.png)| ![Awesome Polka Projects Page](https://user-images.githubusercontent.com/40897846/223079640-0e47ab39-b667-4819-a20f-f1257449bf5c.png) | ![Awesome Polka Articles Page](https://user-images.githubusercontent.com/40897846/223079652-157a8c4e-a28f-40ea-9aa4-feadc5386e8d.png) + +**Solution to Poor Search Algorithms** + + +Awesome Polka has a powerful search infrastructure that uses Algolia to deliver detailed and lightning-fast search results. + +On Awesome Polka, category list exist to organize projects in detail. Ecosystem partners can add categories to this category list according to ecosystem needs, while project owners can select their category and subcategory while adding their project to the platform. Awesome Polka automatically integrates new categories into relevant pages to increase search efficiency. + +Moreover, Awesome Polka's search infrastructure uses a detailed searching matrix. Unlike most showcase platforms that only use titles to search for anything, Awesome Polka's range of parameters is much wider, ranging from titles to project descriptions. This ensures that users can find what they are looking for more easily and with greater precision. + +In summary, Awesome Polka's search infrastructure is designed to provide a seamless and efficient user experience. Additionally, ecosystem partners work to ensure that the platform's categories are up-to-date and relevant to the needs of the community, further enhancing the search experience. + +Search Element | Search Focused +:-------------------------: | :-------------------------: +| + +**Solution on Static Project Pages** + +On Awesome Polka, project owners can manage their project pages, which include several modules such as: + +- Project Description +- Token Stats +- GitHub Stats +- Team Info +- Latest Articles +- Frequently Asked Questions +- Job Postings + +The number of these modules will be increased and further developed. + +Project owners can update their project page using these modules. In the future, additional modules can be added based on the needs of the ecosystem. + +In summary, project pages on Awesome Polka are highly customizable, allowing project owners to showcase their projects using a variety of modules. By providing these modules, Awesome Polka enables project owners to provide up-to-date information about their projects and engage with the ecosystem more effectively. + +**Improvement on Educational Materials & Articles** + +Awesome Polka offers a platform for project owners to publish educational materials and articles to inform and engage with the ecosystem. With the built-in editor, project owners can create compelling content that keeps their audience up-to-date on the latest developments in their projects. By providing these tools, Awesome Polka helps to create a more informed and engaged community. + +**Improvement on Ecosystem Partner Rights** + +Ecosystem partners play a crucial role in ensuring the sustainability of the Awesome Polka platform. By giving them admin rights, they can help manage the platform and ensure that it meets the needs of the community. The committee responsible for this role will be selected based on their ability to review and manage projects effectively. + +#### Technology Stack + +- AWS App Sync (GraphQL) +- AWS Amplify +- Next.js +- Additional Tools & Frameworks + - Redux + - Tailwind CSS + - Magic (Web3 Auth & Wallet) + - Algolia (Search Infrastructure) + +#### Documentation + +Once all project milestones have been accomplished, we will create and publish comprehensive technical documentation that provides all the necessary information for end users to fully understand the system and its capabilities. + +#### PoC/MVP or other relevant prior work or research on the topic + +**Awesome Polka MVP Link:** https://dev.awesomepolka.org + +### Ecosystem Fit + +- **Where and how does your project fit into the ecosystem?** + + Polkadot's [User Interface section](https://wiki.polkadot.network/docs/build-open-source#user-interface) is the ideal place to start for the Awesome Polka project, offering the best opportunity for success. + +- **Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)?** + + Awesome Polka targets a diverse range of audiences, including individuals who are interested in learning about Polkadot projects and their latest updates. This includes investors, enthusiasts, and other stakeholders who want to stay up-to-date with the developments in the Polkadot ecosystem. + + In addition to individuals, Awesome Polka also targets both early-stage and live projects on the Polkadot ecosystem. By providing a comprehensive platform that supports projects of all sizes, Awesome Polka aims to support the growth and development of the entire Polkadot ecosystem. + + Furthermore, Awesome Polka also targets ecosystem partners such as DAOs who can help to make the platform more sustainable and aligned with their vision. By engaging with the community and involving ecosystem partners in the management of the platform, Awesome Polka aims to create a more collaborative and impactful platform that benefits everyone involved in the Polkadot ecosystem. + +- **What need(s) does your project meet?** + + Awesome Polka meets the needs I mentioned in the solution section above, but if I have to write it as a summary, it covers the following: + + - **Sustainable project management:** The project ensures sustainable project management by providing a comprehensive and structured approach to project management. This approach includes planning, execution, monitoring, and control of project activities, which helps to achieve project goals while minimizing risks and resource wastage. + + - **Strong SEO optimization:** The project meets the need for strong SEO optimization by implementing best practices for on-page and off-page SEO. This includes optimizing content for keywords, ensuring site speed and mobile responsiveness, and building high-quality backlinks to improve search engine rankings and visibility. + + - **Fresh and easy-to-use UI:** The project meets the need for a fresh and easy-to-use UI by providing a user-friendly interface that is intuitive and easy to navigate. This helps to enhance the user experience and encourages users to engage with the project more frequently. + + - **Efficient and lightning-fast search infrastructure:** The project meets the need for efficient and lightning-fast search infrastructure by implementing a robust search system that enables users to find the information they need quickly and easily. This ensures that users can access the project's content and resources without delays, which improves overall usability and satisfaction. + + - **Detailed project modules:** The project meets the need for detailed project modules by providing comprehensive information on various project aspects such as token stats, GitHub activity, job postings, and so on. This helps users to stay informed about project updates and developments, which enhances transparency and trust in the project. + +- **Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?** + - **If so, how is your project different?** + - Yes, I found a similar project called Polka Project, there may be other projects, but let me tell you about the differentiating aspects of Awesome Polka. + - Detailed filtering and search options for easier and efficient project discovery + - Ability for projects to use modules for article sharing and job postings and so on + - Display of GitHub repository information and statistics + - Display of token information, including market capitalization, total volume, and price + - A learning section with resources for the Polkadot ecosystem + - Sharing of project team information. + - Dashboard for Projects Owners and Admins to manage platform sustainable. + +## Team :busts_in_silhouette: + +### Team members + +- Tolga Yaycı + +### Contact + +- **Contact Name:** Tolga Yaycı +- **Contact Email:** [tolgayayci@protonmail.com](mailto:tolgayayci@protonmail.com) +- **Website:** [LinkedIn](https://www.linkedin.com/in/tolgayayci/) + +### Legal Structure + +- **Registered Address:** - +- **Registered Legal Entity:** - + +### Team's experience + +As a full-stack developer with 2 years of experience, I have honed my skills in software development, with a focus on dApp development in the past year. I have a deep interest in the Web3 and NFT space and have put my skills to the test by creating a number of relevant applications. In addition to my experience, I have developed detailed React and Next.js projects, further enhancing my ability to build robust and scalable web applications. + +In addition to my technical skills, I have also been actively involved in the wider tech community. I have served as a Chainlink Community Advocate, Aave Turkey Community Manager, and Founding Chair of Gazi University ACM Student Chapter. My previous role as a Microsoft Learn Student Ambassador has also given me the opportunity to share my knowledge and experience with others. I have set of experiences and skills and particularly in the areas of full stack software development and community management. + +### Team Code Repos + +- https://github.com/tolgayayci/awesome-polka/tree/dev +- https://github.com/tolgayayci + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/tolgayayci + + +## Development Status :open_book: + +The user interface and search infrastructure of this project are largely complete and ready for discovery. To get a glimpse of the minimum viable product (MVP), you can either take a look at the repository or visit the website. + + + +## Development Roadmap :nut_and_bolt: + +This project is planned as 1 milestone, it will be completed in one months. + +- **Total Estimated Duration:** ~1 month +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 USD + +### Milestone 1 + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Unlicense | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | I will publish an **article**/workshop that explains what was done/achieved as part of the grant. | +| **1.** | UI & UX Development | **Home Page:** Visually appealing and user-friendly homepage which includes latest articles, popular categories and many more

**Projects Page:** Showcase page with detailed filtering and search infrastructure

**Project Detail Page:** Project details page to display detailed information about project with several modules like explained in the solution

**Articles Page:** Articles page to showcase informative articles related to the subject

**Article Detail Page:** Detail page for individual articles to display their full content

**Ranking Page:** Ranking page based on votes and token stats which is supported by CoinGecko api to showcase popular projects and articles

**Learn Page:** Useful resources to learn about polkadot ecosystem

**UX Improvements & Testing:** I will work to improve the user experience by ensuring that the user interface is fully compatible with mobile and tablet devices. | +| *2.* | Project Owner Dashboard | As part of this milestone, I will be implementing both the frontend and backend components of the Project Owner Dashboard. This involves designing and developing the user interface (UI) for the dashboard, as well as building the necessary backend infrastructure to support its functionality. To ensure the quality of my work, I will conduct thorough testing to ensure that the dashboard is user-friendly and performs as expected. My ultimate goal is to provide project owners with a seamless and efficient experience when updating their pages and publishing articles on our platform. + +## Future Plans + +I will manage the **@awesomepolka** Twitter account and keep the followers of the Awesome Polka community updated on the latest projects added to the platform. Additionally, I will create monthly threads to share developments with the community. + +Besides, to ensure the best possible user experience, I will actively monitor the Awesome Polka platform for any bugs or technical issues that may arise. I am committed to maintaining the platform's quality, and any problems that are identified will be addressed promptly. + +I will conduct ongoing maintenance and support for a year to ensure the smooth functioning of the platform. If users encounter any issues while using Awesome Polka, they can report them by creating a GitHub issue or by filling out a form that is available on the website. + + My goal is to provide a reliable and user-friendly platform for the web3 community, and I am dedicated to addressing any issues that arise in a timely and efficient manner. + +## Referral Program (optional) :moneybag: + +- **Referrer:** - +- **Payment Address:** - + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website + From 3e3121e8e4ec485a121bda3b3452376684ad9ea5 Mon Sep 17 00:00:00 2001 From: Jacob Lee Date: Wed, 15 Mar 2023 03:26:45 +0800 Subject: [PATCH 169/665] Claps Health (#1440) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create Claps * Rename Claps to Claps.md * Update Claps.md * Update Claps.md * Update Claps.md Remove DID and NFT from milestone 1 deliverables, update all milestone 1-4 table. Add Use cases and architecture diagram. * Update Claps.md * Update Claps.md * Update Claps.md Updated milestone deliverable table, each line contained in one box. * Update Claps.md 1. Overview updated Move the position of AI from patient to health practitioners. For reference: “The Claps AI is designed to support health practitioners in tracking patients' data on a daily basis.” 2. Architecture updated Add IPFS swam to substrate for health education content storage Add Claps Health Data Sharing Protocol 3. Solution updated Remove personal AI assistant Add Health practitioners AI assistant Add Ominichannel 4. Technology updated Add Substrate blockchain Add SSI Add Zero-knowledge proof for enhanced privacy protection Add Zero-knowledge proof model diagram 5. Milestone Deliverable Add Enterprise Registration to M1 Replaced M3 with Data Sharing Protocol Replaced M4 with Omnichannel 6. Add Regulation and Compliance with HIPAA/GDPR * Update Claps.md Programing language on milestone deliverable M1-M4 Revised * Update Claps.md Update milestone deliverable 1-4, add more detail of technical specifications * Update Claps.md 1. Update milestone deliverable 1-4, add technical specifications. 2. Update proposal format. * Update Claps.md * Update Claps.md Add zk-proof spec. Add basic user interface, for more details please check the Figma link. * Update Claps.md The revised product roadmap for Claps Health development is as follows: Phase I - Minimum Viable Product (MVP) Development: Patient registration Fixed challenge card Decentralized applications (dApps) Health data sharing protocol Incentive program for patients Phase II - Full-featured Application Development: (Not show on this proposal milestones) Enterprise registration Dynamic challenge card Health practitioner engagement Patient groups Health education content management Omni-channel backend Health data analysis backend Note that the original roadmap has been modified from 4 milestones to 2 milestones for Phase I, as we prioritize the development of the MVP to provide the core functionality of our product as soon as possible. We have also revised our grant application level to Level 2. --- applications/Claps.md | 260 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 applications/Claps.md diff --git a/applications/Claps.md b/applications/Claps.md new file mode 100644 index 00000000000..883e3004b48 --- /dev/null +++ b/applications/Claps.md @@ -0,0 +1,260 @@ +# Claps Health + +- **Team Name:** Taiwan Research-based Biopharmaceutical Manufacturers Association +- **Payment Address:** 0x39D3E0c7AAcfbCa133f08cfb153B4888fd36bA9B (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Overview + +### Make self-care a fun game with Claps +Claps is the mobile app that integrates gaming with personal health tracking can be a fun and engaging way to encourage users to track their health on a daily basis and make healthy lifestyle choices. The app could allow users to play games and record the results as a health diary, and reward them with incentives and rewards for completing diagnostic tests or answering questionnaires such as mood tracking. + +Claps defines itself as a "gamified health tracking app" that uses gaming elements to motivate users to track their health and make healthy lifestyle choices. By integrating with artificial intelligence (AI) into a gamified health tracking app to provide a more personalized and interactive user experience. + +The Claps AI is designed to support health practitioners in tracking patients' data on a daily basis. The AI algorithms analyze patients' health information and provide insights and recommendations to assist health practitioners in delivering personalized care to their patients. This can improve patient outcomes and help practitioners provide the most effective and efficient care. + +Claps is designed to be engaging and enjoyable to use, and could provide users with feedback and support to help them achieve their health goals. It could be a useful tool for promoting health and well-being, and could be particularly appealing to users who enjoy gaming and are looking for a more interactive and engaging way to track their health. + +By using Substrate technology to store and manage data, facilitate data sharing, dapps contracts, and create and manage digital assets such as NFT with patient’s data. In the long-term, patients could potentially benefit from blockchain including in the areas of insurance and financial support. By leveraging the transparency, security, and efficiency of blockchain technology, patients could be better equipped to access the care and support they need. + +Taiwan Research-based Biopharmaceutical Manufacturers Association (TRPMA) is jointly established by 28 biopharmaceutical manufacturers and developers and 19 regenerative medicine companies based in Taiwan. This proposal is proposed by Jacob Lee, director of the digital health team at TRPMA. Jacob Lee is the co-designer of phrOS(Personal Health Records Operating System), a Ethereum private blockchain and IPFS Cluster based SaaS at Medical Center Hospital in 2017. + +## Project Details + +### Architecture +![claps_health_diagam](https://user-images.githubusercontent.com/14127551/218294412-3f0c2a9e-774a-49f0-b4c0-67e8ee6cb896.png) + +## Claps App Use Case + +### Patients + +Use the app to track their mood on a daily basis +Receive rewards by reporting their mood or blood pressure, or by completing other activities such as questionnaires. By providing these proof of work to the Claps dapps(Claps DAO). +View personalized health education content provided by health practitioners +Share their mood tracking data with their healthcare provider for review and analysis + +### Pharmaceutical Company + +Use the data collected by the app to inform their product development and marketing strategies +Provide funding to health practitioners to produce health education content for the app +Use the app as a platform to promote their products and services to patients + +### Health Practitioners + +Use the app to provide personalized health education content to patients +Use the data collected by the app to inform treatment decisions and track patient progress +Receive funding from pharmaceutical companies to produce health education content for the app + +### AI Assistant + +Collect and analyze data from patients' mood tracking +Provide personalized recommendations and education content to patients based on their data +Facilitate communication and collaboration between patients, health practitioners, and pharmaceutical companies. + +## Solutions +### Gamefield Mood Tracking + +By gamifying the experience through a health diary design, aims to break through the challenge of collecting mental health real-world data. The app provides a challenge card and a way for users to set personal goals, track progress, and receive rewards for their efforts. This approach makes the experience more engaging, encouraging patients to stick with their tracking habits and provide more accurate data. The personal goal-setting feature also caters to a wide range of needs and preferences, making the app more accessible and appealing to a broad audience. + +### Health Practitioners AI Assistant + +AI can help health practitioners in various ways by analyzing patient data and providing actionable insights to improve patient care. The use of AI can save time and improve the efficiency of health practitioners by automating routine tasks and allowing them to focus on more complex and critical tasks. AI-powered alerts can help practitioners detect potential issues earlier and provide more proactive care. By providing tailored recommendations based on individual patient data, AI can also help practitioners make more informed decisions and provide personalized care. + +### Omni-channel + +This allows pharmaceutical companies to track and analyze the behavior and engagement of healthcare practitioners, patients, and other stakeholders, and make data-driven decisions about their marketing and communication strategies. These solutions can help pharmaceutical companies to make data-driven decisions about their marketing and communication strategies, which can help improve patient outcomes and the quality of care. + +### Web3 Technology + +Web3 technologies can give individuals more control over their personal health records, as they can choose who has access to their data and when it is shared. This can help to enhance privacy and ensure that personal health information is used appropriately. + + +## Our Goals +Improve the quality of care and outcomes for patients. + +- Chronic disease awareness and prevention +- Maternal and infant health +- Mental and behavioral health +- Nutrition, exercise and obesity prevention +- Alcohol, tobacco use and substance abuse + +Claps enable patients to self-report, self-test, and access health education, and that incorporate AI-based features, can be a useful tool for improving the quality of care and outcomes for patients. By providing patients with the tools and support they need to manage their own health, these apps can help to empower patients and to improve the effectiveness of healthcare delivery. + +## Technology + +### Substrate Blockchain + +By using Substrate blockchain technology to store and manage data, facilitate data sharing, dapps contracts, and create and manage digital assets with patient’s data. Leveraging Substrate blockchain technology for healthcare can offer significant benefits for patients and healthcare industry, providing them with enhanced privacy protection and better data consent management. By taking control of their own data, patients can access the care and support they need more efficiently and securely. + +### Self-Sovereign Identity (SSI) + +Self-Sovereign Identity (SSI) is a decentralized digital identity model that puts individuals in control of their personal information and how it is used. This approach to identity provides users with more privacy and control over their personal information, and helps to prevent data breaches and misuse of sensitive information. + +### Zero-knowledge proof + +The zero-knowledge proof is part of SSI, this means that a user can prove their identity or access rights to a service without revealing any sensitive personal information. This helps to protect the privacy of the user and reduce the risk of data breaches, while still enabling secure and reliable authentication. +![zkproof](https://user-images.githubusercontent.com/14127551/218294803-fefcbb47-9be2-418a-a595-424302e838bb.png) + +### GPT-3 AI model + +GPT-3 (Generative Pre-trained Transformer 3) is a state-of-the-art language processing artificial intelligence developed by OpenAI. The GPT-3 chatbots are designed to interact with patients on a daily basis to support and enhance the continued care work of health practitioners. It's always monitored by health practitioners to ensure the accuracy and relevance of their responses. + +## Ecosystem Fit + +The pharmaceutical companies in this ecosystem can provide information to doctors, doctors provide consultation and health education to patients, and patients provide self-health tracking to doctors, could potentially be an effective way to improve the quality and accessibility of healthcare. In this model, the pharmaceutical company would be responsible for providing relevant and accurate information to doctors, who would then use this information to provide consultation and health education to patients. Patients would be responsible for tracking their own health and providing this information to doctors, which could help to inform treatment and care decisions. + +## Team :busts_in_silhouette: + +### Team members + +- Jacob Lee, Team Lead +- Brady Liu, Project Tech Lead +- Dr. Nicky Liu, Project Manager +- Carol Cheng, Regulation and compliance + +### Contact + +- **Contact Name:** Jacob Lee +- **Contact Email:** jacoblee@dtco.co +- **Website:** https://trpma.org.tw/ + +### Legal Structure + +- **Registered Address:** 1F, No 465-1, Sec. 6, Chung-hsiao E. Rd., Nan-kang Dist., Taipei City 11557, ROC TAIWAN + +- **Registered Legal Entity:** TAIWAN RESEARCH-BASED BIOPHARMACEUTICAL MANUFACTURERS ASSOCIATION + +### Team's experience + +Taiwan Research-based Biopharmaceutical Manufacturers Association (TRPMA) is jointly established by 28 biopharmaceutical manufacturers and developers and 19 regenerative medicine companies based in Taiwan. This proposal is proposed by Jacob Lee, director of the digital health team at TRPMA. Jacob Lee is the co-designer of phrOS(Personal Health Records Operating System), a Ethereum private blockchain and IPFS Cluster based SaaS at Medical Center Hospital in 2017. The Digital Health Team at TRPMA has also supported the Taiwan government by developing a regenerative medicine management system from 2020-2023, and actively working on a Covid-19 project with a Dublin study team since 2021. + +### Team Code Repos + +Claps Health +https://github.com/Claps-Health/ + + +- https://github.com/jacobleegithub/ +- https://github.com/bradyliu-dtco/ + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/jacob-lee-aa435916/ +- https://www.linkedin.com/in/brady-liu-734a27106/ +- https://www.linkedin.com/in/nicky-lu-449b02131/ + + +## Development Status :open_book: +New project + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4.5 months +- **Full-Time Equivalent (FTE):** 4 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 - Patient Identity and Security Framework + +- **Estimated Duration:** 2.5 month +- **Developers:** FTE x 4 +- **(Product Design x 1, Dapp Engineer x 1, System Engineer x 1, App Engineer x 1)** +- **Costs:** 20,000 USD + +| Number | Deliverable | Specification | +| ------ | ---------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will post an article on Twitter and Meta(Facebook) for English and Mandarin speakers communities. | +| 1 | Patient ID creation | \- Develop the patient ID creation tool in Javascript.
\- Generate a new ID on client-side for the patient based on BIP39. (12 words passphrase)
\- Encrypted key store(private key) by patient user’s password (AES-256 GCM mode)
\- Implement the decentralized design using public key cryptography. (Client signed by private key) | +| 2 | Patient profile management module | \- Patient profile off-chain management tools developed by JAVA
\- Support AWS S3 storage
\- Updating of patient profile
\- ECIES end-to-end data encryption to secure profile data transfer. | +| 3 | Patient ID on-chain authentication | \- zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by !ink Smart Contract
\- Receive credential by trust issuer (token file)
\- Zero-knowledge proof for on-chain authentication to prove patient ID without private information | +| 4 | Challenge card dapp module | Provide a way for users to set personal goals, track their progress, and receive rewards for their efforts. Dapp developed in ink! smart contract.

\- Add challenge card
\- Add personalized mission
\- Delete challenge card
\- Receive daily mission
\- Receive rewards by mission completed
\- Receive rewards by challenge completed
\- Rewards by fungible tokens | +| 5 | Create database | Create a docker container to start a mySQL database to store all the information, define the models to store and create tables and indexes. | +| 6 | Database encryption module | We will implement a database encryption AES-256 GCM module of all stored and transmitted data to prevent unauthorized access or tampering. Developed by JAVA. | +| 7 | Android apk | We will provide android apk for above challenge card data input and functional verification
We will provide android apk for user challenge card with wallet to receive rewards | +| 8 | Testing | Achieve a testing coverage of the functionalities above 90% | + +### Milestone 2 - CPatient Engagement and Data Sharing +- **Estimated Duration:** 2 month +- **Developers:** FTE x 4 +- **(Product Design x 1, Dapp Engineer x 1, System Engineer x 1, APP Engineer x 1)** +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| ------ | ------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article/workshop video that explains how Claps Health Benefits to patients and healthcare business. Patients are the end-users of Claps Health application, so it's important to explain how Claps Health will benefit them. The article/video will cover topics such as how the app helps patients manage their health, how it improves access to healthcare, and how it ensures data privacy and security. Article/Workshop will be in English and Mandarin. | +| 1. | Claps Health Data Sharing protocol: Consent management | We will implement a health data sharing protocol based on dapp to enable secure sharing of health data among various stakeholders. Developed by !ink Smart Contract.
\- Accept consent
\- Revoke consent
\- View data sharing requests

a. The consent data will be stored anonymously, without any personal identifying information.
b. The smart contract will be accessible to authorized parties using public key cryptography.
c. Users are able to request that their data be permanently deleted from the system at any time (Please reference Data privacy control module)
d. Users are able to see a list of all the organizations that have requested access to their data, along with the specific types of data being requested, and be able to manage these requests. | +| 2. | Claps Health Data Sharing protocol: Patient data feed | We will implement a health data feed on the backend, developed using Java.
\- Subscribe data feed by numbers of Patient ID
\- Unsubscribe data feed by Patient ID

a. The data feed will allow authorized parties to access and subscribe to a patient's health data in real-time.
b. The data will be encrypted using ECIES to ensure data security.
c. The data feed will be accessible through a secure API, which will authenticate and authorize users using public key cryptography.
d. Support delete data by patient required. | +| 3. | Data privacy control module | We will implement a data privacy control module to allow patients to exercise their rights under the GDPR, delete their personal data by patient’s requirement. Developed by JAVA. | +| 4. | Audit logging on web backend | The web backend will implement an auditable log of all access to the system, including who accessed it and what actions were performed, to help detect and respond to security incidents. Developed by JAVA. | +| 5. | Support for Mandarin speakers community | Translate the app to Mandarin and add support to switch languages | +| 6. | Testing | Add tests to the components. Achieve a testing coverage of the functionalities above 90% | +| 7. | Final setups | Deal with all production issues/configuration requirements such as creating the final docker image, reviewing the documentation and verifying everything works fine. | +| 8. | Deploy the app | Define the final domain (Claps.health) and deploy the app | + +## User Interface + +The user interface will be based on [here](https://www.figma.com/file/Zlx3Qq4EoFtuV8AopAffVl/Claps-Health-Mobile-for-Patients?node-id=0%3A1&t=pUNA27WItIqVx5n8-1) + +![app01](https://user-images.githubusercontent.com/14127551/223708073-28ffd406-a286-4f80-9476-c728762f6812.png) + +p.s. The gray area will be for future development, such as health education services. +The web backend for pharmaceutical and healthcare service providers, including omni-channel and health data analytics, will also be a focus of our future development. + +## Regulation and Compliance with HIPAA/GDPR + +### Pseudonymization + +By using pseudonyms, the health data can be processed and shared in a secure and de-identified manner, while still allowing for verifiable identification. + +### End-to-end data encryption +Claps Health offers tools based on public key cryptography ECIES encryption to secure data storage and transfer are compliance with patient data protection and industry requirements. Only authorized parties can access the data. The application layers are using AWS S3 industry compliance secure storage. + +### Database data encryption +Claps Health backend database using AES256 GCM data encryption to secure database data. Based on data access policy, only authorized parties can access the data. The application layers are using AWS S3 industry compliance secure storage. + + +### Audit logs + +The auditable log of all access to the system, including who accessed it and what actions were performed +Consent Tracking + +By implementing consent tracking smart contracts, organizations can demonstrate that they are following privacy regulations and that patients have control over their health data. + +### Right to be forgotten + +Claps Health does not store personal data on the blockchain and there is only random ID and hash code on chain. Individuals have more control over their data and can request deletion of the corresponding data in the database. Ensure that all personal data is securely deleted and no residual information remains that could be used to re-identify individuals. + +However, it is important to note that HIPAA/GDPR compliance involves a comprehensive set of rules and regulations for protecting health information. This proposal does not cover all of the guidelines such as physical access, governance of organizations..etc. + +## Future Plans + +## Health Educations + +We are planning to expand Claps Health by developing a health education publishing service. This service will be available on our web backend and mobile app, and will allow healthcare providers to create and share educational content with their patients. By providing easy access to reliable health information, we hope to empower patients to take control of their health and wellbeing. + +## Omni-Channel and Health data analytics + +We recognize that healthcare providers need a way to analyze large datasets to identify patterns in health behaviors and improve patient outcomes. To meet this need, we are planning to develop an omni-channel health data analytics service on our web backend. Based on patient Informed Consent Management + +### Open AI Integration + +We are planning to integrate Open AI into Claps health mobile app in a second phase, after testing the market and gathering feedback. This approach allows us to minimize development costs and time in the first phase, while also gathering feedback and making sure that the features that we implement in the second phase are the most useful and needed. + +### Expand Substrate + +We are planning to build an omnichannel platform for pharmaceutical companies and healthcare related based on Polkadot Substrate for expanding the ecosystem, providing a more secure and private way of data management, better interoperability, automation and improved healthcare education communication. + +### Additional Information + +Reference: +https://www.ledgerinsights.com/blockchain-health-records-taiwan/ +https://medium.com/dtco/blockchain-enabled-personal-health-record-os-challenges-opportunities-in-health-care-55161e3a5a32 From bd4d23947420c71dd72a33567f20d64abea02163 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 14 Mar 2023 20:29:44 +0100 Subject: [PATCH 170/665] Update index.md Claps Health --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f7b377c25fb..e7fd38a4354 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | - +| Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | ## 2022 From 4b7f63e93122b01e37e5d3bfe2ebd345b70fc8dc Mon Sep 17 00:00:00 2001 From: Matteo Casonato Date: Tue, 14 Mar 2023 12:32:56 -0700 Subject: [PATCH 171/665] Fix website (#1613) * Update Awesome-Polka.md Close tags to fix website * Update Awesome-Polka.md fix br tags --- applications/Awesome-Polka.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/Awesome-Polka.md b/applications/Awesome-Polka.md index d554589f616..511f200ac91 100644 --- a/applications/Awesome-Polka.md +++ b/applications/Awesome-Polka.md @@ -77,7 +77,7 @@ In summary, Awesome Polka's search infrastructure is designed to provide a seaml Search Element | Search Focused :-------------------------: | :-------------------------: -| +| **Solution on Static Project Pages** @@ -200,7 +200,7 @@ In addition to my technical skills, I have also been actively involved in the wi The user interface and search infrastructure of this project are largely complete and ready for discovery. To get a glimpse of the minimum viable product (MVP), you can either take a look at the repository or visit the website. - + ## Development Roadmap :nut_and_bolt: @@ -223,7 +223,7 @@ This project is planned as 1 milestone, it will be completed in one months. | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | **0e.** | Article | I will publish an **article**/workshop that explains what was done/achieved as part of the grant. | -| **1.** | UI & UX Development | **Home Page:** Visually appealing and user-friendly homepage which includes latest articles, popular categories and many more

**Projects Page:** Showcase page with detailed filtering and search infrastructure

**Project Detail Page:** Project details page to display detailed information about project with several modules like explained in the solution

**Articles Page:** Articles page to showcase informative articles related to the subject

**Article Detail Page:** Detail page for individual articles to display their full content

**Ranking Page:** Ranking page based on votes and token stats which is supported by CoinGecko api to showcase popular projects and articles

**Learn Page:** Useful resources to learn about polkadot ecosystem

**UX Improvements & Testing:** I will work to improve the user experience by ensuring that the user interface is fully compatible with mobile and tablet devices. | +| **1.** | UI & UX Development | **Home Page:** Visually appealing and user-friendly homepage which includes latest articles, popular categories and many more
**Projects Page:** Showcase page with detailed filtering and search infrastructure
**Project Detail Page:** Project details page to display detailed information about project with several modules like explained in the solution
**Articles Page:** Articles page to showcase informative articles related to the subject
**Article Detail Page:** Detail page for individual articles to display their full content
**Ranking Page:** Ranking page based on votes and token stats which is supported by CoinGecko api to showcase popular projects and articles
**Learn Page:** Useful resources to learn about polkadot ecosystem
**UX Improvements & Testing:** I will work to improve the user experience by ensuring that the user interface is fully compatible with mobile and tablet devices. | | *2.* | Project Owner Dashboard | As part of this milestone, I will be implementing both the frontend and backend components of the Project Owner Dashboard. This involves designing and developing the user interface (UI) for the dashboard, as well as building the necessary backend infrastructure to support its functionality. To ensure the quality of my work, I will conduct thorough testing to ensure that the dashboard is user-friendly and performs as expected. My ultimate goal is to provide project owners with a seamless and efficient experience when updating their pages and publishing articles on our platform. ## Future Plans From a49e02ca893916ef27e3a423618fb2d4214a2651 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 14 Mar 2023 20:36:04 +0100 Subject: [PATCH 172/665] Update index.md Add Awesome Polka --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index e7fd38a4354..92ac54ef685 100644 --- a/applications/index.md +++ b/applications/index.md @@ -64,6 +64,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | +| [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | ## 2022 From a11df153ea45ca2c84c3c12c4141cc5c7ab549f6 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 14 Mar 2023 20:39:09 +0100 Subject: [PATCH 173/665] Fix website --- applications/Claps.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/applications/Claps.md b/applications/Claps.md index 883e3004b48..35ccb460388 100644 --- a/applications/Claps.md +++ b/applications/Claps.md @@ -169,13 +169,13 @@ New project | 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will post an article on Twitter and Meta(Facebook) for English and Mandarin speakers communities. | -| 1 | Patient ID creation | \- Develop the patient ID creation tool in Javascript.
\- Generate a new ID on client-side for the patient based on BIP39. (12 words passphrase)
\- Encrypted key store(private key) by patient user’s password (AES-256 GCM mode)
\- Implement the decentralized design using public key cryptography. (Client signed by private key) | -| 2 | Patient profile management module | \- Patient profile off-chain management tools developed by JAVA
\- Support AWS S3 storage
\- Updating of patient profile
\- ECIES end-to-end data encryption to secure profile data transfer. | -| 3 | Patient ID on-chain authentication | \- zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by !ink Smart Contract
\- Receive credential by trust issuer (token file)
\- Zero-knowledge proof for on-chain authentication to prove patient ID without private information | -| 4 | Challenge card dapp module | Provide a way for users to set personal goals, track their progress, and receive rewards for their efforts. Dapp developed in ink! smart contract.

\- Add challenge card
\- Add personalized mission
\- Delete challenge card
\- Receive daily mission
\- Receive rewards by mission completed
\- Receive rewards by challenge completed
\- Rewards by fungible tokens | +| 1 | Patient ID creation | \- Develop the patient ID creation tool in Javascript.
\- Generate a new ID on client-side for the patient based on BIP39. (12 words passphrase)
\- Encrypted key store(private key) by patient user’s password (AES-256 GCM mode)
\- Implement the decentralized design using public key cryptography. (Client signed by private key) | +| 2 | Patient profile management module | \- Patient profile off-chain management tools developed by JAVA
\- Support AWS S3 storage
\- Updating of patient profile
\- ECIES end-to-end data encryption to secure profile data transfer. | +| 3 | Patient ID on-chain authentication | \- zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by !ink Smart Contract
\- Receive credential by trust issuer (token file)
\- Zero-knowledge proof for on-chain authentication to prove patient ID without private information | +| 4 | Challenge card dapp module | Provide a way for users to set personal goals, track their progress, and receive rewards for their efforts. Dapp developed in ink! smart contract.

\- Add challenge card
\- Add personalized mission
\- Delete challenge card
\- Receive daily mission
\- Receive rewards by mission completed
\- Receive rewards by challenge completed
\- Rewards by fungible tokens | | 5 | Create database | Create a docker container to start a mySQL database to store all the information, define the models to store and create tables and indexes. | | 6 | Database encryption module | We will implement a database encryption AES-256 GCM module of all stored and transmitted data to prevent unauthorized access or tampering. Developed by JAVA. | -| 7 | Android apk | We will provide android apk for above challenge card data input and functional verification
We will provide android apk for user challenge card with wallet to receive rewards | +| 7 | Android apk | We will provide android apk for above challenge card data input and functional verification
We will provide android apk for user challenge card with wallet to receive rewards | | 8 | Testing | Achieve a testing coverage of the functionalities above 90% | ### Milestone 2 - CPatient Engagement and Data Sharing @@ -191,8 +191,8 @@ New project | 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish an article/workshop video that explains how Claps Health Benefits to patients and healthcare business. Patients are the end-users of Claps Health application, so it's important to explain how Claps Health will benefit them. The article/video will cover topics such as how the app helps patients manage their health, how it improves access to healthcare, and how it ensures data privacy and security. Article/Workshop will be in English and Mandarin. | -| 1. | Claps Health Data Sharing protocol: Consent management | We will implement a health data sharing protocol based on dapp to enable secure sharing of health data among various stakeholders. Developed by !ink Smart Contract.
\- Accept consent
\- Revoke consent
\- View data sharing requests

a. The consent data will be stored anonymously, without any personal identifying information.
b. The smart contract will be accessible to authorized parties using public key cryptography.
c. Users are able to request that their data be permanently deleted from the system at any time (Please reference Data privacy control module)
d. Users are able to see a list of all the organizations that have requested access to their data, along with the specific types of data being requested, and be able to manage these requests. | -| 2. | Claps Health Data Sharing protocol: Patient data feed | We will implement a health data feed on the backend, developed using Java.
\- Subscribe data feed by numbers of Patient ID
\- Unsubscribe data feed by Patient ID

a. The data feed will allow authorized parties to access and subscribe to a patient's health data in real-time.
b. The data will be encrypted using ECIES to ensure data security.
c. The data feed will be accessible through a secure API, which will authenticate and authorize users using public key cryptography.
d. Support delete data by patient required. | +| 1. | Claps Health Data Sharing protocol: Consent management | We will implement a health data sharing protocol based on dapp to enable secure sharing of health data among various stakeholders. Developed by !ink Smart Contract.
\- Accept consent
\- Revoke consent
\- View data sharing requests

a. The consent data will be stored anonymously, without any personal identifying information.
b. The smart contract will be accessible to authorized parties using public key cryptography.
c. Users are able to request that their data be permanently deleted from the system at any time (Please reference Data privacy control module)
d. Users are able to see a list of all the organizations that have requested access to their data, along with the specific types of data being requested, and be able to manage these requests. | +| 2. | Claps Health Data Sharing protocol: Patient data feed | We will implement a health data feed on the backend, developed using Java.
\- Subscribe data feed by numbers of Patient ID
\- Unsubscribe data feed by Patient ID

a. The data feed will allow authorized parties to access and subscribe to a patient's health data in real-time.
b. The data will be encrypted using ECIES to ensure data security.
c. The data feed will be accessible through a secure API, which will authenticate and authorize users using public key cryptography.
d. Support delete data by patient required. | | 3. | Data privacy control module | We will implement a data privacy control module to allow patients to exercise their rights under the GDPR, delete their personal data by patient’s requirement. Developed by JAVA. | | 4. | Audit logging on web backend | The web backend will implement an auditable log of all access to the system, including who accessed it and what actions were performed, to help detect and respond to security incidents. Developed by JAVA. | | 5. | Support for Mandarin speakers community | Translate the app to Mandarin and add support to switch languages | From 91338239ba14cee4af1fd916efc38eb4f1edde08 Mon Sep 17 00:00:00 2001 From: Tomas Rawski Date: Thu, 16 Mar 2023 05:59:51 -0300 Subject: [PATCH 174/665] openPayroll proposal (#1592 * openPayroll proposal * Update openPayroll proposal --- applications/openPayroll.md | 280 ++++++++++++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 applications/openPayroll.md diff --git a/applications/openPayroll.md b/applications/openPayroll.md new file mode 100644 index 00000000000..dc6c0d098c9 --- /dev/null +++ b/applications/openPayroll.md @@ -0,0 +1,280 @@ +# Open Payroll + +- **Team Name:** Polkadrys Labs +- **Payment Address:** 0xe675dC5B4957d78B740D13A58FBC51bD33De068D (DAI - Ethereum network) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +Blockchain decentralized nature, transparency, and immutability make it a promising solution for many industries. We believe that blockchain technology has the potential to revolutionize the way we live our lives, and we want to be a part of that revolution. + +At our core, we are a team of innovators who are passionate about leveraging blockchain technology to build real-life solutions. We believe that the power of blockchain can be harnessed to create a more transparent and secure world. Our goal is to create solutions that are not only technologically advanced, but also practical and applicable to everyday life. + +We ran into a common problem while working for a crypto development shop: The payment process sometimes became erratic, partial payments, late payments and no transparency into how the final number that was assigned in a spreadsheet actually came to be. We believe that the blockchain can make this transparent to the members of a collective, without having to sacrifice privacy nor making it super cumbersome to use. + +In recent years, a growing number of organizations have made a commitment to financial transparency, recognizing the benefits of sharing information about earnings with their employees and stakeholders. Tech workers' cooperatives in the Argentine Federation of Cooperatives [FACTTIC](https://facttic.org.ar/) are a notable example of this trend, providing detailed financial information to members. + +In addition to cooperatives, several companies have positioned themselves as "open numbers" enterprises, providing employees with access to information about the salaries of both workers and owners [Ten Pines](https://cultura.10pines.com/#numeros-abiertos) is a good example of this trending culture. [Buffer](https://buffer.com/resources/revenue-dashboard/), for instance, publishes the salaries of all its employees on its website, and [Whole Foods](https://www.tableau.com/solutions/customer/whole-foods-market-democratizes-data-across-460-retail-stores-with-tableau) allows employees to access financial information on a need-to-know basis. These efforts reflect a growing recognition of the importance of financial transparency in promoting trust and accountability within organizations. + +The benefits of financial transparency are not limited to the private sector, however. Nonprofit organizations such as Charity: Water and The Wikimedia Foundation have also made transparency a priority, regularly publishing detailed financial reports and making them available to the public. As transparency becomes more widespread, it is likely to become an increasingly important tool for promoting fairness, equity, and accountability across a range of sectors and organizations. + +### Overview + +The objective of Open Payroll is to meet the needs of organizations that wish to make transparent payments during a given period. +The objective is to create a contract that enables anyone to configure and generate their own payroll system. + +The payroll contract is owned entirely by its creator. This creator could be a DAO address, a multisig or a single person. The contract manages a treasury from where all the payments are deducted. There is a base amount and a set of multipliers associated to the addresses of the payees. + +E.g. We create a payroll contract for paying developers salaries. We will have a base amount and only one multiplier which is the employee's seniority. +Alice is a junior employee and Bob is a senior employee. Alice's multiplier is 1 and Bob's multiplier is 2. The base amount is 1000. The payroll contract will allow Alice to claim 1000 and Bob 2000 every period. + +The payroll smart contract transparently displays the addresses of all participants, along with the multipliers being utilized, allowing complete visibility to everyone. The initial rollout of this project will be super opinionated and geared towards an open payroll system, but this notion can later be applied to various scenarios, such as salaries, recurring payments, subscriptions, etc. + +### Project Details + +Based on what we exposed in the project Overview section and our past experience, we decided to implement a tool to takle this use case of the blockchain technology stack. + +We'll use following tech stack in the latest stable version: React, Next.js, MUI, PolkadotJS wallet extension, Ink!, Rust, Docker, Git. + +These are the steps that will be done to implement the proposed solution: + +####
1.- Design a front end based on the wireframe proposed + +This is the wireframe that we propose for the frontend: + +- Contract Creation Screen + +![New Contract](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_new_contract.jpeg) + +--- + +- Add Beneficiary Screen + +![New Payee](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_new_payee.jpeg) + +--- + +- Contract Overview Screen + +![Contract Overview](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_contract_overview.jpeg) + +--- + +- Claim Payment Screen + +![Claim Payments](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_claim_payment.jpeg) + +--- + +- Contracts Dashboard Screen + +![Contract List](https://raw.githubusercontent.com/rtomas/resources/main/polkadot-openPayroll/img_contract_list.jpeg) + +The development will be focused on providing a good user experience, taking into account the user personas that will be using the product. + +In this step we will create the mockup in Figma. + +#### User Personas + +- An owner or many owners of a company that want to open the numbers in order to be transparent in the way they manage payments in the organization. + +- A cooperative that wants to implement an automated payment for the payroll. + +- A group managing the treasury, aiming to maintain easy regular payments while focusing on its growth. + +#### 2.- Develop the user interface based on the design created in the previous step. + +Implement a frontend with focus on usability, since we understand that the main obstacle for this type of solutions is the difficulty in their use by 'normal users' +The frontend includes: + +- A Dashboard for the owner of the contract, where they can create a new contract and configure its parameters +- A dashboard for the payees of the contract, where they can claim the payments that are already released. + +#### 3.- Implement and test the payroll contract + +Build an Ink! contract, which purpose is to manage a treasury, that can only be spent by the parameters set by the owner at creation point. Those parameters can be changed over the time and more beneficiaries can be added or removed. The funds in the treasury can be withdrawn by the owner of the contract if needed. This could be helpful in the case of migrating to a new version of openPayroll, amending a mistake of sending too much funds, etc. The data contained on chain are the addresses of the beneficiaries, the owners address, the period, the base payment and the multipiers. This information is public and accessible though the blockchain explorer for every person. Each payee multipliers can be updated individually E.g. if a developer is promoted, his seniority multiplier will be changed so he will earn more money. The contract also will be pausable, so the owner can stop the payments if needed. We will provide some helper functions to let the payees know how much they can claim at any given time, and also a function that the owner can call to know how much will be paid in the next period with the current parameters. + +#### 4.- Integrate the interface with the contracts + +Use polkadotJs to generate all the posible interactions with the contract, those include: + +- Creation parameters needed to create a new payroll contract: + + - Base amount + - Multipliers + - Period + - Beneficiaries + +- Contract interactions from the owner's perspective: + + - Change the current parameters in the contract. + - Add or remove beneficiaries. + - Withdraw funds from the treasury. + - Pause the contract. + - Change the owner of the contract. + - Calculate the amount that will be paid in the next period. + +- Contract interactions from the payees' perspective: + - Calculate the amount that they can claim. + - Calculate the amount that they can claim in the next period with the current parameters. + - Claim the payments that are already available. + +#### 5.- Quality Assurance + +In this step we'll work on security and usability, checking the functionality and reviewing all of the interactions between the UX and the smart contracts. +This includes building a suite of automated testing not only including happy paths, but also including edge cases. We aim for a high code coverage to minimize the chances of bugs. We will perform e2e testing using tools such as Selenium or Puppeteer to ensure that the frontend and the smart contract are behaving as expected. + +#### 6.- Build a Dockerized deliverable + +Our deliverable is built using Docker to ensure easy reproducibility across various architectures and computers. All the necessary functionality is containerized, making it simpler to deploy and run. + +#### 7.- Write project documentation + +Build meaningful documentation, including: + +- Video and blog post on how to run the tool. +- Video and blog post on how to create a payroll contract from the ui and showing how to claim the amount released on a period of time. + +### Ecosystem Fit + +A transparent payroll smart contract fits into the Polkadot/Kusama ecosystem by being built on one of the independent blockchains connected to the Polkadot network. The smart contract will be used to automate and secure payroll transactions between diffent actors, with all information being recorded transparently on the blockchain without sacrificing privacy. + +By utilizing the Polkadot network, the payroll smart contract can benefit from the security and scalability of blockchain technology, while also being able to communicate and transact with other chains and technologies in a decentralized and trustless way. Ultimately, this could lead to a more efficient and transparent payroll system that empowers both employers and employees in a completely decentralized web where users are in control. + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- Where and how does your project fit into the ecosystem? + As far as we can tell there is no work being done by the community in this type of solutions and we believe this is a commonn enough problem that a good community solution could help us catch up to other blockchains that already have mature solutions present. +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + See [User Personas](#user_personas) +- What need(s) does your project meet? + We believe there are a lot of small projects in the polkadot space that require recurring payments for services and that those are currently done outside the ecosystem. This project would create a way to make those payment within the Polkadot/Kusama umbrella with good UI, making it simple for newbie orgs to use it. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + It has some passing similarities with opengov and treasury, but our project is a smart contract instead of a pallet and is geared towards a much more simple use case. + We found a smart contract that could be helpful for inspiration but it doesn't have the same approach as our vision. (https://docs.openbrush.io/smart-contracts/payment-splitter/) + +## Team :busts_in_silhouette: + +### Team members + +- Luca Auet +- Ezequiel Golub +- Gabriel González +- Tomas Rawski + +### Contact + +- **Contact Name:** Gabriel González +- **Contact Email:** gabrielnicolasgonzalez@gmail.com + +### Legal Structure + +We don't have a legal structure. We are a group of developers that want to build together. Probably we will create a legal structure for future projects. We plan on dogfooding the project and make our payments through the smart contract we are building + +### Team's experience + +We know each other from different places but we began working together at the Polkadot Blockchain Academy 2023 in Buenos Aires, Argentina. We formed a tight knit study group and helped each other to better navigate the Academy's teaching and to complete the myriad of coding assignments we needed to do in order to get certified as a Blockchain developer, which we all accomplished. + +Here are some brief backgrounds on each of us: + +- Ezequiel has experience as a CTO of an latam edtech with 60k paying users. He has worked as Engineering Director in Rappi managing over 50 developers. Has a lot of previous experience as a backend dev and as devops. +- Gabriel, Luca and Tomas are advocates from The Graph Protocol. They have experience building subgraphs for different projects including CowSwap, MakerDAO and Lens protocol. +- At the Latam Hackathon of Polkadot (https://polkadothackathonlatam.com), Gabriel and Luca won the first place in the Web3/Blockchain Tooling category with their project (https://polkadothackathonlatam.com/proyecto-inner/LactobaciloGG/usuario-single/). +- Tomas is a full-stack and Solidity developer with several years of experience. +- Luca is developer with experience in low-level programming, blockchain technology, and embedded systems. + +### Team Code Repos + +- https://github.com/protofire/messari-subgraphs +- https://github.com/protofire/maker-protocol-subgraph +- https://github.com/rtomas/OracleSolver-ChainLink +- https://github.com/rtomas/lens-protocol-subgraph +- https://github.com/cowprotocol/subgraph +- https://github.com/alongoni/polkadot-contract-wizard +- https://github.com/Altoros/swarm-markets-subgraph + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/0xLucca +- https://github.com/ezegolub +- https://github.com/GabrielCamba/ +- https://github.com/rtomas + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/lucaauet/ +- https://www.linkedin.com/in/ezegolub/ +- https://www.linkedin.com/in/gabriel-nicolas-gonzalez/ +- https://www.linkedin.com/in/tomas.rawski + +## Development Status :open_book: + +We started to work after we finished the Polkadot Blockchain Academy. We explored the Polkadot ecosystem and we found that there is a lot of potential for solving real world community problems with the technology currently available. + +To ensure a smooth and intuitive user experience, we've built a [Wireframe](#step1) that outlines the user flow of the project. This wireframe serves as a visual representation of how the user will interact with the project and provides a clear roadmap for the design and development process. By creating a wireframe at the early stages of development, we can identify any potential usability issues and make adjustments before investing significant time and resources into the design and development process. Ultimately, this will lead to a better user experience and a more successful project. + +## Development Roadmap :nut_and_bolt: + +Described in project details. + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 20,000 USD + +### Milestone 1 — UI and Contract Development + +- **Estimated duration:** 4 months +- **FTE:** 2 +- **Costs:** 20,000 USD + +| Number | Deliverable | Specification | +| ------: | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can generate its own smart contracts. Corresponds to [step 7](#step7) of the Project Details. | +| **0c.** | Testing and Testing Guide | The code will have unit-test coverage to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a docker container with current milestones deliverables to easily run the application. The functionality to be implemented corresponds to [step 6](#step6) of the Project Details. | +| 1. | Desing frontend interface (Figma) | The functionality to be implemented corresponds to [step 1](#step1) of the Project Details section. | +| 2. | Develop the interface based on the previous task result (React, Next.js, PolkadotJS wallet extension, Jest) | The functionality to be implemented corresponds to [step 2](#step2) of the Project Details section. | +| 3. | Develop the payroll smart contract (Ink!, Rust) | The functionality to be implemented corresponds to [step 3](#step3) of the Project Details section. | +| 4. | Integrate the UI with the contracts. | The functionality to be implemented corresponds to [step 4](#step4) of the Project Details section. | +| 5. | Quality Assurance | The functionality to be implemented corresponds to [step 5](#step5) of the Project Details section. | + +... + +## Future Plans + +After the completion of this project, we would love to broaden its scope. + +**Multiple Assets** + +- Add support for allowing the payee to choose the asset to be paid in. +- Add support for allowing the treasury to hold different assets. + +**Pallet** + +- Create a pallet based on this funcionallity that can be used by other projects. + +**Cover Different Scenarios** + +- Provide more customizable features for different scenarios such as: + Define start and end date for a payment, define the amount of times to repeat a payment. +- We a few changes this project can also be used to automated DAO payroll. +- Paying the rent, paying for subscriptions, paying for services, etc. +- DCA (Dollar Cost Averaging) for crypto assets. +- Automated savings. +- Gradual token incentive distribution to replace vested air drops. + +**Token Streaming** + +- Allow the treasury to stream tokens to the payees over time instead of them receiving the full amount at once per payment. + +## Referral Program (optional) :moneybag: + +- **Referrer:** Jose Ignacio Belossi (PEPE.Dot) +- **Payment Address:** 0x86ebcf938616eaa85391ed8f7a84fc91b6d15462 (USDT) + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Polkadot Blockchain Academy From 8d6b3d029cda5a9a4b90a66017983058b9612521 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 16 Mar 2023 10:41:27 +0100 Subject: [PATCH 175/665] Update index.md ink!/pallet/solidity performance benchmarking M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 92ac54ef685..b90686de39b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -39,7 +39,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | From f8c20df63c018b84c11e13373ccabbb1769d96fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 16 Mar 2023 11:15:41 +0100 Subject: [PATCH 176/665] Update benchmarking RFP --- .../implementation-benchmarking.md | 20 ++++++++++--------- docs/rfps.md | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) rename docs/RFPs/{Open => Under Development}/implementation-benchmarking.md (92%) diff --git a/docs/RFPs/Open/implementation-benchmarking.md b/docs/RFPs/Under Development/implementation-benchmarking.md similarity index 92% rename from docs/RFPs/Open/implementation-benchmarking.md rename to docs/RFPs/Under Development/implementation-benchmarking.md index f988a29405f..812327f734b 100644 --- a/docs/RFPs/Open/implementation-benchmarking.md +++ b/docs/RFPs/Under Development/implementation-benchmarking.md @@ -1,7 +1,7 @@ # ink!/pallet/solidity performance benchmarking -* **Status:** Open -* **Proposer:** [mmagician](https://github.com/mmagician) +- **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/ink-pallet-benchmarking.md) +- **Proposer:** [mmagician](https://github.com/mmagician) ## Project Description :page_facing_up: @@ -10,6 +10,7 @@ When a new team comes to the ecosystem, they are faced with a decision on how to Traditionally in substrate, this has been a choice between a smart contract vs. runtime module (a.k.a. pallet) and elaborated on [in this StackOverflow question](https://stackoverflow.com/questions/56040779/when-should-i-build-a-substrate-runtime-module-versus-a-substrate-smart-contract) or [this entry in Substrate Developer Hub](https://substrate.dev/docs/en/knowledgebase/smart-contracts/#smart-contracts-vs-runtime-development). The choice has since been augmented by the possibility to deploy solidity contracts to an EVM-compatible chain, or even writing solidity code and compiling it to WASM with the help of a [solang](https://solang.readthedocs.io/en/latest) compiler. As substrate is gaining traction, more and more tools will enable developers to write their logic in their language of choice and deploy on-chain, such as: + - Move: [diem on polkadot](https://docs.pontem.network), PoC finished - Yatima: [pure functional language for web3](https://github.com/w3f/Open-Grants-Program/pull/463), application in progress @@ -20,14 +21,14 @@ Before starting this effort, it might make sense to take a look at the official ## Deliverables :nut_and_bolt: -* **Total Estimated Duration:** 4 weeks -* **Full-time equivalent (FTE):** 1 -* **Total Costs:** 10,000 DAI +- **Total Estimated Duration:** 4 weeks +- **Full-time equivalent (FTE):** 1 +- **Total Costs:** 10,000 DAI ### Milestone 1 - Basic benchmarking -* **Estimated Duration:** 2 weeks -* **Costs:** 5000 DAI +- **Estimated Duration:** 2 weeks +- **Costs:** 5000 DAI | Number | Deliverable | Specification | @@ -39,8 +40,8 @@ Before starting this effort, it might make sense to take a look at the official ### Milestone 2 - Integrate native solidity & `solang`-compiled solidity -* **Estimated Duration:** 2 weeks -* **Costs:** 5000 DAI +- **Estimated Duration:** 2 weeks +- **Costs:** 5000 DAI | Number | Deliverable | Specification | | |--------|---------------------------------------|--------------------------------------------------|---| @@ -53,6 +54,7 @@ Before starting this effort, it might make sense to take a look at the official ### Milestone 3 - More complex application logic Apart from just reading & writing basic types, all the above implementations should be extended to include more complex logic. The scope is up to the implementers, but here are some ideas: + - cross-contract calls - emitting events - storage-agnostic logic (self-contained methods performing e.g. some heavy computation) diff --git a/docs/rfps.md b/docs/rfps.md index 479c3ba22b6..a84eec46bf7 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -41,7 +41,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | | [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | -| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟢 | 20.07.2021 | +| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟡 | 16.03.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | From 8a26574f411be1c2e67a15b51ab5f3e107b4f625 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 16 Mar 2023 15:53:03 +0100 Subject: [PATCH 177/665] Update solidity-trie-verifier.md --- applications/solidity-trie-verifier.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/solidity-trie-verifier.md b/applications/solidity-trie-verifier.md index b1cf75708d8..8da9915e145 100644 --- a/applications/solidity-trie-verifier.md +++ b/applications/solidity-trie-verifier.md @@ -8,7 +8,7 @@ ### Overview -This project aims to deliver an implementation of the parity trie [verifier](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233) as required by state proof checking algorithms( [read_child_proof_check](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1102), [read_proof_check_on_proving_backend](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1128) ) in the Solidity programming language, which would include various sub implementations( for example [NodeCodec](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81) for both layoutv0 & layoutv1) required to build trustless bridging protocols from the Polkadot ecosystem to the EVM ecosystem. +This project aims to deliver an implementation of the parity trie [verifier](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233) as required by state proof checking algorithms ([read_child_proof_check](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1102), [read_proof_check_on_proving_backend](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1128)) in the Solidity programming language, which would include various sub implementations (for example [NodeCodec](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81) for both layoutv0 & layoutv1) required to build trustless bridging protocols from the Polkadot ecosystem to the EVM ecosystem. Goal: To create a primitive for more generalized bridging protocols like IBC, it is more efficient to verify Parachain state/storage than to use custom implementations which Darwina and Snowfork do. From 19475e3d44e4dc10a133cb19769d3f43986446cb Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 16 Mar 2023 15:55:42 +0100 Subject: [PATCH 178/665] Update solidity-trie-verifier.md Add links for snowfork, darwinia --- applications/solidity-trie-verifier.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/solidity-trie-verifier.md b/applications/solidity-trie-verifier.md index 8da9915e145..32bcfc298b4 100644 --- a/applications/solidity-trie-verifier.md +++ b/applications/solidity-trie-verifier.md @@ -10,7 +10,7 @@ This project aims to deliver an implementation of the parity trie [verifier](https://github.com/paritytech/trie/blob/42f086bc8748f25e978da10a9cefdb396a72b158/trie-db/src/triedb.rs#L233) as required by state proof checking algorithms ([read_child_proof_check](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1102), [read_proof_check_on_proving_backend](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/state-machine/src/lib.rs#L1128)) in the Solidity programming language, which would include various sub implementations (for example [NodeCodec](https://github.com/paritytech/substrate/blob/129fee774a6d185d117a57fd1e81b3d0d05ad747/primitives/trie/src/node_codec.rs#L81) for both layoutv0 & layoutv1) required to build trustless bridging protocols from the Polkadot ecosystem to the EVM ecosystem. -Goal: To create a primitive for more generalized bridging protocols like IBC, it is more efficient to verify Parachain state/storage than to use custom implementations which Darwina and Snowfork do. +Goal: To create a primitive for more generalized bridging protocols like IBC, it is more efficient to verify Parachain state/storage than to use custom implementations which [Darwinia](https://darwinia.network/) and [Snowfork](https://snowfork.com/) do. ### Project Details From 73b12a34b5ee44a965d881a14b0ede0ba565c0fa Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 17 Mar 2023 06:49:36 -0400 Subject: [PATCH 179/665] Update index.md (#1616) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b90686de39b..dea64152f79 100644 --- a/applications/index.md +++ b/applications/index.md @@ -155,7 +155,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures/) | [Typechain Phase 2](./typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | | [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☒ | -| [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☐ | +| [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☒ | | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | From e4c8ce666cae1570b5995b491080e893686792a9 Mon Sep 17 00:00:00 2001 From: Nikhil Desai Date: Sat, 18 Mar 2023 13:30:26 +0530 Subject: [PATCH 180/665] amend proposal to add Payment Address (#1619) --- applications/ink-pallet-benchmarking.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/ink-pallet-benchmarking.md b/applications/ink-pallet-benchmarking.md index 363d13b1aea..465b8da8d46 100644 --- a/applications/ink-pallet-benchmarking.md +++ b/applications/ink-pallet-benchmarking.md @@ -1,7 +1,7 @@ # ink!/pallet/solidity performance benchmarking - **Team Name:** Talentica Software -- **Payment Address:** +- **Payment Address:** 0x8bd54ec34A35f3A2f668A33d9578b5C3A6b730dE - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview : From 3f3f9411abf199e97a3ad16f5673bb2dc159bd26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Sat, 18 Mar 2023 21:36:31 +0100 Subject: [PATCH 181/665] Swap icons for Polkadot iconset --- README.md | 6 +- docs/help.md | 6 +- static/img/Learn.svg | 1 + static/img/Reddit.svg | 1 + static/img/Twitter.svg | 1 + static/img/Web.svg | 1 + static/img/Wiki.svg | 1 + static/img/Youtube.svg | 1 + static/img/everyone-1.svg | 271 ------------------------------ static/img/icon-documentation.svg | 1 - static/img/like.png | Bin 1231 -> 0 bytes static/img/map.png | Bin 1511 -> 0 bytes static/img/medium.png | Bin 1520 -> 0 bytes static/img/reddit.png | Bin 1787 -> 0 bytes static/img/twitter.png | Bin 1499 -> 0 bytes static/img/web.png | Bin 1734 -> 0 bytes static/img/youtube-play.png | Bin 1250 -> 0 bytes 17 files changed, 16 insertions(+), 274 deletions(-) create mode 100644 static/img/Learn.svg create mode 100644 static/img/Reddit.svg create mode 100644 static/img/Twitter.svg create mode 100644 static/img/Web.svg create mode 100644 static/img/Wiki.svg create mode 100644 static/img/Youtube.svg delete mode 100644 static/img/everyone-1.svg delete mode 100644 static/img/icon-documentation.svg delete mode 100644 static/img/like.png delete mode 100644 static/img/map.png delete mode 100644 static/img/medium.png delete mode 100644 static/img/reddit.png delete mode 100644 static/img/twitter.png delete mode 100644 static/img/web.png delete mode 100644 static/img/youtube-play.png diff --git a/README.md b/README.md index 558793ac623..440d94601da 100644 --- a/README.md +++ b/README.md @@ -257,10 +257,14 @@ It is **not** a chance to pitch your project, especially since only a small subs ### Additional Information -| | | | | | | +
+ +| | | | | | | | :-: | :-: | :-: | :-: | :-: | :-: | | [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +
+ ## :rocket: Alternative Funding Sources diff --git a/docs/help.md b/docs/help.md index 971d657f453..fcd26c13545 100644 --- a/docs/help.md +++ b/docs/help.md @@ -34,6 +34,10 @@ It is **not** a chance to pitch your project, especially since only a small subs ### Additional Information -| | | | | | | +
+ +| | | | | | | | :-: | :-: | :-: | :-: | :-: | :-: | | [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | + +
diff --git a/static/img/Learn.svg b/static/img/Learn.svg new file mode 100644 index 00000000000..75d935f8b86 --- /dev/null +++ b/static/img/Learn.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Reddit.svg b/static/img/Reddit.svg new file mode 100644 index 00000000000..4425e7e763b --- /dev/null +++ b/static/img/Reddit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Twitter.svg b/static/img/Twitter.svg new file mode 100644 index 00000000000..c4ba1127378 --- /dev/null +++ b/static/img/Twitter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Web.svg b/static/img/Web.svg new file mode 100644 index 00000000000..70048bab72c --- /dev/null +++ b/static/img/Web.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Wiki.svg b/static/img/Wiki.svg new file mode 100644 index 00000000000..f85a36ac7b1 --- /dev/null +++ b/static/img/Wiki.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/Youtube.svg b/static/img/Youtube.svg new file mode 100644 index 00000000000..b6e54b1573a --- /dev/null +++ b/static/img/Youtube.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/everyone-1.svg b/static/img/everyone-1.svg deleted file mode 100644 index f227285ea4b..00000000000 --- a/static/img/everyone-1.svg +++ /dev/null @@ -1,271 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/static/img/icon-documentation.svg b/static/img/icon-documentation.svg deleted file mode 100644 index ac219a7b424..00000000000 --- a/static/img/icon-documentation.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/static/img/like.png b/static/img/like.png deleted file mode 100644 index 3eb5f1b271eea0bada9a0893abef32249403f0b2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1231 zcmV;=1Tg!FP)K~#7F?VZha z+CUVAuaix(3MD8Nm=2<4cBTW=0i*)df$2cF0z1pBWLE&GKy(1vC9BCiA^8YdfEkH5 zZ^V4(+#@F;8u9rZ{mf{j8^~f<o6@Okq2sf}xsPnB@mNL75 zgp=f-I?oU!oP$v3UT34Dn3Cxv*!>cF303A)Ck3C>Ls{xX=m{it2Ht8tr>Y}3%mgyU zIxjkej9r0==m3JD-2olEToHOGGYBNWt^!;T=v+0A;l{r9+|YNL!ZI_sCCwx=SR#R& z!c1}xW)iq9%p?hzNC2oSO@a&4htn{zl4k&vPo5b%W&%L@>}8CO2++^-+_u@Eql=LY zfbwZfh7*GXA90+S&Iq1Eklar?zhFQBx2nlzLKu(%);8F+q&SlZfbETTEsY&Rhenk% z2=9Cr2#sWaEtao*X!u|RFV}=}V0VwE3ij1&&YLQ(S8xO`w+&RqQS~qCf+z5__kXuSH(!2FvI!%!tjqOvSgo6SZMv`o`fMNy;%gTcvl&}XL8 zY5sr8br8$tGGF&-G_p~_o4Q=q-2;gwsi&aNkmy6}nM@{oQje{N+T{F>s9io!xf&ji z$Ld_D606lrKR-S`s&k>X83o5x!6`?h!{JbwLRA<9L7w+i{~;JFIjst2=}>PYrj*>p zI+z5%?uS|SzjUyX0%H{q=`<|>19x|Kkb>S9gNa-)%Wd^~{|hPT3I-Fo;9D@D4^EJR zJ_`X8Uq~=ZYm8s&B#hg_w-4TKx41$EY!$p-uOWriif!5)pWv657f69yFbhvlPmsdH z!vi?sI_b`PyllgGC0B;8F}i}X4fTg`3ue8sZ$6(ZTTt7~a`XO(jI&YdYNXC^ZY=B? zRN*$C9L?Hr+b%~Fxzwfw!6^w|SZJ6{vPHR+{M2b~squ?Twk($tliNPDMpu#r$=w^ePX%mHYsrG-D%1u&V<8)5ELoUb%HFN4p`Z;r zTe3j8ls98!qUOTASF%vK85*#5K5Qyks9Z|YBsdhdkw+y9mPC^f=zswJ zp-4^X?4d|R1VH)hrSm7V#sHL0o){Nm0YF`O=D08m0P0G!022$iFH5Z4l509gUceGD z+!S_BVpxVwSNi&p{0Kq_;9v8=LJYS=HieEYqWi)FxLM6992?1r;D%@sFC=M01eu~q zY>XZajYY699|X<20;<^Fjycj@FAMNiHB~Deyh1Qz`=zNQJH+mBgqL_}Dov1nE@B1S tg6ojv0Q;~04RHLmzopDS#j=bD{sYMjR&CC}t?K{)002ovPDHLkV1kBaCuINt diff --git a/static/img/map.png b/static/img/map.png deleted file mode 100644 index 3dd3427eac42932e8a2846ab7921b222e7f6e811..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1511 zcmVBoK3@!C^$vFGrWf)!6gtHUKlP6b0KDi36_nxm!M@%4O7U8TE{2D2zvqwJA+ zBgQ#&3OjnCL+Ee?Lxc{X7<32hyv8DE9cNI8080xPgMg#6=2MKr*Y+jrG=*o(FfP%C za0X9EFiydS@B+d}FmAzyFo6&f0QnbXf*oTY!Z5WW&j92H7M#H`&H>~HuJII(5MV#! z+-2# zOb`S?ag2C>f5+R~8=jw^@$m3~`}_OiyGQ(u<M(+Iv? zMT(w?AY4deo%zMZMZPUO3f(I)lt~uOxPUy%vfLGTE)OCzs^~N;9!VCA;w~18+%@*4E-QuRWMFMg6L z2s@)TVY~QI{)WG80vkfAUTBCYCQ^l9DAt5Hj(eYz|ECGOrd0i~oLT>bM5+Ky7B@uP zE+X@qQuQ;uv;kw z-&O*L5CU@xHn_?s@Eq6I*VcbCei(uXt6x$Gwd~W=lhwLh#;bLmDDM)fdSWA*5KE}r zz+2koHRx+4uG7N857R}sTvMjg;5Cn1A^cT#3m^4_wV1~3U$%K%gYOd@h1fqbxgOnx7OolXJ>GQ)6-MyafX7z zD7-@kxt_J?;cWu}9&of0IX^#dJ m3xT~Y>}#8aCIW zW#?AxVX;Xai?!7g0KN;-7#H`2=eW1ZU#Vaf&tSM%VW}YQEx9&zpK2&n+lrr&S#Meu zI95`q)^%o05MG1U#Wu?>ZSu&l~YQ*mmZg}c1G%=^N{vMYzoV8Nx90`?8t zlng4WOl$&&iVD~(Y*W;+m8_kqPc;>^ONYnAy{0l_xrn_MQ$+>s)Zr;}4P=A{aFR~d zgWpX#W6!x>8#8o340tc-FS5h4jqnuZ8>)=Z0qU&SHo{Zbv1RB1Rlb<4#>UEG-jWe| zA_cq_c#UOjtT5&!Gt{7Izli^!XjjsYj}N@QzT)xm(Z?FIHvENw6BlYmcZwNf3$Vk> z0OSW+nZW@995zL=(b=X*LR9ApfGALkM$> zUo5ramiS6B@*JKJW1NEZVGPe;xU#RC7xawsNS*xbCvhxZd4BszJ zrP!h2KiJJnQ@J_CJqGMf?FzmH-ULMsu>R`b0L`!cEyetQ^;uE{ega|EI_Nm!L;Nuzjm)m zCI=*(B>yS1K}5nskjt!O4l*K88kq{m5Ai0Un)xVGBb?N}Y-I}E2qboiu(j2uRu@Q^ zZ-`TD@}hIZ(G<9d&JZ!w98l+#iqO6+5g{3lH6R6n$<^ksNTaQ_4eiq-CT5AWq`72? ziKvjKFqfNJSx!2|Z zrpZVHK+G|w!G(haKVq1r%spoMAh|!u`~?Rxq*a@yOb!PcV6y*kYN=sK0buI?bZRj! z4D}sVZV>t6bA-^5?4P^WcYZLuvA`_X1$AKe1XB&3Yp**WYVmmuF2E#rwOXO7Dr8xP z5G)o891aIGO@pE+FcDOXi=j8rIRh+>zK#?vq-d|5j1+rPCjBf$do8mkHF{WZ7G%Pg z=;d-L`j|*`ZW3H^7BU2^NuYt(WNf9<}Sb$l00Vnau_JM7+a=gYF#k@Abqy|_o}RGZ@8N;=5(pBUAwpf(e>f(CkN)QDAlH)ufX~8 zkc?o0en)?Ie}6Ar&^tDgtuqUjY`5F@?aRrAut6Uwm_{SB;0`%9?yZGGPzOo>u5Sg- zr{L&2IUT(nrLVlrHYt7Wwfm= z5WT*=ecTOwF^5*?CZN3$NP!5O2o?H@_qDTnhex9eo%6+7r=HvbGq2{Uku!o%SX8l4!;<3JgGp@Pl9Yt?#s&;)W=bj*t+H=S4IaLCI8@b<|OZ zkWmv9rWEHgO_y;|EpCw534sx?$MF)b6HHgz|10yK%x{>n;SX5er?^I-ujvh>fde@J zF=tdVIO1(~cS9+01**eKWoJXD0RtK4n*v}O$kq|0f`ZvSyV}F&*@7=3P6#Ngm W-g8FjSrq~R0000wkMOa=gY*Yn`YLFk)`u zrm>?p+J_sdpo!5Q9ERzDjn`NVEz=YZ;$am5V=!=Z(R_n(Q-GO>~c*i7;-%nkYg~L;%tsst6sk58W_lO`ZZs56U!!Ft-5GgSK=7Aw2A7Kew%x z5E_gm0MdgBm0-st!5^q*s&tJ5WzgKel>S8nJd7)vhLn#6B*0)NJT}EB;m?xa2XMSL z+Jx)tYg}DjW#4~&ec|!(5sSqF0{B=Jh8}F6kihY%QD&t{lB97Qr}y{w+0Vzv$A#N^ zo|n$&^Rx&)SLmGBtFW3C4}=cbsc38wG%|{!Gzfz9;^HDRofo1CL6bvRko09zQ!yfK zSuU5G?`gE}`E~UWBOx%2d<>kftc^s{sot;6Y7hGOm zLPa$`KR>g5yuH1lBYdou&Su2u<|>McIakA6?D+Y{G*(BjbL(aqWt18eWRJv*VD`FH zgO$}3K0cgWU!8e+wEkv}fl+xfGw}TUJTs0z*MTNeudlD!qfim2Er0V1!(x!P5nFh6 zm&)o2ZQwqcM#>66Jt<%WhY+46HH>5)_wMd)6V-f& zuxzPQ&-?p(woM07|Hv=T5WH%)x3^mb78CYi&Cyezu$#tXm%Ur~cj3_-717{WYKQsJ z(HP-t5HvVz+Y*VL)hQvmPQGT*Ldh=({cjp`>b`Jua|0oc*~q03K;_*{qcL{aD4(31 zK!RToLc(0Wur@6@pUZu;MLJMK@=aOK!3I9ptc)?Avj}4gw>A5_?EkhsA1PnN3^vP% zbt$VW*bG3*YQk)&nxcw8q6UjB>}&dhs%9n3DV;K^TKrvg;4(NVDrD}GIkILTXP#INa%er}3aN<)drol7Go!Xd^ zr)c4a%~TKJHbwJkO-7YMYa>i$vjPu88%)?(=?O{hqfY+hwt6KG_hA<1>mZnWwL%&k zNbc08VRDrYN}JbgXEFn^227lc<(t_YKlRWzn#E zdV0dx=-`~UJPje3dzj0b3{~01Vvgg+ACK8(^SPitb2+)^40A~m4f?RLJ zwwq?oM3`&WY!O~IrL~z=)>yC5wnar%t=cN*=<;t>PTO-1kJ42xT{SD3JyugzP*Dt9 zIC4`13<$GOI?Ml3v_Fh>H0@fmo2TiN4UbiKzORFkn^uGZ{4Ng07hX4~>Iq7lsT*#? zi{ikr__y>>MBLRu^Go*Yz;^*lm!_Il%6K6aL*6H*0Jf$mrL^?G1=2f<#V*p#lIaj?)PviV$X z>Hurfk|Hz9?jOut-20uDG=<_gJMk`{=urYZcU7SBVf!* z&;TDmdXSYoG(>!Kw}%SR0ycOFfb^h3B@n>F;igDM61yo92>_%AZAtvjtRaB(piCh; zVg?}n;j%9_H)IAN{h^wnCuSJGSKvLpYue>JY$<8{frPMeN=f zn}@4jX6QGn8Le!*eDuuFADT+DeWfdO^P#ElSl#*Q4FfT>!Fg!1hwYF4^-%q>zuL_2 d^`n*({0|zJ>z{Y|k+%Q<002ovPDHLkV1ir6RP6u& diff --git a/static/img/twitter.png b/static/img/twitter.png deleted file mode 100644 index 535147c0cc83d328a31bdf42a553be27489d3fed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1499 zcmV<11tj{3P)oyd{&!Zi5)-dbPUBP3>3^VJj?BKa8AYDPs3V;D{xpr=!`eg({bW_ zPH_I&(v=ka`@VyLKx`dfT`7`me}P||E%a5ZxA?wSQI)rari<;1)@1SX1fK8(Zi%%n z7TeNH6VPy){EyZ%JThE@SnF16rlo|GYYj0!iAM<|v#*sw&eTmBYb7`mXzT#8(RxT! zCkU8p_-SnLM#u0Y6*MtAg2yl&u<;7T&`lb^Ln6#0AOr)0i{@_#Bi9}(mZ=ZN3=o!S zO*DWbh6vNJCc1?%LxgQu6AdB65P_yJ5#c!d zxotIrp${WD0M)5hId)7E{Dkccw64&x37Y$h*1u>#gs`H?rD8N72b>*nXv%OP2>{mz z9hzzfhBnPA=kR>+*+V#!{rh6O6jK^a&91e@u92`?zlfMxzk~IHSQ|A;8Ve&0c?}b1Zb{A3Dkk!*xo4j_jr3Z*Ol1h+p|7gZ-*f zNJouo1FQC~RI?9HPftpy%wtAy1k04s$7tM@Dt5h(iPXW`Aw-V`+e>x}SnYKq2Hp3> z!@~on(yN0s$DYJ~d8~HAuu@a({mhAK-~@(+)I2 zq^fXG#Y7LFErLCWWr`4~yNsND`@%NS21Ag-+Z=*t)Wk>KHn1iMmN%!tV@ZQ4jsvtE za%_U7>7i}PXz)mKr_~7J$e5(j9O@J{_~~Z|<=`s1tdQpU`B}X8pqX%e@NW=Y1N{E} zj?>dqoS&aVlFQ3W7k%-fZz{eXf@wlBH8{wA4>F#c_J;%x$V-*h*IX@ z0E&X!j$}tGdlc3tJyS;qQHb5PaxsWW1m@hfX=N#E?C?OAVs18Nv}1Fr4^weYuZ3e( zHkB^!?(STho1=z17Y9RQO{NDAB9|K085~ROoDCZXyt%T*WG{m6B{`73LmOx6Gt)aW zS@k#3WQCALjj;u5ivVp5@X%O?-LOqcumw)iS#9iCjoU0eWh!7J=Ap4vzHVsURYoZU zZUn^Xcg{9*QOU){Me#FN_f)6l%eg!b(!9L96k873c+6jzk4`SBGnggJAuyePWK1!? zglmPmtL@*lzH9w~jzjnx2i~VRgMT^BSLJ9x3_x|-OA#94SXMuNF)KEI<3g~omo==s#Bp9mKXt0pIo)qA)90bKz&k;AjAmao8_&!C7-E} zJc1)qglX6zO5qrGSB~{2`3XEBLid;l5mJO@WS!Wycs&*#AUMdI8B^qv3!002ovPDHLkV1fZb Bv>E^a diff --git a/static/img/web.png b/static/img/web.png deleted file mode 100644 index 4fb1b2c6fb72346bacb94ee3af55d773e96611e3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1734 zcmV;%208hOP)o^cScXuE5Z7IPWz*c~%06M^10ilAJ3ZR3e1K@F=3>5?_FjNq31-?2ax}RcfN3uPV z9df?!Y#2#V3qNa36>jZxz>yg(v2U3w&1MUV@f6Q_SE`)F!SJ6YL2n>>Pfr)y1k4Oc+-f zr?8V3I>tC$K^LJTj2LtWY`mr-XcOlcAtHQQz!U_WoHbu!8ot(*Jf;}}V~%Nw)`fEf z!UEG2tP5}984FBXur6G{6BYo9Z^{LPu@7O`Xhog_C=M(+$H2G(P#n0$OALev`x)o< zCd#eIUg6Obp%G{vk&I zOHiT~S(X*+^}6VS`}_Oi;^HEd6*H=^8Wm4`7mlLjdEO`-zgw+VrT8RYw^agvpCm~L zkyBV8_f;Tu`j>*$fuGZ&m0M{1KfmK|?(XhtD~J`refT;aSXgo5t1wqrSFKisN?c#eG=DC1n@ep0aroc1F zoiSXJ5|`xvTtSy2EO2THoJsA7zEo1&t^yOny}ry8SS+F5)S$9ynX^b8K>b2aD&G*k@wJFi>C za=9$?yj?)|bA5e{+grC;PCEDe@bCZu{KJO~0=35sSJgf2YK&;TIxzU&v_Rj2wOzLCCJ zkCe1ks*u2CXd|+5eVUrBv}=c8$dL)tWmRDs!O;8zLTGBpT)+X(#bN;^blG^ZG3vVA zx)@wzh_W_8OyD6wp&5Osv!U!zD5ERiyP#`y(idU^>mhV0>o`9@clv#sz>>rL6j)^I z(gM4pO+-QK{ty#b`#hfBV-UGbU_lF(6Zrl8{r79m%qjO4ZstuZUSD4!gf|K-vUM{< z#jF~^tl7=YO^^ns?JN?^rv2mtbA^M)f9xdaShyNzvZuwE*tVxt2iM+S+qj)zvL~g$ ziO|NkdQWxfN-eZ2x=u=|gJ3tAEKgmr0Z;Rw+VZZ_;*w1Rqr$^RpN$VZ4H-2h-EGk) z>%}Zv6+VWHG%~3jnU=!?s`Ga?VDhL>IaHVX%Ql5)U}mPkso;*bd@-|Rt^zkzj0>w% z2l`f+1-JV0vE< zMB-tS)sRddXcL$$@4HV{q=~+BFf6&K6FBy;<1ZpN&A9B_0MRYb-v&mhfxUv{p7=F+3ymO;ag$tauKYo2EYF^QNg!2!zlAS3!{@Y~T7fLi=rhwU|FQ c&zhsaFF?mx2*^NrH~;_u07*qoM6N<$f*Sx9C;$Ke diff --git a/static/img/youtube-play.png b/static/img/youtube-play.png deleted file mode 100644 index 53282d10495a51c7f70c50a7f09b4b6effd4c64d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1250 zcmV<81ReW{P)q8;Wg4JidH|HuimuQQ9`^G(cUR5O zP-i3spqwg|;+;W)Pk5Vw)+HR9AalQH{Xq>p$cm;m<)a2E(Aoh@Q-UoC0JMG3(o|U( z+BB-1f_d?oAvBVGnr~k@uK2?M&fGc_1G_6!MX-zB`m9B9If4T?b9aHFI9UEg+29@= zyYh3>8#L=hLTfESeqriz1iR>Mj>_I|3d5hQ@B3;v9I7-;m2GCTnYz2X%Z|bHd16rr zTETdFAY-{e$6~=`f7#&vp_p4>!Q^n+;KbC9=qt$;!|5U+V~a-4*u2?Zk8j&~d1TkS%`%-%ae8_RgLEl^Js6~}xsQ*JnE@v8JP(FBCxcl|tJjxu zS#(`rUmG{tAeq5uU`!mxxVX5$?d>fD@{J7UnIM;-2o8cEi|ENj)PkXN<2krV$mnjj zD=BSsL_}~IN*iSK&CLy%lX+{jM^l$5iazxJ^_76qhO4@mKL29~r^wG-(}sA13&>oK z27iWdsI#C8H>SJ2wIPFPfKFUPM?FNUbM*Utwq0?}T%^Ie3I^Q>+UV-;%B#U5AVbMm zGFS*xYUG~597+L{XQ@6R$Xw!ueFRgU4a1Ogo_&i68O*YCPw5~@5@``zW@5bHPG4)T zjnRBQ$H~bF43ZVxDT0lqiSc+0u250mAlZF`ik_UYG;x1_53Ym;ZGs3KFowE7K>nBDX&%jtMwH% zmxem<3#AT5)iN#@#r2q?6um^%YI};}e_B7_*oL*}eUAjPTJJWMq6R(y<@6zWsEO;{ zy{`~EP&9Z_PS&cg+7{Nea1S!0 zIf1Z|oB%S6X7NChT?oL_Xfig$9u18JSj-t{+t>t)h~3*UN17BD!){blv{K{c!!m6@ zG?mQuvA7+fiHD}r4C{wnt Date: Mon, 20 Mar 2023 04:04:47 -0700 Subject: [PATCH 182/665] Add discussion_private job (#1625) --- .github/workflows/check_application_document.yml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index ddb8f7574c9..ebc4a953800 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -6,6 +6,22 @@ on: types: [opened, synchronize] jobs: + discussion_private: + if: ${{ github.event.action == 'opened' }} + runs-on: ubuntu-latest + steps: + - name: Add 'discussion private' label if the application is private + if: ${{ !contains(github.event.pull_request.body, '- [ ] I prefer the discussion') || !contains(github.event.pull_request.body, '@_______:matrix.org') }} + uses: actions/github-script@v6 + with: + script: | + github.rest.issues.addLabels({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + labels: ["discussion private"] + }) + get_filename: if: contains(github.event.pull_request.body, 'Project Abstract') runs-on: ubuntu-latest From 2abe14d85fc5c8f561377b4c5632aa15d697cba4 Mon Sep 17 00:00:00 2001 From: gmajor <63032554+gmajor-encrypt@users.noreply.github.com> Date: Mon, 20 Mar 2023 21:53:01 +0800 Subject: [PATCH 183/665] Create xcm-tools (#1605 * Create xcm-tools * modify Milestone 1 * modify Milestone 1 * fix wording * improve xcm-tools.md * improve application * increase some costs * decrease some costs * improve wording * decrease some costs --- applications/xcm-tools.md | 176 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 applications/xcm-tools.md diff --git a/applications/xcm-tools.md b/applications/xcm-tools.md new file mode 100644 index 00000000000..9670cf4cb0b --- /dev/null +++ b/applications/xcm-tools.md @@ -0,0 +1,176 @@ +# XCM Tools + +* **Team Name:** [gmajor](https://github.com/gmajor-encrypt) +* **Payment Address:** 0xC3094f0ddce699a1Ad9Ef2621DF68Cd297a4c44F(USDC) +* **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +RFPs [https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/xcm-tool.md](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/xcm-tool.md) + +### Overview + +XCM (Cross-Consensus Message) is a messaging format and language used to communicate between consensus +systems. [xcm-format](https://github.com/paritytech/xcm-format) ( +Instruction, MultiAssets, MultiLocation...) are too complex, and no good tool exists. It has yet to be widely used. + +XCM Tools is a tool and an SDK. This library is written in golang. It provides the following functions: sending xcm +messages, parsing xcm message instructions and getting the execution result of the execution after sending xcm. + +### Project Details + +I need to choose between two libraries to interact with +Substrate: [Go-Substrate-RPC-Client](https://github.com/centrifuge/go-substrate-rpc-client) +and [substrate-api-rpc](https://github.com/itering/substrate-api-rpc). Both libraries support querying the chain status, +but they have different features and limitations. + +[Go-Substrate-RPC-Client](https://github.com/centrifuge/go-substrate-rpc-client) is an open-source library developed by Centrifuge. It also supports sending transactions. +However, it uses a static and strongly typed Scale Codec library that requires custom structs with Encoding/Decoding +methods for most types. + +[substrate-api-rpc](https://github.com/itering/substrate-api-rpc) is another open-source library developed by Subscan. It uses a dynamic Scale Codec library that +supports serialization, deserialization, and backward compatibility for historical types. However, it does not support +sending transactions. + +After comparing these libraries with other alternatives, I decided to use [substrate-api-rpc](https://github.com/itering/substrate-api-rpc) because of its flexible and +robust Scale Codec implementation. However, I still need to add the functionality of sending transactions to the library +myself. + +1. Improve [substrate-api-rpc](https://github.com/itering/substrate-api-rpc), add extrinsic encode, sign transaction + (sr25519, ed25519), and send transaction feature. + Create pull request merge into [substrate-api-rpc](https://github.com/itering/substrate-api-rpc) + and [scale.go](https://github.com/itering/scale.go) + +2. Send xcm messages between relay chain and parachain and between parachain and parachain, support VMP(UMP & DMP), + HRMP,XCMP(XCM V3) and supports the following methods + +* `LimitedReserveTransferAssets` +* `LimitedTeleportAssets` +* `TeleportAssets` +* `ReserveWithdrawAssets` +* `LimitedReserveWithdrawAssets` +* `Execute` +* `Sent` + +3. Get the execution result and the block_hash (block_num) of the execution after sending xcm + +4. Parse xcm transaction instructions, deserialized encode the raw message into readable json + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + XCM developers or users who want to use XCM Feature. A solution is provided here. You can send and track your XCM + transaction + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, + yourself)? + wallet & explorer & parachain developer + +- What need(s) does your project meet? + Provide a solution for parachain and parachain, transactions between parachain and relaychain, xcm message parse, and + xcm trans tracking. It can be easily integrated into the application of Golang or directly used as Tools. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + + [xcm-sdk](https://github.com/blockcoders/xcm-sdk), written in Javascript/Typescript, has to send the xcm feature. + + [xcm-tools](https://github.com/PureStake/xcm-tools) written in Typescript, a set of scripts to help XCM + initialization, asset registration, and channel setup, + +## Team :busts_in_silhouette: + +### Team members + +* gmajor + +### Contact + +* **Contact Name:** gmajor +* **Contact Email:** gmajorencrypt@gmail.com +* **Website:** + +### Legal Structure + +individual + +### Team's experience + +I have many years of PHP development experience and nearly five years of blockchain development experience, familiar +with PHP, GOLANG, PYTHON, Nodejs, Rust + +### Team Code Repos + +- https://github.com/gmajor-encrypt/php-scale-codec +- https://github.com/gmajor-encrypt/php-substrate-api +- https://github.com/gmajor-encrypt/scale-codec-comparator +- https://github.com/gmajor-encrypt/sr25519-bindings + +## Development Status :open_book: + +Not yet + +## Development Roadmap :nut_and_bolt: + +### Overview + +* **Total Estimated Duration:** 4.5 months +* **Total Costs:** 28500 USDC + +### Milestone 1 + +Improve [substrate-api-rpc](https://github.com/itering/substrate-api-rpc) +and [scale.go](https://github.com/itering/scale.go), support signed & send transaction + +* **Estimated duration:** 4 week +* **FTE:** 1 +* **Costs:** 6000 USDC + +| Number | Deliverable | Specification | +|-------:|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT or Apache 2.0 | +| 0b. | Documentation | Simple documentation on how to use and how to test | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Sign message | Add sr25519 & ed25519 sign message | +| 2. | extrinsic encode | [extrinsic.go](https://github.com/itering/scale.go/blob/master/extrinsic.go#L19) Add encode feature | +| 3. | Send extrinsic | Send transaction support, include ed25519&sr25519 | +| 4. | Pull request | Create pull request merge into [substrate-api-rpc](https://github.com/itering/substrate-api-rpc) and [scale.go](https://github.com/itering/scale.go) | + +### Milestone 2 + +* **Estimated duration:** 9 week +* **FTE:** 1 +* **Costs:** 13500 USDC + +| Number | Deliverable | Specification | +|-------:|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT or Apache 2.0 | +| 0b. | Documentation | Simple documentation on how to use and how to test | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Send UMP message | support [UMP](https://wiki.polkadot.network/docs/learn-xcm-transport#vmp-vertical-message-passing) message send | +| 2. | Send DMP message | support [DMP](https://wiki.polkadot.network/docs/learn-xcm-transport#vmp-vertical-message-passing) message send | +| 3. | Send HRMP message | support [HRMP](https://wiki.polkadot.network/docs/learn-xcm-transport#hrmp-xcmp-lite) message send | +| 4. | Send XCMP message(XCM V3) | support [XCMP](https://wiki.polkadot.network/docs/learn-xcm-transport#xcmp-cross-chain-message-passing) message send | + +### Milestone 3 + +* **Estimated duration:** 6 week +* **FTE:** 1 +* **Costs:** 9000 USDC + +| Number | Deliverable | Specification | +|-------:|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT or Apache 2.0 | +| 0b. | Documentation | Simple documentation on how to use and how to test | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Parse xcm instructions | Parse instructions raw data, support xcm format v1 & v2 & v3 | +| 2. | Tracing transaction | Support xcm format v1 & v2 & v3 | +| 3. | Cli support | Add command line tool to send message & parse xcm instructions && tracking transaction | | + +## Future Plans + +I have been maintaining [php-scale-code](https://github.com/gmajor-encrypt/php-scale-codec) +and [php-api-lib](https://github.com/gmajor-encrypt/php-substrate-api) for three years, and this application will also +be maintained continuously From 330600133cdaeb88ffb26de4d4882ddf4b9877ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 20 Mar 2023 23:19:51 +0100 Subject: [PATCH 184/665] Update index.md Validated Streams M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index dea64152f79..84456d6c88f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -33,7 +33,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | -| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☐ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | From f93cee25096bd5353cf700db2eb87fb640b30f53 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 21 Mar 2023 03:46:07 -0400 Subject: [PATCH 185/665] Update index.md (#1629) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 84456d6c88f..765051d1e43 100644 --- a/applications/index.md +++ b/applications/index.md @@ -108,7 +108,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | -| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☐ | +| [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | From 16200e563ad16928a24a0328e928bf51632f2e5a Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 21 Mar 2023 04:46:53 -0300 Subject: [PATCH 186/665] Update index.md (#1627) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 765051d1e43..b8876838764 100644 --- a/applications/index.md +++ b/applications/index.md @@ -112,7 +112,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☐ | ☐ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | ### 🏄‍♀️ Wave 15 - Third Quarter 2022 From baa26cd66997585a18066a29ec6fd77718e5986f Mon Sep 17 00:00:00 2001 From: Jeff Burdges Date: Tue, 21 Mar 2023 09:08:04 +0100 Subject: [PATCH 187/665] Milestone 1 is ilegal (#1624) We should update this properly --- docs/RFPs/Open/epassport-zk-validation.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/RFPs/Open/epassport-zk-validation.md b/docs/RFPs/Open/epassport-zk-validation.md index 750beec9964..f81dc0cd349 100644 --- a/docs/RFPs/Open/epassport-zk-validation.md +++ b/docs/RFPs/Open/epassport-zk-validation.md @@ -1,4 +1,5 @@ -# e-Passport ZK Validation +# e-Passport ZK Validation [ON HOLD PENDING REVISIONS] + * **Status:** Open * **Proposer:** [burges](https://github.com/burges), [FlorianFranzen](https://github.com/FlorianFranzen) From 19e410951964169744c90f097c061d8bbc89e5b3 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 21 Mar 2023 09:23:47 +0100 Subject: [PATCH 188/665] RFP update Status and update epassport --- docs/RFPs/{Implemented => Closed}/appi.md | 0 .../{Implemented => Closed}/candle-auction.md | 0 .../epassport-zk-validation.md | 2 +- .../ksm-tipping-button.md | 0 .../on-chain-quadratic-funding.md | 0 docs/RFPs/{Implemented => Closed}/php-api.md | 0 .../RFPs/{Implemented => Closed}/php-scale.md | 0 .../staking-rewards-collector-front-end.md | 0 .../uncollateralized-stablecoin-research.md | 0 .../wallet-aggregator-library.md | 0 docs/rfps.md | 22 +++++++++---------- 11 files changed, 12 insertions(+), 12 deletions(-) rename docs/RFPs/{Implemented => Closed}/appi.md (100%) rename docs/RFPs/{Implemented => Closed}/candle-auction.md (100%) rename docs/RFPs/{Open => Closed}/epassport-zk-validation.md (99%) rename docs/RFPs/{Implemented => Closed}/ksm-tipping-button.md (100%) rename docs/RFPs/{Implemented => Closed}/on-chain-quadratic-funding.md (100%) rename docs/RFPs/{Implemented => Closed}/php-api.md (100%) rename docs/RFPs/{Implemented => Closed}/php-scale.md (100%) rename docs/RFPs/{Implemented => Closed}/staking-rewards-collector-front-end.md (100%) rename docs/RFPs/{Implemented => Closed}/uncollateralized-stablecoin-research.md (100%) rename docs/RFPs/{Implemented => Closed}/wallet-aggregator-library.md (100%) diff --git a/docs/RFPs/Implemented/appi.md b/docs/RFPs/Closed/appi.md similarity index 100% rename from docs/RFPs/Implemented/appi.md rename to docs/RFPs/Closed/appi.md diff --git a/docs/RFPs/Implemented/candle-auction.md b/docs/RFPs/Closed/candle-auction.md similarity index 100% rename from docs/RFPs/Implemented/candle-auction.md rename to docs/RFPs/Closed/candle-auction.md diff --git a/docs/RFPs/Open/epassport-zk-validation.md b/docs/RFPs/Closed/epassport-zk-validation.md similarity index 99% rename from docs/RFPs/Open/epassport-zk-validation.md rename to docs/RFPs/Closed/epassport-zk-validation.md index f81dc0cd349..6f3d2706fc1 100644 --- a/docs/RFPs/Open/epassport-zk-validation.md +++ b/docs/RFPs/Closed/epassport-zk-validation.md @@ -1,7 +1,7 @@ # e-Passport ZK Validation [ON HOLD PENDING REVISIONS] -* **Status:** Open +* **Status:** On Hold * **Proposer:** [burges](https://github.com/burges), [FlorianFranzen](https://github.com/FlorianFranzen) diff --git a/docs/RFPs/Implemented/ksm-tipping-button.md b/docs/RFPs/Closed/ksm-tipping-button.md similarity index 100% rename from docs/RFPs/Implemented/ksm-tipping-button.md rename to docs/RFPs/Closed/ksm-tipping-button.md diff --git a/docs/RFPs/Implemented/on-chain-quadratic-funding.md b/docs/RFPs/Closed/on-chain-quadratic-funding.md similarity index 100% rename from docs/RFPs/Implemented/on-chain-quadratic-funding.md rename to docs/RFPs/Closed/on-chain-quadratic-funding.md diff --git a/docs/RFPs/Implemented/php-api.md b/docs/RFPs/Closed/php-api.md similarity index 100% rename from docs/RFPs/Implemented/php-api.md rename to docs/RFPs/Closed/php-api.md diff --git a/docs/RFPs/Implemented/php-scale.md b/docs/RFPs/Closed/php-scale.md similarity index 100% rename from docs/RFPs/Implemented/php-scale.md rename to docs/RFPs/Closed/php-scale.md diff --git a/docs/RFPs/Implemented/staking-rewards-collector-front-end.md b/docs/RFPs/Closed/staking-rewards-collector-front-end.md similarity index 100% rename from docs/RFPs/Implemented/staking-rewards-collector-front-end.md rename to docs/RFPs/Closed/staking-rewards-collector-front-end.md diff --git a/docs/RFPs/Implemented/uncollateralized-stablecoin-research.md b/docs/RFPs/Closed/uncollateralized-stablecoin-research.md similarity index 100% rename from docs/RFPs/Implemented/uncollateralized-stablecoin-research.md rename to docs/RFPs/Closed/uncollateralized-stablecoin-research.md diff --git a/docs/RFPs/Implemented/wallet-aggregator-library.md b/docs/RFPs/Closed/wallet-aggregator-library.md similarity index 100% rename from docs/RFPs/Implemented/wallet-aggregator-library.md rename to docs/RFPs/Closed/wallet-aggregator-library.md diff --git a/docs/rfps.md b/docs/rfps.md index a84eec46bf7..d3a5d2026dc 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -23,7 +23,7 @@ If you find an open RFP here that you think you can address, feel free to [submi - **🟢 Open:** We are looking for (additional) teams to implement this. - **🟡 Under Development:** One or more teams are working on this. We might be interested in additional implementations, but it’s better to double check this with the grants team. -- **🔴 Implemented:** This RFP is implemented. However, if it’s not maintained, we would be interested in signing a [maintenance grant](maintenance.md). +- **🔴 Closed:** This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a [maintenance grant](maintenance.md). | RFP | Status | Last Updated | | :-- | :----: | :----------: | @@ -31,13 +31,13 @@ If you find an open RFP here that you think you can address, feel free to [submi | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟡 | 02.03.2023 | | [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | -| [appi.md](RFPs/Implemented/appi.md) | 🔴 | 20.07.2021 | +| [appi.md](RFPs/Closed/appi.md) | 🔴 | 20.07.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | -| [candle-auction.md](RFPs/Implemented/candle-auction.md) | 🔴 | 02.02.2022 | +| [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Under%20Development/crowdloan_front_end_template.md) | 🟡 | 18.11.2022 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | | [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | -| [epassport-zk-validation.md](RFPs/Open/epassport-zk-validation.md) | 🟢 | 29.11.2021 | +| [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 🔴 | 21.03.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | | [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | @@ -45,27 +45,27 @@ If you find an open RFP here that you think you can address, feel free to [submi | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | -| [ksm-tipping-button.md](RFPs/Implemented/ksm-tipping-button.md) | 🔴 | 20.07.2021 | +| [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 🔴 | 20.07.2021 | | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 🟢 | 22.12.2022 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | -| [on-chain-quadratic-funding.md](RFPs/Implemented/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | -| [php-api.md](RFPs/Implemented/php-api.md) | 🔴 | 27.05.2022 | +| [on-chain-quadratic-funding.md](RFPs/Closed/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | +| [php-api.md](RFPs/Closed/php-api.md) | 🔴 | 27.05.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | -| [php-scale.md](RFPs/Implemented/php-scale.md) | 🔴 | 23.11.2022 | +| [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | | [polkadot-collator-setup.md](RFPs/Open/polkadot-collator-setup.md) | 🟢 | 23.11.2021 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | | [raft-validators.md](RFPs/Open/raft-validators.md) | 🟢 | 23.11.2021 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | | [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🔴 | 03.03.2023 | -| [staking-rewards-collector-front-end.md](RFPs/Implemented/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | +| [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | | [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | -| [uncollateralized-stablecoin-research.md](RFPs/Implemented/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | +| [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 🟢 | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | | [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | -| [wallet-aggregator-library.md](RFPs/Implemented/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | +| [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | | [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | From d9522e7c6a0a738709e3352d7502842ffc8d5361 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 22 Mar 2023 09:05:28 +0100 Subject: [PATCH 189/665] Update ink_smart_contract_block_explorer.md (#1631) --- .../Under Development/ink_smart_contract_block_explorer.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md b/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md index dd7b1af427e..5d1b73c750e 100644 --- a/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md +++ b/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md @@ -1,4 +1,4 @@ -# RFP: Substrate Identity Directory +# RFP: ink! block explorer * **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_explorer.md) * **Proposer:** [Noc2](https://github.com/Noc2) @@ -9,4 +9,4 @@ We are looking for a team or multiple teams to implement [ink! smart contract](h ## Deliverables -The structure of the grant and the milestones depends highly on the supported features of the block explorer. \ No newline at end of file +The structure of the grant and the milestones depends highly on the supported features of the block explorer. From ea706dfa66fc61f5aba910fa741dc552ac47a84d Mon Sep 17 00:00:00 2001 From: caso Date: Wed, 22 Mar 2023 02:13:40 -0700 Subject: [PATCH 190/665] Fix discussion_private job (#1634) * Fix check discussion private * Add check * Fix checks * Update check_application_document.yml * Update check_application_document.yml --- .github/workflows/check_application_document.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index ebc4a953800..f687de9fe9b 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -7,11 +7,18 @@ on: jobs: discussion_private: - if: ${{ github.event.action == 'opened' }} + if: | + github.event.action == 'opened' && + github.event.pull_request.body && ( + contains(github.event.pull_request.body, '- [x] I prefer the discussion') || + ( + contains(github.event.pull_request.body, '- [ ] I prefer the discussion') && + !contains(github.event.pull_request.body, '@_______:matrix.org') + ) + ) runs-on: ubuntu-latest steps: - name: Add 'discussion private' label if the application is private - if: ${{ !contains(github.event.pull_request.body, '- [ ] I prefer the discussion') || !contains(github.event.pull_request.body, '@_______:matrix.org') }} uses: actions/github-script@v6 with: script: | From 34609618f00bf877bbb4094a50ff80a82f2efba9 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 22 Mar 2023 10:17:32 +0100 Subject: [PATCH 191/665] Update index.md Add XCM Tools --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b8876838764..6c69a7a09a6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,6 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | ## 2022 From 8e5daeb9d936cda6558fe3b67af2fbdc24e75320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 22 Mar 2023 13:26:14 +0100 Subject: [PATCH 192/665] Update index.md Unified deployment for the collator node M1 and finished --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 6c69a7a09a6..748e7525cec 100644 --- a/applications/index.md +++ b/applications/index.md @@ -107,7 +107,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | -| [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☐ | ☐ | +| [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☒ | ☒ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | From 2c9040c60d4e3c74abfaae7cdf6d2ec1a80a52a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 22 Mar 2023 13:34:17 +0100 Subject: [PATCH 193/665] Move uptane-for-substrate-design-and-scope.md to docs/RFPs/Open --- docs/{rfps => RFPs}/Open/uptane-for-substrate-design-and-scope.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/{rfps => RFPs}/Open/uptane-for-substrate-design-and-scope.md (100%) diff --git a/docs/rfps/Open/uptane-for-substrate-design-and-scope.md b/docs/RFPs/Open/uptane-for-substrate-design-and-scope.md similarity index 100% rename from docs/rfps/Open/uptane-for-substrate-design-and-scope.md rename to docs/RFPs/Open/uptane-for-substrate-design-and-scope.md From ea3b57faa446728b5cb70634be10811688ef9fd3 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 22 Mar 2023 09:40:24 -0300 Subject: [PATCH 194/665] Update index.md to check FairSquares as completed (#1635) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 748e7525cec..74f96a50d3c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -191,7 +191,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | -| [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☐ | +| [FS](https://fair-squares.nl/) | [Fair Squares](./fair_squares.md) | [GitHub](https://github.com/Fair-squares) | ☐ | ☒ | ☒ | | [Ideal Labs](https://www.idealabs.network/) | [Iris: Phase 2](./iris_followup.md) | [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | | [NeoPower](https://www.neopower.digital/) | [Roloi: Stream money from one wallet to another](./Roloi.md) | [GitHub](https://github.com/RoloiMoney) | ☐ | ☒ | ☒ | | [Tribal Protocol Labs](https://www.tribal.fyi/) | [Tribal Protocol Smart Contract Development](./tribal_protocol.md) | [GitHub](https://github.com/tribal-protocol) | ☐ | ☒ | ☐ | From ede74e98bfdc9713f2241e866080512e4df0b7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 22 Mar 2023 13:57:02 +0100 Subject: [PATCH 195/665] Move Collator deployment RFP to Closed (#1636) --- .../polkadot-collator-setup.md | 32 ++++++++++--------- docs/rfps.md | 2 +- 2 files changed, 18 insertions(+), 16 deletions(-) rename docs/RFPs/{Open => Closed}/polkadot-collator-setup.md (64%) diff --git a/docs/RFPs/Open/polkadot-collator-setup.md b/docs/RFPs/Closed/polkadot-collator-setup.md similarity index 64% rename from docs/RFPs/Open/polkadot-collator-setup.md rename to docs/RFPs/Closed/polkadot-collator-setup.md index a327a49296f..f4e116d27c8 100644 --- a/docs/RFPs/Open/polkadot-collator-setup.md +++ b/docs/RFPs/Closed/polkadot-collator-setup.md @@ -1,17 +1,18 @@ # Polkadot Collator Setup -* **Status:** Open -* **Proposer:** mmagician -* **Your Project(s):** https://mmagician.github.io/ -* **Projects you think this work could be useful for** Any parachain team +- **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/unified_collator_node_deployment.md) +- **Proposer:** mmagician +- **Your Project(s):** https://mmagician.github.io/ +- **Projects you think this work could be useful for** Any parachain team -## Project Description :page_facing_up: +## Project Description :page_facing_up: This is meant as a companion repository to [polkadot-validator-setup](https://github.com/w3f/polkadot-validator-setup), which allows anyone to launch a validator node in an automated and secure fashion. I would like to standardize (as much as possible) the process of spinning up new collator nodes for different parachains. I understand it might be tricky to bundle all the parachain launch setups into one repository, but there are some ideas of how this can be tackled: + 1. Have a single collator ansible role, and each branch would correspond to a specific parachain 2. Have multiple ansible roles, and the main.yml in the project root to coordinate which roles get deployed. @@ -19,21 +20,22 @@ I would lean towards the second option. While it might lead to large repo size d ## Deliverables :nut_and_bolt: -Ideally the PoC would +Ideally the PoC would Please list the deliverables of the project in as much detail as possible. Please also estimate the amount of work required and try to divide the project into meaningful milestones. -* **Total Estimated Duration:** Duration of the whole project -* **Full-time equivalent (FTE):** Amount of time (in days) required for a single person to complete this project ([see](https://en.wikipedia.org/wiki/Full-time_equivalent)) -* **Total Costs:** Amount of Payment in USD for the whole project. +- **Total Estimated Duration:** Duration of the whole project +- **Full-time equivalent (FTE):** Amount of time (in days) required for a single person to complete this project ([see](https://en.wikipedia.org/wiki/Full-time_equivalent)) +- **Total Costs:** Amount of Payment in USD for the whole project. + ### Milestone 1 -Please add additional milestones in the same way: -* **Estimated Duration:** Duration of milestone 1 -* **FTE:** Amount of time (in days) required for a single person to complete this milestone -* **Costs:** Amount of Payment in USD for milestone 1 +Please add additional milestones in the same way: +- **Estimated Duration:** Duration of milestone 1 +- **FTE:** Amount of time (in days) required for a single person to complete this milestone +- **Costs:** Amount of Payment in USD for milestone 1 -| Number | Deliverable | Specification | +| Number | Deliverable | Specification | | ------------- | ------------- | ------------- | | 1. | Title of the deliverable | Please describe the deliverable here as detailed as possible | -| 2. | ... |...| +| 2. | ... |...| diff --git a/docs/rfps.md b/docs/rfps.md index d3a5d2026dc..b3a956c5f95 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -52,7 +52,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [php-api.md](RFPs/Closed/php-api.md) | 🔴 | 27.05.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | | [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | -| [polkadot-collator-setup.md](RFPs/Open/polkadot-collator-setup.md) | 🟢 | 23.11.2021 | +| [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 🔴 | 22.03.2023 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | | [raft-validators.md](RFPs/Open/raft-validators.md) | 🟢 | 23.11.2021 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | From 40c75b51d8611bf93581f7a8913faec95dcf245b Mon Sep 17 00:00:00 2001 From: David Semakula Date: Wed, 22 Mar 2023 19:51:15 +0300 Subject: [PATCH 196/665] Add ink! analyzer (#1615) --- applications/ink-analyzer.md | 261 +++++++++++++++++++++++++++++++++++ 1 file changed, 261 insertions(+) create mode 100644 applications/ink-analyzer.md diff --git a/applications/ink-analyzer.md b/applications/ink-analyzer.md new file mode 100644 index 00000000000..d40714f768a --- /dev/null +++ b/applications/ink-analyzer.md @@ -0,0 +1,261 @@ +# ink! Analyzer + +- **Team Name:** David Semakula +- **Payment Address:** 0x5c1D926f62B61C9cf62167474111385ff7393c61 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +ink! analyzer is a collection of modular and reusable libraries and tools for semantic analysis of [ink!](https://use.ink/) smart contract code. + +#### Objective + +ink! analyzer aims to improve [ink!](https://use.ink/) language support in [integrated development environments (IDEs)](https://en.wikipedia.org/wiki/Integrated_development_environment), [source code editors](https://en.wikipedia.org/wiki/Source-code_editor) and other development tools by providing modular and reusable building blocks for implementing features like diagnostic errors, code completion suggestions, code/intent actions and hover content for the [ink! programming language](https://use.ink/) which is used for writing smart contracts for blockchains built on [Substrate](https://substrate.io/). + +#### Problem +ink! is an [Embedded Domain Specific Language (eDSL)](https://wiki.haskell.org/Embedded_domain_specific_language) that you can use to write [WebAssembly](https://webassembly.org) based smart contracts in the [Rust](https://www.rust-lang.org/) programming language. +In fact, ["ink! is just standard Rust in a well-defined "contract format" with specialized `#[ink(…)]` attribute macros"](https://use.ink/getting-started/creating-an-ink-project). + +This allows ink! developers to leverage Rust tooling like [clippy](https://doc.rust-lang.org/clippy/), [cargo](https://doc.rust-lang.org/cargo/), [crates.io](https://crates.io/) and excellent IDE/code editor support via [rust-analyzer](https://rust-analyzer.github.io/) and [IntelliJ Rust](https://www.jetbrains.com/rust/). + +However, relying on only generic Rust language support in IDEs, code editors and other development tools has some significant limitations for the developer experience including: + +- No language support (e.g. diagnostic errors) for ink!'s domain specific semantic rules for smart contracts (e.g. exactly one `#[ink(storage)]` struct, at least one `#[ink(message)]` method and the same for `#[ink(constructor)]`, ink! attributes should be applied to items of the correct type e.t.c) +- Inconsistent editor experience with issues like no code completion and/or hover content for some ink! attribute macro arguments (e.g `#[ink(payable)]`) because [macro expansion/name resolution and trait resolution are hard problems for generic IDE/code editor tools](https://rust-lang.github.io/compiler-team/working-groups/rls-2.0/#scope-and-purpose) (see also [https://rust-analyzer.github.io/blog/2021/11/21/ides-and-macros.html](https://rust-analyzer.github.io/blog/2021/11/21/ides-and-macros.html)). + +#### Solution + +To solve the above challenges and improve ink! language support in IDEs, code editors and other development tools, this project will create two main components: +- a modular domain-specific semantic analysis library for ink!. +- a [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) implementation built on top of the aforementioned semantic analysis library. + +These two components can then be reused to add ink! language support to multiple IDEs, code editors and other development tools. + +In particular, a large number of IDEs and code editors support LSP servers, these include [Visual Studio Code, Visual Studio, Vim / Neovim, Emacs, Atom, Sublime Text, Acme, Lapce, Eclipse and many more](https://microsoft.github.io/language-server-protocol/implementors/tools/). +This project makes it relatively easy for any developer to write extensions/plugins/integrations that add ink! language support to any tool with support for LSP servers. + +While for IDEs, code editors and other development tools that don't support LSP servers, extensions/plugins/integrations can either implement their own LSP client middleware or use the semantic analyzer directly. +However, this grant application will focus on an LSP based architecture. + +Lastly, this project will implement a [Visual Studio Code](https://code.visualstudio.com/) extension that adds ink! language support to the editor as a reference implementation and showcase. +However, other developers will be encouraged to leverage the above components to add ink! language support to their preferred IDE, code editor or other development tool. + +#### Observation + +In the context of smart contracts and the blockchain ecosystem, [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) tends to be closely associated with security and vulnerability detection. +This project uses the narrower term "semantic analysis" because its primary goal (at this stage) is to improve ink! language support in IDEs, code editors and other development tools. +Therefore, initially, ink! analyzer will not provide any features related to security and vulnerability detection. +However, such functionality may be added in the future. + +### Project Details + +#### Architecture Diagram + +![ink! Analyzer - LSP based Architecture Diagram](https://davidsemakula.com/static/images/ink-analyzer/w3f/architecture.png "ink! Analyzer - LSP based Architecture Diagram") +*Figure 1: ink! Analyzer - LSP based Architecture Diagram* + +#### Architecture Components + +##### 1. Semantic Analyzer + +The semantic analyzer is responsible for parsing the smart contract code, analyzing it based on ink!'s semantic rules for smart contracts and returning semantic information for other components to consume. + +It will be written in [Rust](https://www.rust-lang.org/) and will use rust-analyzer's [ra_ap_syntax](https://docs.rs/ra_ap_syntax/latest/ra_ap_syntax/) crate for generating the syntax tree of the smart contract code that it analyzes. +It will have an internal architecture similar to rust-analyzer's [ra_ap_ide](https://docs.rs/ra_ap_ide/latest/ra_ap_ide/) crate with notions of persistent state, change over time, immutable snapshots of state and cancellable transactions. + +While ink!'s [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/) crate includes syntax tree and intermediate representation (IR) modules, the semantic analyzer will use rust-analyzer libraries because the [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/) crate uses [syn](https://docs.rs/syn/latest/syn/) as its parser and syn (being ["geared toward use in Rust procedural macros"](https://docs.rs/syn/latest/syn/)) [assumes "that all input to it is well-formed"](https://github.com/rust-lang/rfcs/pull/2256#issuecomment-353753261). +This makes it unsuitable for our IDE/code editor use case, because among [other design goals](https://github.com/rust-lang/rust-analyzer/blob/master/docs/dev/syntax.md#design-goals) for this use case, parsing should be: +- resilient (even if the input is invalid, parser tries to see as much syntax tree fragments in the input as it can). +- lossless (even if the input is invalid, the tree produced by the parser represents it exactly). + +Because of these and other [design goals](https://github.com/rust-lang/rust-analyzer/blob/master/docs/dev/syntax.md#design-goals), rust-analyzer created its own parsing and syntax tree libraries instead of using the rust compiler's original libsyntax parser or [syn](https://docs.rs/syn/latest/syn/) as articulated in the [RFC](https://github.com/rust-lang/rfcs/pull/2256) that [initiated its development](https://github.com/rust-lang/rfcs/pull/2256#issuecomment-451933766). +ink! analyzer follows the same rationale in choosing rust-analyzer's libraries over [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/)'s [syn](https://docs.rs/syn/latest/syn/) based modules. + +As a concrete example, for the !ink/Rust code snippet below that contains only one invalid line, [syn](https://docs.rs/syn/latest/syn/) simply returns an error while [ra_ap_syntax](https://docs.rs/ra_ap_syntax/latest/ra_ap_syntax/) still generates a lossless syntax tree with errors represented by "error nodes", thus allowing analysis to still be performed on the rest of the valid code. +```rust +#[ink::contract] +mod flipper { + + #[ink(storage)] + pub struct Flipper { + value: bool, + } + + bad statement; // This is an invalid line +} +``` + +However, [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/) and related crates and modules will still be used as reference implementations for ink! semantic rule validation. + +##### 2. Language Server + +The language server implements the [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) and acts as a backend that provides language support features like diagnostic errors, code completion suggestions, code/intent actions and hover content to IDEs, code editors and other development tools. +It uses the semantic analyzer as the engine for providing ink! language support features by: +- translating LSP requests into semantic analyzer interface calls. +- translating semantic analysis results into corresponding LSP types. + +It can be reused by multiple IDEs, code editors and other development tools that support LSP servers including [Visual Studio Code, Visual Studio, Vim / Neovim, Emacs, Atom, Sublime Text, Acme, Lapce, Eclipse and many more](https://microsoft.github.io/language-server-protocol/implementors/tools/). + +It will be written in [Rust](https://www.rust-lang.org/) and will use rust-analyzer's [lsp-server](https://docs.rs/lsp-server/latest/lsp_server/) crate to handle LSP protocol handshaking and parsing messages. + +##### 3. Extension/Plugin/Integrations for IDE, Code Editor or Development Tool + +Extensions/plugins/integrations add ink! language support to a specific IDE, code editor or development tool by communicating with the language server running as a separate process using the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) via [JSON-RPC](https://www.jsonrpc.org/). + +Only a VS Code extension will be implemented at this stage of the project. +The VS Code extension will be written in [TypeScript](https://www.typescriptlang.org/) using VS Code's [extension API](https://code.visualstudio.com/api). + +#### Technology Stack + +[Rust](https://www.rust-lang.org/) - will be used for implementing the semantic analyzer and language server components. + +[TypeScript](https://www.typescriptlang.org/) - will be used for implementing the VS Code extension. + +### Ecosystem Fit + +This project will provide building blocks for improving ink! language support in IDEs, code editors and other development tools thus improving the developer experience for ink! smart contract developers. +It will additionally implement an extension for VS Code, [one of the most popular code editors for developers](https://survey.stackoverflow.co/2022/#section-most-popular-technologies-integrated-development-environment), that will also serve as a showcase and reference implementation that other developers can use as a guide for adding ink! language support to their preferred IDE or code editor if it supports LSP servers. + +I'm not currently aware of any similar projects in the Substrate / Polkadot / Kusama ecosystem. +However, for [Solidity](https://docs.soliditylang.org/en/v0.8.19/) and the [Ethereum](https://ethereum.org/) ecosystem, there are many IDE and code editor extensions/plugins (e.g. [this](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity), [this](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) and [this](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) for [Visual Studio Code](https://code.visualstudio.com/) and [Solidity plugin for IntelliJ](https://plugins.jetbrains.com/plugin/9475-solidity)), +a few language server implementations (e.g. [this](https://github.com/NomicFoundation/hardhat-vscode/tree/development/server) and [this](https://ackeeblockchain.com/woke/docs/2.1.0/language-server/) which are both used by their respective VS Code extensions) +and a few static code analyzers, including [Remix Analyzer](https://github.com/ethereum/remix-project/tree/master/libs/remix-analyzer) which is specifically built for IDEs and code editors. + +**NOTE:** The only open source smart contract static code analyzer for the Substrate / Polkadot / Kusama ecosystem I could find is [Vanguard](https://github.com/Veridise/Vanguard), however it operates on [LLVM](https://llvm.org/) bytecode and is therefore not usable as a building block for improving high-level language support in IDEs, code editors and other development tools. + +## Team :busts_in_silhouette: + +### Team members + +- David Semakula [davidsemakula](https://github.com/davidsemakula) + +### Contact + +- **Contact Name:** David Semakula +- **Contact Email:** hello@davidsemakula.com +- **Website:** https://davidsemakula.com + +### Legal Structure + +I'll be working as an individual. + +- **Registered Address:** N/A +- **Registered Legal Entity:** N/A + +### Team's experience + +I'm a Software Engineer & Systems Architect with over 10 years of experience. +I've worked as a technical lead on projects for [HubSpot](https://www.hubspot.com/), [Permobil](https://www.permobil.com/), [Pressboard](https://www.pressboardmedia.com/), [Grindery](https://www.grindery.io/), [InboundLabs](https://w.inboundlabs.co/), [Tunga](https://tunga.io/), [ButterflyWorks](https://www.butterflyworks.org/), [Telegraaf Media Groep (TMG)](https://www.telegraaf.nl/) and many more companies. +I've also won (or been part of teams that have won) prizes at a few hackathons including a category top prize at the recent [Moonbeam Illuminate/22 Hackathon](https://twitter.com/MoonbeamNetwork/status/1610738659656962048). +I hold a Bachelor of Science in Computer Science degree from [Makerere University, Kampala, Uganda](https://cis.mak.ac.ug/). +You can find my full profile at [https://davidsemakula.com](https://davidsemakula.com). + +### Team Code Repos + +- [https://github.com/davidsemakula](https://github.com/davidsemakula) +- [https://github.com/ink-analyzer/ink-analyzer](https://github.com/ink-analyzer/ink-analyzer) +- [https://github.com/davidsemakula/substrate-vault](https://github.com/davidsemakula/substrate-vault) +- [https://github.com/mukutu-tech/mukutu-safe](https://github.com/mukutu-tech/mukutu-safe) + +### Team LinkedIn Profiles (if available) + +- https://davidsemakula.com (I use my own website for my profile) + + +## Development Status :open_book: + +I've developed a proof of concept (POC) for the semantic analyzer that can be accessed on Github at [https://github.com/ink-analyzer/ink-analyzer](https://github.com/ink-analyzer/ink-analyzer). +The POC implements a diagnostic that detects when the `#[ink::contract]` attribute is applied to anything other than a `mod` item and returns a diagnostic model that includes an error message and the text range to which the diagnostic applies. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** ~4.25 months +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 30,000 USDC + +### Milestone 1 — Semantic Analyzer: Setup and Diagnostics + +- **Estimated duration:** ~3 weeks +- **FTE:** 1 +- **Costs:** 5,600 USDC + +| Number | Deliverable | Specification | +|--------:|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 and MIT | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust library crate: Diagnostic errors | I will create a Rust library crate with an interface that accepts ink! smart contract code as input and returns diagnostic errors based on ink!'s semantic rules. Diagnostic errors will include: conflicting ink! attributes and/or arguments based on the item being annotated and list of ink! attribute arguments (e.g `#[ink(storage)]` applied to anything other than a struct), missing required ink! attributes (e.g no `#[ink(constructor)]`, `#[ink(storage)]` or `#[ink(message)]` in a contract mod), multiple annotations of attributes and/or arguments that can only be applied to one item in a contract (e.g multiple `#[ink(storage)]` structs or more than one wildcard selector among `#[ink(message)]`, as well as `#[ink(constructor)]` methods), duplicate ink! attributes on an item (e.g multiple `#[ink(message)]` annotations on one method), overlapping `#[ink(constructor)]`and `#[ink(message)]` selectors. | + +### Milestone 2 — Semantic Analyzer: Code completion suggestions, code/intent actions and hover content + +- **Estimated duration:** ~5-6 weeks +- **FTE:** 1 +- **Costs:** 10,800 USDC + +| Number | Deliverable | Specification | +|--------:|------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 and MIT | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust crate update: Code completion suggestions | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns code completion suggestions for relevant ink! attributes and arguments. | +| 2. | Rust crate update: Code/intent actions | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns code/intent actions for adding relevant ink! attributes and arguments. | +| 3. | Rust crate update: Hover content | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a text range as input and returns documentation for relevant ink! attributes and arguments. | + +### Milestone 3 — Language Server + +- **Estimated duration:** ~3-4 weeks +- **FTE:** 1 +- **Costs:** 6,800 USDC + +| Number | Deliverable | Specification | +|--------:|-----------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 and MIT | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the crate, instructions for installing and using the crate and links to other documentation and resources related to the crate. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust binary crate: ink! Language Server Protocol implementation | I will create Rust binary crate that implements the Language Server Protocol for the ink! language support features provided by the semantic analyzer as outlined in milestones 1 and 2 above (i.e diagnostic errors, code completion suggestions, code/intent actions and hover content as defined in the respective milestones above). | + +### Milestone 4 — Visual Studio Code Extension + +- **Estimated duration:** ~3-4 weeks +- **FTE:** 1 +- **Costs:** 6,800 USDC + +| Number | Deliverable | Specification | +|--------:|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | GPL-3.0 | +| **0b.** | Documentation | I will provide inline source documentation and a README file (published on on [Github](https://github.com/) and the [VS Code marketplace](https://marketplace.visualstudio.com/vscode)) providing general information about the extension, instructions for installing and using the extension and links to other documentation and resources related to the extension. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive integration tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that explains how to use all the components of ink! analyzer, including the VS Code extension, the language server and the semantic analyzer. | +| 1. | Visual Studio Code Extension | I will create a Visual Studio Code Extension that supports the ink! language support features provided by the language server and semantic analyzer as outlined in milestones 1, 2 and 3 above (i.e diagnostic errors, code completion suggestions, code/intent actions and hover content as defined in the respective milestones above). | + +## Future Plans + +I will publish the VS Code extension to the [VS Code marketplace](https://marketplace.visualstudio.com/vscode) and share it along with the code and documentation for all ink! analyzer components in Substrate / Polkadot / Kusama ecosystem developer communities. + +In the short-term, I will likely apply for follow-up funding for: +- adding more features to existing components. +- maintaining existing components. +- adding new reusable components for tools that don't support LSP. + +As the project is a public good, the long-term goal is to create a community of users, contributors and ecosystem partners who are invested in the project's long-term success because of its utility. + +## Referral Program (optional) :moneybag: + +N/A + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website. + + + From 029fbbf0ab52866d047e00ce855f82772de2cec2 Mon Sep 17 00:00:00 2001 From: Samuel Brack Date: Wed, 22 Mar 2023 20:30:40 +0100 Subject: [PATCH 197/665] Create DIA_Bridge_Attestation_Oracle.md (#1611) * Create DIA_Bridge_Attestation_Oracle.md * Integrate Feedback - Clarification on scope of the milestones - Removal of a sentence from the template --- applications/DIA_Bridge_Attestation_Oracle.md | 274 ++++++++++++++++++ 1 file changed, 274 insertions(+) create mode 100644 applications/DIA_Bridge_Attestation_Oracle.md diff --git a/applications/DIA_Bridge_Attestation_Oracle.md b/applications/DIA_Bridge_Attestation_Oracle.md new file mode 100644 index 00000000000..ee5af496357 --- /dev/null +++ b/applications/DIA_Bridge_Attestation_Oracle.md @@ -0,0 +1,274 @@ +# Bridges Attestation Oracle + +- **Team Name:** DIA Data +- **Payment Address:** 0xC13233bd20a7FcB1d7c2394AdE4857b778382264 Ethereum. Preferred currency - USDC (0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48). +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +Decentralized, on-chain bridge attestation oracle for Polkadot using off-chain workers + +Over the last few years, bridges have been the target of a number of high profile hacks. According to the [rekt.news](https://rekt.news/leaderboard/) 'hack leaderboard', 4 of the top 5 hacks in terms of USD value lost were attacks on bridges (total $2.2 billion lost amongst these 4 hacks). Despite many efforts to develop more robust and secure bridge architectures, there is no industry-wide tooling available for protocols to bolster their security in case a bridge is hacked. This is why we aim to to develop a decentralised, real-time bridge status update oracle that will help protocols in the Polkadot ecosystem protect their operations and customer funds. + +![Bridge Attestaion Oracle Solution Overview](https://user-images.githubusercontent.com/103409771/224655563-dbd6dca4-839d-41a5-859e-fa74c8868f84.png "Attestation oracle architecture") + +Our approach is to introduce on-chain verification of bridge balances on the Polkadot network using off-chain workers. The main idea behind this is that all dapps operating on Polkadot parachains will be able to integrate this security module, enabling them to trigger automated precautionary notifications and actions in case bridge balances unexpectedly drop. We achieve this by tracking bridges' locked asset vs issued assets across multiple chains. This allows us to calculate a collateral ratio, which protocols can use to define and trigger safety procedures in their code when the specified conditions are met. + +The DIA team has already gained experience with collateral ratios, while creating fair value price feeds for Liquid Staked Tokens in the Polkadot ecosystem and beyond (more info [here](https://www.diadata.org/xlsd-liquid-staking-oracle/)). The bridge attestation oracle would be specifically designed for use in the Polkadot ecosystem. Being a crosschain oracle by nature, we perceive a significant benefit in the proposed solution, because using the collateral ratio in the determination of asset prices that use bridges to bring liquidity to multiple blockchains enables the calculation of fair value prices. + +### Project Details + +#### Architecture overview + +The proposed project consists of a few core components that are to be developed. + +First, an overview regarding the data structures needed to represent bridge states: + +``` +Asset: + Address string + Chain string + Decimals uint + Symbol string + Name string + +BridgeSet: + LockedAssets []Asset + MintedAsset Asset + LockedAmounts []uint + MintedAmount uint + +Bridge: + Sets []BridgeSet +``` + +Note that `BridgeSet` is directional, so a bridge can hold a set twice in both directions if needed. By that, we can track minted and locked pairs in an omnidirectional way. Also note, that a `BridgeSet` mints one token but can access several locked assets on different source chains. + +With these in mind, the following components are proposed: + +1. An off-chain worker which reads bridge states: This component is used as an adapter between bridge states and the target parachain. It is used to read the amounts of locked assets from specified addresses (the bridge reserve addresses). +2. A token identification system which identifies matching tokens across multiple chains (i.e. both sides of each bridged asset). Identification requires that for an asset at least the chain and the address are defined. + +An example flow on the token identification within the proposed system could look like this: +1. Read bridge-locked tokens on multiple source blockchains with RPC calls. +2. Compute total amount of locked tokens by adding the values from the previous calls. +3. Determine the amount of issued tokens on the target network. +4. Perform calculation `MintedAmount - Sum([]LockedAmounts)`. +5. Output values of number of issued tokens, number of locked tokens and collateral ratio values. + +All components will be available open-source to enable access to any dapp/protocol that intends to integrate this or further develop the components. +Also, a standard format (similar to the defined data structures above) will be developed to facilitate integrations of future bridges. + +#### Technology stack + +- Pallet & off-chain workers will be the main enabler of the entire solution, reflecting Polkadot's native feature of off-chain workers integrated with pallets. + - Rust programming language will be used to develop the pallet and the off-chain worker. +- RPCs will be the main gateway for querying data from different chains. As RPCs represent single points of failure, they will be implemented using the following logic: + - Only publicly available RPCs will be used to circumvent private key management hurdles for publicly accessible solutions. If technically possible, we would enable the pallet integrator to choose their own private RPCs, if they prefer this. + - We will set-up a back-up system of at least 2 additional public RPCs in case one RPCs fails. + - We will set-up backstops for generating collateral value in case at least one of the RPCs fail. + +Hosting and infrastructure will be organized as follows: + +The main repository will be available on Github. Pre-built instances of our container images will live in Docker Hub for everyone to download. We seek to implement a CI/CD system that automatically builds and publishes latest changes so that anyone can use the latest version with ease and integrate fetching the latest version in their automation flow as well. Due to the decentralized nature of the proposed architecture, only the token identification data needs to be hosted centrally. For that, we will either extend existing community directories or build our own, with hosting the resulting identification files on github as well. + +We will also host documentation on how to use and participate in the system. + +#### MVP + +Our MVP will consist of four main parts: +1. The pallet providing collateral value that can be integrated by parachains +2. The documentation of integration +3. Integration of 3 bridges +4. Guidelines on integrating new bridges + +#### Expectations + +Team DIA will: +- Create the framework and open-source the library of this integration. +- Integrate 3 bridges for initial use. Further integrations will be open for submissions from contributors. + +We will not: +- Cover a security audit as a part of MVP design. + +### Ecosystem Fit (Requirements) + +#### Overview + +The Polkadot ecosystem is a natural fit for this solution for several reasons: +- Polkadot is a network of numerous parachains which utilize XCM for trustless and secure communication without relying on bridges. However, to achieve the vision of interoperability with external chains, bridge monitoring and attestation are necessary to establish trust and ensure the integrity of the transactions between the networks. +- The entire architecture of the product is tailored specifically to the Polkadot ecosystem due to it's unique ability of executing computational programs via off-chain workers. +- The tool adds significant value for a variety of Polkadot ecosystem actors - parachains, dapps, bridges, oracles and others. +- The tool aims to serve as a public good on Polkadot, therefore will benefit anyone that integrates it. + +#### Target audience + +We have identified our target audience as follows: +- Parachains are the target facilitator that will enable the adoption, but they also stand to benefit from integration themselves as the tool enables them to track bridges' security on a chain level. +- DeFi dapp developers (e.g., lending protocols) are the main beneficiaries. We expect to see most adoption from them, as they are the arbiters that enable bridged assets to be traded/staked or used however else and thus are most directly exposing their users' assets to these risks. +- Bridges can integrate the security module to create their own security processes. They will strongly benefit from having an independent third party tracker next to their own internal ones. +- Oracles will be able to use the collateral ratio for interchain asset pricing. In theory, native asset trading statistics can be bridged to synthetic asset in order to decrease manipulation risk. +- As the module will be fully open source, any other Polkadot ecosystem developer/team can integrate it for their use cases. + +#### Meeting the needs + +Bridge hacks are rare but painful because of the potentially high amount of funds that are constantly at risk / an attractive target for malicious actors. Therefore, the bridge attestation oracle will provide a live auditing tool for any actor in the Polkadot ecosystem that wants to make their operation more secure. + +In discussions with various ecosystem actors, the idea and architecture of the solution were presented with the goal of validating the problem and the potential solution. We received supportive feedback from all interviewees, and therefore decided to pursue the inititive further. + +To verify the relevance of the idea we conducted interviews with several ecosystem participants, including + +- Acala +- Astar +- AstridDAO +- Interlay +- Pendulum +- StellaSwap + + +#### Similar projects + +We were not able to identify any similar solution present in the market. Similar approaches can be attributed to: +1. Proof of Reserves oracles - developed by several oracle providers, these oracles track the amount of tokens in reserves and provide this information publicly. +2. Cross-chain messaging protocols - these have architectural similarity in that one could transmit bridge balances as a message, however there are several limitations to this approach: + - They would act as a 2nd layer bridge (bridge for bridge balances) and are also prone to manipulation. + - Gas fees would have to be paid on the origin chain, which causes potentially volatile costs required to run such operation, putting them at risk. +3. Real time alert providers for smart contract activities. Tools such as [Forta](https://explorer.forta.network/) allow to set-up monitoring and notifications for pre-determined smart contract activities. However, they do not offer a direct solution for bridge balance monitoring, which we aim to deliver. + +As our proposed solution is different in nature, we do not perceive any of the existing approaches as real alternatives. Additionally, all of these solutions are commercially driven, while the bridge attestation oracle will serve as a public good. + +#### Risks + +- RPC manipulation risk - the solution will use RPC services to retrieve data from blockchains. Therefore, if someone manages to manipulate RPC data, the final value could be exploited. A potential mitigation could be to introduce connections to multiple RPCs simultaneously to reach a consensus. +- Contract migration risk - from time to time protocols may need to migrate or upgrade contracts. This could produce incosistent values. To avoid this, direct communication channels with bridges can be set up and tracked to flag any changes on the smart contract level. This could be complemented with community based forum where contributors could also flag these migrations manually. +- Off-chain worker operational risk - the solution is developed on the assumption that off-chain workers can be trusted and will be maintained within the Polkadot ecosystem. However, upgrades, malfunctions or the unlikely event of discontinuation of off-chain workers poses a risk to the solution. In this case, migration to another off-chain computation platform could be a mitigation (e.g. Phala or Integritee). + + +## Team :busts_in_silhouette: + +### Team + +- Samuel Brack // Cofounder and CTO at DIA // [Github](https://github.com/kaythxbye) // [LinkedIn](https://www.linkedin.com/in/samuelbrack/) +- Philipp Pade // Lead Integrations Developer at DIA // [Github](https://github.com/jppade) // [LinkedIn](https://www.linkedin.com/in/jan-philipp-pade/) +- Nitin Gurbani // Senior Developer at DIA // [Github](https://github.com/nnn-gif) // [LinkedIn](https://www.linkedin.com/in/nitin-g-098229228/) +- Zygis Marazas // Product Lead at DIA // [LinkedIn](https://www.linkedin.com/in/zygimantas-marazas/) +- Paul Claudius // Cofounder and Business Development Lead at DIA // [LinkedIn](https://www.linkedin.com/in/paulclaudius/) +- Dillon Hanson // Business Development Manager at DIA // [LinkedIn](https://www.linkedin.com/in/dillonhanson/) + + +### Contact + +- _**Contact Name:** Paul Claudius +- _**Contact Email:** paul.claudius@diadata.org +- _**Website:** https://www.diadata.org/ + +### Legal Structure + +- _**Registered Address:** Baarerstrasse 10, 6300 Zug, Switzerland. +- _**Registered Legal Entity:** DIA e.V. + +### Team's experience + +Experience which will help to succesfully develop this project is listed below: + +#### Development of a pallet for oracles + +Team DIA has extensive experience in developing a pallet for Polkadot using off-chain workers. The pallet was developed to serve the purpose of accessing oracles natively by parachains. The documentation of the solution can be found [here](https://docs.diadata.org/documentation/oracle-documentation/oracle-structure/polkadot-offchain-worker). + +#### Scraping Multichain bridge + +Team DIA already did experiments with automatic bridged assets identification, therefore we already developed a [Multichain](https://multichain.xyz/) bridge scraper which maps out assets accross a variety of chains. + +#### Development of collateral based values for nASTR, iBTC, stDOT, stETH, rETH, vKSM, kBTC + +We recently launched xLSD - a product that tracks collateral values for liquid staked tokens + +#### Established partnerships in oracle fields with Polkadot ecosystem parachains + +We are already present in the Polkadot ecosystem and have developed oracles for a range of parachains and dapps, and integrated natively with a range of DEXs including: + +- Moonbeam & Moonriver + - Midas Capital + - Mixbytes + - Orbiter One + - Raze Network +- Astar + - Starlay + - SIO2 Finance + - Algem + - AstridDAO + - Orcus Finance + - Starfish Finance + - Rikkei Finance + - Arka Finance + - Standard Protocol +- Pendulum +- Interlay +- Bifrost + +DEX integrations: +- Beamswap (Moonbeam) +- Stellaswap (Moonbeam) +- Arthswap (Astar) +- Huckleberry (Moonriver) +- Solarbeam (Moonriver) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 - Core functionality + +- **Estimated duration:** 1.5 months +- **FTE:** 1.5 +- **Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can intgrate the collateral value into their code, which will display the functionality. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that introduces to the solution with all the guidelines included. | +| 1. | Attestation oracle core: Off-chain worker | We will create an Off-chain worker as stated in the architecture overview section. | +| 2. | Attestation oracle core: Pallet | The entire solution will be made available as Pallet (described in architecture section). | +| 3. | Attestation oracle core: RPCs | We will set-up connections to RPCs of other chains with fallback functionality (at least 2 RPCs per chain). | +| 4. | Attestation oracle core: Collateral ratio calculation | The logic for calculating collateral ratio will be developed within the off-chain worker. | + + +### Milestone 2 — Bridge integrations + +- **Estimated Duration:** 1.5 months +- **FTE:** 1 +- **Costs:** 12,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can integrate bridges collateralization value, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Bridge Integration: XCM | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [XCM bridge contracts](https://github.com/paritytech/polkadot/tree/master/xcm). | +| 2. | Bridge Integration: Multichain | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [Multichain bridge contracts](https://github.com/anyswap). | +| 3. | Bridge Integration: Interlay | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [Interlay bridge contracts](https://github.com/interlay/interbtc). | + + +## Future Plans + +We see a lot of potential for the future of the solution, these include: +- Develop attestation for multichain Liquid Staked Tokens (e.g. aUSD). +- Spin-off as independent solution (not a pallet). +- Develop monitoring dashboards for researchers. +- Create built-in notifications services. +- Expand into any smart contract metrics tracking that allows users to define their own logic. +- Introduce community driven governance for any changes and future directions of the solution. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** - personal recommendation From 7ccf1194b6594c5b95aed7d51d6f639eb143632b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 23 Mar 2023 09:00:59 +0100 Subject: [PATCH 198/665] Update index.md Add Ink Analyzer --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 74f96a50d3c..9337d45e658 100644 --- a/applications/index.md +++ b/applications/index.md @@ -66,6 +66,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | +| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | ## 2022 From ff11ced29e503589c994a7091c91fae6b4f97a20 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kasia=20=C5=81ukasiewicz?= Date: Thu, 23 Mar 2023 09:01:58 +0100 Subject: [PATCH 199/665] Grant application - High-availability validator setup (#1203) * Grant application - High-availability validator setup * Update High_availability_validator_setup.md The updated version of the original grant proposal that required some feedback from the Parity developers team * Apply suggested changes The proposal file has been updated * Reduced the sum of application * Apply suggestions from code review Co-authored-by: S E R A Y A * Update applications/High_availability_validator_setup.md Accept review suggestions Co-authored-by: S E R A Y A --------- Co-authored-by: S E R A Y A --- .../High_availability_validator_setup.md | 182 ++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 applications/High_availability_validator_setup.md diff --git a/applications/High_availability_validator_setup.md b/applications/High_availability_validator_setup.md new file mode 100644 index 00000000000..839f60592b9 --- /dev/null +++ b/applications/High_availability_validator_setup.md @@ -0,0 +1,182 @@ +# High-availability validator setup + + +- **Team Name:** Bright Inventions +- **Payment Address:** 0xD75dDC4Aa3618e1417c68E5Df79ef9D66E4B1Ed9, DAI +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: + +Validator leader selection via Raft consensus. +This is a follow-up to the previous version of the grant, that was up for discussion with the Parity development team. + +### Overview + +Currently, the recommended setup is to have one active node per validator. The main advantage of this approach is that it removes the danger of equivocation, thus preventing slashing. The key drawback is the lack of a ready backup machine to takeover the responsibility of producing blocks, voting on finality etc. in case the primary one fails. + +The drawback can be somewhat remedied by having a backup node in sync, but without access to the session keys necessary for authoring blocks. The process of replacing the keys, however, is manual. Furthermore, the session keys cannot be replaced mid-session and this introduces a time delay for when the validator is active again. + +### Project Details + +Rather than relying on one validator node to perform the work, what if we had multiple nodes equally capable of taking part in consensus, yet still avoiding the risk of equivocation? + +Since all our validator nodes are trusted and we don't worry about censorship resistance, we can leverage a leader-follower model to ensure high availibility. [Raft](https://raft.github.io/) is a good candidate - it offers a simple consensus mechanism, fault-tolerance and performance. It ensures only one leader is ever in charge of interacting with the network, while the followers simply receive the state updates and automatically replace the leader in case of a failure. + +Following the feedback from the Parity developers team our solution is not tightly coupled with Substrate node as it adds too much complexity in the node. It should be implemented in a way that makes this optional and loosely coupled with the node. + +### Ecosystem Fit + +The goal is to present a solution that would update the current recommended setup of one active node per validator and allow to use multiple nodes. + +## Team :busts_in_silhouette: + +### Team members + +- Katarzyna Łukasiewicz +- Kasper Ziemianek +- Michał Graliński + +### Contact + +- **Contact Name:** Katarzyna Łukasiewicz +- **Contact Email:** katarzyna.lukasiewicz@brightinventions.pl +- **Website:** https://brightinventions.pl/ + +### Legal Structure + +- **Registered Address:** ul. Jana Matejki 12, 80-232 Gdańsk, Poland +- **Registered Legal Entity:** Bright Inventions Sp. z o. o. + +### Team's experience + +Bright Inventions is a team of over 70 full-time onsite developers, project managers & UX/UI designers - experts in mobile and web applications, systems integration, IOT devices and Blockchain platforms. + +We believe that building a software product is about people working together in a collective way. By offering complex support – mobile and web development as well as IT consultancy we try to eliminate roadblocks towards engaging clients as partners at every step of the process. + +We support startups, digital agencies as well as medium to big businesses. We cooperate with startups, accelerators and incubators. Whatever the client profile is, we always aim to establish a satisfying partnership for both sides. Since 2012 we have built software for more than 40 businesses worldwide. + +The team: +- Michał - Rust Developer, for over 12 years he has been working as a C++ developer. In his career he participate in various projects, starting from the embedded devices, automotive, mobile games and ending on the financial systems. Right now he is focused on the blockchain technology. +- Kasper - Software developer with 10 years of experience. Former Java Developer who has recently switched to Rust. Around blockchain ecosystem since 2017. +- Kasia - she has been working with agile methods for over 10 years, both as a researcher and a practitioner. She believes in teamwork and a power of user centered mindset. With experience in leading international projects, she knows how to support and encourage timely and high quality deliveries. + +Previous grants that the team members were involved in: +- BrightTreasury +- ZK-Snarks tutorial in Substrate + +### Team Code Repos + +- https://github.com/bright/substrate + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/bufta +- https://github.com/kziemianek +- https://github.com/mgralinski-bright + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/katarzyna-łukasiewicz-b473901aa/ +- https://www.linkedin.com/in/kziemianek/ +- https://www.linkedin.com/in/michal-gralinski-b464152/ + + +## Development Status :open_book: + +This grant proposal is a follow-up to a discussion that began in autumn 2022. Since then we managed to receive some required feedback from Parity development team and we continued to apply their suggestions in the span of these few months. It allowed us to already develop most of the original scope. + +## Development Roadmap :nut_and_bolt: + + +### Overview + +The development of the specified goal will be broken into 3 milestones, lasting 4 weeks (M1), 3 weeks (M2) and 2 weeks (M3). + + +Definition of Done for each deliverable: +
    +
  • Unit tests passed
  • +
  • Code has been reviewed by peer
  • +
  • Acceptance criteria were met
  • +
  • Internal QA has been performed
  • +
  • Documentation has been written
  • +
+ + +At the end of each milestone: +- The deliverables listed for the given milestone have been implemented and the DoD criteria were met, allowing the user to perform the defined actions +- The functioning code has been pushed to the public repository, indicated in the proposal + +## Deliverables :nut_and_bolt: + +* **Total Estimated Duration:** 9 weeks +* **Full-time equivalent (FTE):** 1 +* **Total Costs:** 25,000 DAI + +### Milestone 1 - Block authoring, finalization & liveness PoC + +The goal of the first milestone will be adding a switch to the substrate codebase, which will conditionally allow block production, voting or sending `I'm online` message. We will achieve this by introducing a `PermissionResolver` trait. Only for the purpose of this milestone there are going to be two trivial implantations of this trait. First configuration will grant the validator permissions and the second one will not. At this stage we only want to verify if hardcoded conditional logic works well with the nodes with the same auth key but different configurations (permission granted/denied). For the testing purpose we will provide an additional option to the CLI, to run a validator with one of the pointed configurations. + +* **Estimated Duration:** 4 weeks +* **FTE:** 1 +* **Costs:** 12,500 DAI + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide inline documentation.| +| **0c.** | Testing and Testing Guide | We will provide unit tests and the guidelines for running and testing it the scope. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Update substrate | Modify the substrate code to conditionally submit blocks/votes for finalised blocks (GRANDPA)/`I'm online` messages. | +| 2. | Update substrate client - cli | Modify the substrate code to conditionally grant or permit permissions. There will be option to run node in permission granted or permission denied mode). It will be useful to prove that permissioning works by running two nodes with same auth keys but different modes (permission granted/denied) | +| 3. | Integration test | A dockerised setup that allows to run network in setup described above. | + +### Milestone 2 - External service for permission granting + +The second milestone introduces a microservice which will test dynamic switching of the permission granting, during the validator's work. We will be able to test permission granting triggered whenever the block is produced, the vote is made on the finalized block (GRANDPA) and a message (`I'm online`) is sent for communicating liveness. Only the leader validator will be granted to run those actions. At worst, the author may miss a slot. + +The service should contain only basic logic (e.g. return `true` for node that asked first and `false` for following ones). + + +* **Estimated Duration:** 3 weeks +* **FTE:** 1 +* **Costs:** 7,500 DAI + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide inline documentation.| +| **0c.** | Testing and Testing Guide | We will provide unit tests and the guidelines for running and testing it the scope. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Basic service | Create a microservice that accepts connections from the node. | +| 2. | Getting permission from microservice | Set up a custom node repository and write the `PermissionResolver` trait implementation for getting permission from the microservice. | +| 3. | Allow as optional | The choice of using an outside decision making agent for block submission should be configurable in the cli. | +| 4. | Clean up substrate code | Remove deprecated cli options. | +| 5. | Integration test | A dockerized setup that allows to run custom node networks and a microservice in order to show that the created solution works. | + +### Milestone 3 - Raft based current leader selection + +Replace the dummy microservice as an infrastructure component with a [TiKV](https://github.com/tikv/tikv) cluster used for leader selection. +Each node should try to get authorship permission based on the KV (Key-value) state. Replace the current microservice client with a TiKV client and add corresponding logic. + +* **Estimated Duration:** 2 weeks +* **FTE:** 1 +* **Costs:** 5,000 DAI + +| Number | Deliverable | Specification | +| ------------- | ------------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide inline documentation.| +| **0c.** | Testing and Testing Guide | We will provide unit tests and the guidelines for running and testing it the scope. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Run the necessary Raft services | Set up a local dev infrastructure to run TiKV components in order to provide a distributed KV store. | +| 2. | Integrate a Raft client into the node | Replace the previous logic with a TiKV based one and modify configs to allow the TiKV client to connect to Placement Drivers. Placement Drivers (PD) is one of the components which stores metadata for the entire TiKV cluster. It is responsible for sending commands to the TiKV nodes. The minimum setup for PD is to manage three TiKV nodes. | +| 3. | Integration test | A dockerised setup that allows to test the Raft consensus mechanism. | + + + +#### Leader selection process + +![](https://i.imgur.com/ummEJOK.png) +Similar for rounds and sessions. From c537b874f8fdf5469e8f7b31e654e7e4fd32c9a4 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 23 Mar 2023 09:04:46 +0100 Subject: [PATCH 200/665] Update index.md Add High-availability validator setup --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 9337d45e658..abb5faf6a8c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,6 +67,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | + ## 2022 From f4ba5367fe9c1cb35312979e262afbc848dd2a4b Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 23 Mar 2023 09:11:55 +0100 Subject: [PATCH 201/665] update raft validator rfp --- docs/RFPs/{Open => Under Development}/raft-validators.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Under Development}/raft-validators.md (97%) diff --git a/docs/RFPs/Open/raft-validators.md b/docs/RFPs/Under Development/raft-validators.md similarity index 97% rename from docs/RFPs/Open/raft-validators.md rename to docs/RFPs/Under Development/raft-validators.md index 3aa80f361dc..b07a20fd265 100644 --- a/docs/RFPs/Open/raft-validators.md +++ b/docs/RFPs/Under Development/raft-validators.md @@ -1,6 +1,6 @@ # High-availability validator setup -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/High_availability_validator_setup.md) * **Proposer:** mmagician * **Projects you think this work could be useful for:** Polkadot & Kusama Validators diff --git a/docs/rfps.md b/docs/rfps.md index b3a956c5f95..fbe7b431d58 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -54,7 +54,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | | [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 🔴 | 22.03.2023 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | -| [raft-validators.md](RFPs/Open/raft-validators.md) | 🟢 | 23.11.2021 | +| [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 🟡 | 23.05.2023 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | | [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🔴 | 03.03.2023 | | [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | From c38807ea824c1943639010c2d42fcff46b374d45 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 23 Mar 2023 09:23:27 +0100 Subject: [PATCH 202/665] Update index.md Add DIA Data --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index abb5faf6a8c..868aca6bb44 100644 --- a/applications/index.md +++ b/applications/index.md @@ -68,7 +68,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | - +| [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | ## 2022 From 8cbb9dc21c289e3de88955e323ca23cfccc83b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 23 Mar 2023 09:47:50 +0100 Subject: [PATCH 203/665] Update index.md XCW (Kuma Wallet) M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 868aca6bb44..8fbc5133efe 100644 --- a/applications/index.md +++ b/applications/index.md @@ -34,7 +34,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☐ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | From 1ed370762f2cdfa643e1f5338cd4c554e1d02092 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 23 Mar 2023 09:39:54 -0300 Subject: [PATCH 204/665] Update index.md (#1637) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 8fbc5133efe..26c421ccaa6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -52,7 +52,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | -| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☐ | ☐ | +| [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | From 6e5bd9f13e1a82cf17363535eac62f90a2307901 Mon Sep 17 00:00:00 2001 From: katerinabc Date: Thu, 23 Mar 2023 14:42:38 +0000 Subject: [PATCH 205/665] TogetherCrew: Community Health Check (#1482) * community health check * 1 added a section on how we handle GDPR. 2 clarified the milestones. 3 specified our future plans * added currency to payment address * based on feedback pivoted the grant to create a community health dashboard for Twitter and not Discord" * added to milestone 2 information about tests and docker files * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * Update applications/community-health-check.md Co-authored-by: S E R A Y A * answered the open questions from takahser and noc2. * remove jpg file * Update applications/community-health-check.md Co-authored-by: S E R A Y A * specified the edge types * cleaned up milestone 1 --------- Co-authored-by: S E R A Y A --- applications/community-health-check.md | 292 +++++++++++++++++++++++++ 1 file changed, 292 insertions(+) create mode 100644 applications/community-health-check.md diff --git a/applications/community-health-check.md b/applications/community-health-check.md new file mode 100644 index 00000000000..8d1bfa7a66b --- /dev/null +++ b/applications/community-health-check.md @@ -0,0 +1,292 @@ +# Community Health Analytics and Benchmarking + +- **Team Name:** TogetherCrew +- **Payment Address:** eth:0x6612213880f80b298aB66375789E8Ef15e98604E (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + + + +### Overview + +If Web3 is all about communities, how do we know if we’re heading in the right direction? We can guess or use anecdotal evidence. Or we can use science and analytics to map our paths. + +We are proposing a project to: + +- develop a framework for Community Health with actionable metrics +- create an open source data collection tool +- implement the tool in Polkadot and Kusama communities +- analyse the interactions and perceptions data to validate the framework and provide insights to advance the communities + +As communities exists in different places, to get an accurate health score it is necessary to combine data from different platforms. Over the past six months we have developed a community health dashbord for Discord data (private data) and are now integrating public data (Twitter) and on-chain data (governance). + +We use a grant-matching approach to fund our project. The completed development work has been funded by Aragon, Polygon, MetaCartel, Aave, and Near. + + +**An indication of how your project relates to Polkadot / Kusama.** +Polkadot is a diverse ecosystem with "[more than 200 teams](https://polkadot.network/blog/polkadot-2022-roundup/)" using Polkadot's technology stack. A lot of development within the ecosystem makes it increasingly difficult for community members to stay on top of everything. The evaluation of the community will provide members and leaders with deep insights into the challenges the community is facing. We compute the community's fragmentation, decentralization, and small world score. In addition, we create custom metrics for engagement and disengagment. + + +**An indication of why your team is interested in creating this project** + +### Problem Space + +Existing community dashboards provide a first basic level of insights into a community: individual activity. But they often ignore that the building block of a healthy community isn't just posting messages but the interaction between people. Current community dashboards (e.g., Orbit, Commosor, Blazer, Statbot) focus on members’ posting behavior and event or meeting attendance. Community members are treated in isolation, ignoring that humans are social beings and thrive thanks to interactions. From [team research](https://www.cs.cmu.edu/~ab/Salon/research/Woolley_et_al_Science_2010-2.pdf) we know that a team's collective intelligence is a primary predictor of performance, and not the individual skills and knowledge team members contribute. One key component of collective intelligence is conversational turn-taking, creating space for other people to talk. + +### Problem Solution +We are offering community health checks that are based on the relationships between people and their sense of belonging and ownership in the community. We do this by creating and implementing a science-based community health framework. This framework rests on years of research on communities and social networks. + +Our community health checks combine objective data (interactions between contributors) and subjective data (contributors perceptions about the community). Interactions between contributors are a vital data point: During interactions, members exchange knowledge, develop ideas, and influence each others perspective. Therefore, a community dashboard that measures interaction patterns, compared to solely activity, acknowledges that contributors do not act in isolation. Measuring perception data through pulse survey (tiny surveys with 3-5 questions) gives community leaders a quick and easily administered insights into how contributors feel. + +Although our initial focus is community health metrics, the proposed approach sets the foundation for further applications. The combination of SNA and pulse surveys offers unprecedented actionable insights in real-time. Some of the potential applications and insights for the ecosystem are + +- Generate baseline metrics for community health / vibes to quantify and better understand the impact a specific event is having on a community and/or sub-groups within the community +- Identify measurements of decentralization to serve as KPIs or Insights metrics +- Build funnels to track member onboarding and identify areas for improvement +- Monitor specific topics like contributor wellbeing, alignment, community experience, etc. in near real-time +- Attract talent and investment with objective community health metrics instead of proxy metrics like member count or proposal count, or financial metrics such as TVL +- Help new contributors find context-rich mentors outside of the existing pool of well-known but time-poor candidates + +### Rationale + +Social network data and its methodology (Social Network Analysis; SNA) is a structured way to visualize how communications, information, and value creation occur through an organization based on interaction graphs. Although a relatively new decision-making tool for leaders, SNA is gaining popularity over traditional survey tools. SNA has been linked to a wide range of insights, such as improving contributor retention, avoiding member burnout, predicting team performance and community resilience, identifying key contributors, enabling decentralization, and improving coordination. + +![Data points for measuring community health](https://user-images.githubusercontent.com/5393704/224280603-03e8b7a7-4212-4a46-b957-ef06ebe3de5a.png) + +Pulse surveys are frequent and automated micro-surveys that provide qualitative and quantitative insights. In traditional organizations, they have been shown to increase employee response rates and employee engagement with related initiatives. They’re also used as a tool for culture design and implementing culture change. Lastly, pulse surveys significantly reduce admin work for community managers and related roles. + +A challenge with online communities is that they can exist in many different places (platforms). We began with developing and testing our method using Discord. The advantage of Discord compared to other platforms is a clear boundary of who is a member (people who joined), and an organization of interaction into channels and threads. + +For this grant proposal, we are going beyond Discord data to consider a community's meeting place with more fluid boundaries: Twitter. The open nature of Twitter, compared to Discord, makes it easier for individuals to follow topics and engage in a conversation. Thus, Twitter can be viewed as the first place individuals get to know about a community. The interaction that is happening in the Twitter community helps people decide if they want to commit more time and energy and join Discord. + +The community health check will provide insights into three areas: +1. Twitter Community Health: The section combines the community's digital footprint (objective interaction data assessing interactions within a community) with members' sense of community (subjective sense of ownership). +2. Member Insights: The section displays the pulse survey results, measuring members' sense of community. + + +- What your project is _not_ or will _not_ provide or implement +We will not provide a detailed action plan of how to increase engagement on Twitter. We will provide high-level recommendations based on the resulting metrics. + +At this stage, we do not provide sentiment or keyword analysis at the community or interaction level. We start with a neutral perspective on interaction (two people interacting with each other) and do not consider finer nuances (is the interaction positive or negative). + + +- An overview of the technology stack to be used +Our dashboard is built using a combination of Nextjs (Typescript). Also, we use Python for analytics & ExpressJs for the backend. Data is stored in a MongoDB. + +- Documentation of core components, protocols, architecture, etc. to be deployed +Installation instructions for the first version of our community health checks: +- data extraction bot: https://www.notion.so/netnigma/Community-Health-bot-Tutorial-94a4b089681f41aeb028e1bffd25aaad +- DIY health checks: https://www.notion.so/netnigma/Getting-started-with-the-Health-Pulse-Onboarding-guide-8545d383ec5d4d70aeb4b2aae22d97d7 + + +- PoC/MVP or other relevant prior work or research on the topic +We published our research framework ([Long version](https://rndao.mirror.xyz/F-SMj6p_jdYvrMMkR1d9Hd6YbEg39qItTKfjo-zkgqM); [summary](https://rndao.mirror.xyz/fsCGRlYR5rieDCVPnAnSAGL98wNWJyFbf1T_A2r-_6Y)) + +We did a health check for MetaGame, who tweeted it [here](https://twitter.com/MetaFam/status/1603818967528718336). + +We are running the community health check on our small team. Our low fidelity [dashboard](https://www.figma.com/proto/jflSBwHW3b5KgohsaYExuN/TogetherCrew?scaling=scale-down-width&page-id=0%3A1&starting-point-node-id=1%3A49&show-proto-sidebar=1&node-id=1%3A49&hide-ui=1) is available. + + + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? +Our project gives the ecosystem information about its health by measuring the interactions (conversations, relationships) between contributors. We consider this a "soft performance indicator", because it doesn't measure objective aspects (e.g., performance, dapps launched, bugs fixed) but centers on the humans of the ecosystem. + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? +The community health check is for community managers and moderators to support them in their work by providing community metrics. + +- What need(s) does your project meet? +Our project provides moderators, leaders, and contributors with a bird's eye view of what is happening inside the ecosystem. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? +Our current approach rests on off-chain data. Other community analytics dashboard exists, fetching data from various off-chain data. However, they focus on posting behavior and not on the interaction between members. Individual posting behavior focuses only on the number of activities of a person, but not how these activities impact others. Our data points are relationships (replies, mentions, emoji reactions). Orbit.love reach metric, conceptually, comes close to our metrics, but technically also rests on individual posting behavior and not interaction data. + +Looking at on-chain community analysis, Chainverse is similar in terms of methodology (network analysis). However, they are currently solely focusing on on-chain data and are adopting a knowledge graph methodology. + +There is a [RFP for website and on-chain data analysis ](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/analysis-website-and-data-platform.md). The RFP is about creating an "easy-to-use front-end with sharable customized dashboards" and thus broader than our proposal. + + +## Team :busts_in_silhouette: + + + +### Contact + +- **Contact Name:** Katerina Bohle Carbonell +- **Contact Email:** katerina@netnigma.com +- **Website:** http://www.togethercrew.com/ + +### Legal Structure + +- **Registered Address:** na +- **Registered Legal Entity:** na + +### Team Member and their experience + +We combine deep expertise in Network Science and Organisational Network Mapping, Business Intelligence, DAOs and Community Building. + +**Team Leads** + +Katerinabc +Ph.D. in Team Dynamics using Social Network Analysis, Teaching Collaboration, and Organizational Performance at Northwestern University (since 2016). +Co-organized Learning in Networks sessions at the International Conference of Social Network Analysis (2018 - 2020), and previously advised a people analytics company on social network metrics. +- Twitter: twitter.com/katerinabohlec 1 +- Linkedin: linkedin.com/in/katerinab +- Github: https://github.com/katerinabc/ + +Danielo +Previously, Head of Governance at Aragon, 8 years experience in Organization Design consulting (clients include Google, BCG, Daymler, The UN, and multiple startups), and visiting lecturer at Oxford University. +- Twitter: https://twitter.com/_Daniel_Ospina +- LinkedIn: https://www.linkedin.com/in/conductal/ + +Thegadget.eth +Software Engineer. Previously, Product Manager at Neolyze (Business Intelligence Dashboard for Instagram). +- Github: https://github.com/thegadget-eth/ +- Twitter: https://twitter.com/mr_gadget22 + + +Part of our team is also a tech lead ([Mehrdad](https://github.com/mehrdadmms)), UX designer ([DenisFox](https://www.linkedin.com/in/denisabrichtova)), Front-end developer ([Nima](https://github.com/Zueis), Back-End developer ([MagicPalm](https://github.com/magicpalmtree)), data analyst ([Ene](https://github.com/TjitsevdM)), and operations/business development lead (Ashish). + + +**Team Advisor** + +Sam +Previously, Head of Technical Research at Aragon. Previously, Lead Developer of the official JavaScript API for the Ethereum blockchain. +- Github: https://github.com/nivida 1 +- Twitter: https://twitter.com/furter_samuel + + +### Team Code Repos + +All repos with the *tc* preface are part of the TogetherCrew project (community health check) +- https://github.com/RnDAO + + +## Development Status :open_book: + +The project consists of a research part (conceptual framework) and a development part (open source data collection tool). The first phase of the research part has been completed. + +### Conceptual Framework +We began to work on the community health check in Spring 2022. We have assembled a team including two PhDs in network science and an organisation designer with significant DAO and community building experience to bridge both theory and practice. We’ve reviewed over 50 papers on community, social network analysis, resilience, trust, engagement, and more. We synthesized the findings to define key indicators with high validity and predictive capacity for community health, while also taking a holistic perspective that accounts for member’s wellbeing. + +We have published our [conceptual framework](https://rndao.mirror.xyz/F-SMj6p_jdYvrMMkR1d9Hd6YbEg39qItTKfjo-zkgqM). This framework describes the different nested systems within a community and details a number of metrics (*vital signs*). It incldues insights from one of our team members on [network resilience network biomimicky](https://network.mirror.xyz/EaRncgRP-8_UzHzlZtu4G8FVxcK-GvgtouYbkEVFrc4). + + +### Data collection +For the **data collection tool**, we’re going beyond traditional surveys by combining interaction data with short, targeted pulse surveys. Interaction data provides us with objective data about what is happening inside the community (social network data). While pulse survey data offers insights into members' beliefs and emotional attachment to the community (pulse surveys). + +The data is anonymised and collected in a central repository for this first phase (we’re exploring decentralised hosting) and managed by a team having received ethics training and at risk of losing their credentials should it be misused. + +Currently, the data pipeline for Discord is ready and functional. We have used Discord's API to fetch the data. In February we did a soft launch of our dashboard which only visualises Discord activity. The charts for displaying our custom-build engaged and disengaged members categories are being implemented in March 2023. + +At the end of 2022, we have begun conceptual work on how to analyze Twitter and on-chain data. Efforts have remained conceptual as we were focusing on our first data pipeline (Discord). + +We have started to build the designs for the pulse survey functinality and will begin user-testing the prototype end of March 2023. + + +#### Is this safe or legal/ Are you GDPR compliant? +Analyzing conversations in private channels (e.g., Discord) is within a grey zone of private and public conversations and a sensitive issue. Servers and channels that are not gated in anyway (token or role) are akin to public conversations as there are no barriers for people to enter and join the conversations. On the other hand, once users need to fulfil certain criterias or pay in order to access a server/channel, the conversation could be perceived as private. This distinction has ethical and legal consequences. + +For this reason, we have worked with a legal counsel via LexDAO. As part of this, two lawyers have reviewed the process from fetching data and presenting results to ensure we are within GDPR laws. On Wednesday 22nd February we had a GDPR session for our team and implemented the lawyers' recommendations. +- anti-virus software to be installed on the personal laptops of the two data scientists who have access to the raw data +- a data transfer agreement will be signed with the data scientist residing in the US +- We will prepare a record of processing activities + +Once our process from data fetching to analysis will be fully automated, we will +- create a mock database developers can use for testing data fetching and analysis +- periodically review who has access to the db and remove unnecessary person + + +### Implementation +To date, we have delivered six community health reports (Aragon, MetaGame, Verida, Canabis Genom DAO, LexClinic, Aave), built a [prototype of our dashboard](https://www.figma.com/proto/whU3PlyPvdoSWdhUYQW7e9/Community-Health?node-id=4428%3A3647&scaling=min-zoom&page-id=3314%3A6028&starting-point-node-id=4428%3A3647&disable-default-keyboard-nav=1&hide-ui=1) and conducted 12 user interviews. + +After our first report, we have adopted a step-wise approach to integrating the network metrics, focusing on providing a clear, concise, jargon-free explanation. In addition, we have included a simulation section in our health reports to showcase what the health metric could be if the interaction pattern changes or if there is a large change in the community size. + +While the development of the full dashboard is ongoing, we continue to deliver low fidelity dashboards to interested communities. This lets us interact closely with users, helping us learn more about their problems and shape onboarding material for users. Interested communities get direct access to our team of data scientist who happily investigate follow-up questions. + +Early development of this project has been funded by [Aragon](https://forum.aragon.org/t/real-time-community-health-analytics), Polygon DAO, [Aave](https://noturhandle.gitbook.io/rndao/proposals/proposals/grant-proposal-aave), [MetaCartel](https://forum.metacartel.org/t/grant-request-community-health-a-project-by-rndao/2354) and Near. + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 10 weeks +- **Full-Time Equivalent (FTE):** 6 +- **Total Costs:** 15 000 USDC + +We are following a grant-matching processes to spread the risk among different communities. + +### Milestone 1 - Defining metrics + +- **Estimated duration:** 4 weeks +- **FTE:** 1 +- **Costs:** 5000 USDC + +Research social network metrics that are viable to measure the health of a community on Twitter, and how they integrate with our existing community health framework. This will build on our existing framework, extending it to metrics that have been tested and used in Twitter communities. For example, we will look into approaches to build the network, virality and clustering/fragmentation of very large online communities. + +Note: We have done an evaluation to decide wheter Reddit or Twitter would be a better option. In the discussion we had with other communities, we were more often asked about an integration with Twitter than with Reddit. Hence, from a scaling perspective, we decided that focusing first on Twitter makes more sense with us. + +That being said, we realize that Twitter is undergoing a lot of changes, and we might have to do a last minute pivot to another platform. We are building our analytical scripts in such a way that they can easily be used for other platforms. Therefore, the only thing that has to be changed in the milestones is the name of the platform. + +Milestone 1 will be focused on research. Hence, we're not going to deliver the following usually mandatory deliverables: + +- Documentation +- Testing and Testing Guide +- Docker + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | The results will be published open-access using an Apache 2.0, GPLv3, or MIT license. We will decide later which one is most suitable for the written document. | +| 0e. | Article| We will publish an article (technical document) describing the metrics, the insights (so-what), and limitations. This article will also explain how the Twitter community is build (e.g., who are nodes, when there is an edge between two people, who is excluded/included and why). We will build a directed network, where nodes are always Twitter users. From a network assembly perspective, we will not differentiate between accounts representing people and those representing communities or organizations. The edges between an user profiles are either a reply, quote, mention, retweets, or likes. Thus, a tie from user A to user B exists if (1) user A replies to user B, user A quotes user B, user A mentions user B, user A retweets user B, or user A likes user B's tweet. At this moment, we will created weighted edges, not making a conceptual difference between the interaction type (reply, quote, mention, retweets and likes).The article will not be behind a paywall. The article will be written for an audience comfortable with data analysis. | + +### Milestone 2 — Twitter community health dashboard + +- **Estimated duration:** 6 weeks +- **FTE:** 5 +- **Costs:** 10 000 USDC + +This milestone implements the work from the previous milestone by building the dashboard. It will be build using the Twitter API v2. This comes with the following rate limits: +- 900 tweet lookups/user/15-minute time window +- 900 user timeline lookups/user/15-minute time window +When querying a tweet, we will get information about the number of comments and likes + +Given the rate limit, we will see how users will be able to combine different accounts (e.g., parachains, dApp developers and other teams that build on Substrate) to create a holistic picture of their community. + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide a tutorial for users to understand how to run the health checks themselves. Our current version will be updated to include recent development.| +| 0c. | Testing and Testing Guide | Running the data pipeline and analyzing the data will be covered by tests to ensure functionality. We will describe how to run the tests|. +| 0d. | Docker | We will deliver a docker file to tests the functionality. | +| 0e. | Article | In addition to the dashboard, we write a handout. This is a walkthrough of the dashboard, explaining each metric, if the score is good or bad, and a list of recommendations. | +| 1. | Twitter data pipeline | We will create a data pipeline fetching data from Twitter using their API. The user will enter one or a few twitter handles. The data pipeline is build using Python. We have already a data flow for Discord visible in the following repos: [Discord bot](https://github.com/RnDAO/tc-botComm), [interactions with db](https://github.com/RnDAO/tc-dbComm), and [interactions between front-end and db](https://github.com/RnDAO/tc-serverComm). | +| 2. | Twitter dashboard | We will extend our dashboard to include a page with Twitter community health data. The dashboard is build using Typescript. Our current dashbaord, build on Discord data, is available in this [github](https://github.com/RnDAO/tc-uiComm). We will add the Twitter metrics to this dashboard. | +| 3. | Workshop/call | We will hold a workshop/ call to answer any questions about the dashboard and handout. | + +## Future Plans: + +We have three workstreams for our future: New metrics, new integrations, new analytical methods. + +### New Metrics and Integrations +New metrics and new integrations will provide incremental improvements of the dashboard and will largely be driven by scientiic research for new metrics and user research for new integrations. +- New metrics: Our conceptual framework mentions a number of metrics we have not yet implemented due to their complexity (e.g., small world metrics). We will evaluate the usability of these metrics. +- Governance analytics: We have begun thinking through governance metrics at the end of 2022 using Snapshot data. We will research the viability of Polkassembly. + +### New analytical methods +We are currently developing a pulse survey functionality to measure members perception of the commnunity. This provides a subjective insight on community health currently missing in the data. +We are looking at text analysis and GPT3 to help community members and moderators gain an overview of important discussions and information. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc. + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +- Early development of this project has been funded by [Aragon](https://forum.aragon.org/t/real-time-community-health-analytics/3472), Polygon DAO, [Aave](https://noturhandle.gitbook.io/rndao/proposals/proposals/grant-proposal-aave), [MetaCartel](https://forum.metacartel.org/t/grant-request-community-health-a-project-by-rndao/2354) and Near. Total project costs will be split across multiple participating communities. +- We have delivered a community health check for Aragon, MetaGame, Veridia, Cannabis Genome DAO, and LexClinic. +- [Podcast](https://www.binance.com/en/live/video?roomId=2115823) about our community health framework with DAOrayki. \ No newline at end of file From c78e62dc4a0b0f1d653bb06a36f12b196b23eb8b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 23 Mar 2023 15:49:20 +0100 Subject: [PATCH 206/665] Update index.md Add Community Health Check --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 26c421ccaa6..90f695727f1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,6 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | +| [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | ## 2022 From 867ba65032f3a3b6b7399463cd9db31fd13d451d Mon Sep 17 00:00:00 2001 From: Ramsey <45230082+decentration@users.noreply.github.com> Date: Mon, 27 Mar 2023 09:41:16 +0100 Subject: [PATCH 207/665] Supersig: second grant proposal to be included in system level chain (statemine) (#1630) * add supersig * mockup-ui-m2-2 * clearer for M1 UI * correct 0d to testing guide * further describe the advantage of Custom UI * Clearer title for M2 --- applications/supersig_fellowship.md | 341 ++++++++++++++++++++++++++++ 1 file changed, 341 insertions(+) create mode 100644 applications/supersig_fellowship.md diff --git a/applications/supersig_fellowship.md b/applications/supersig_fellowship.md new file mode 100644 index 00000000000..104cd4f4625 --- /dev/null +++ b/applications/supersig_fellowship.md @@ -0,0 +1,341 @@ +# Supersig + +> This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines! Lines starting with a `>` (such as this one) can be removed. +> +> See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. + +- **Team Name:** Decentration +- **Payment Address:** (BTC)37hhQbMnXTrEgFnQUA9xJEeQMW7DuGvxuz +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +> ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* + +## Project Overview :page_facing_up: + +"A Supersig is a Multisig with superpowers" + +A new pallet, RPC and UI that enables organisations to benefit from much more flexibility than multisig, where users can add and remove members, as well as optionally add "Master" users that have more power than "Standard" users. see our prior grant phase completion [blog post](https://decentration.medium.com/decentration-completes-supersig-w3f-funded-grant-5e788f858ca8) + +This is Decentration's second grant proposal for Web3. Our ethos is to build, simple user friendly products that many would be used by many. Our aim is to see Supersig be used across many chains and communities, rather than used by just one small community in the ecosystem. This second grant core aim is to make changes that enables supersig to go into the Statemine parachain. In order to do this some refactoring needs to take place both in the pallet and in the frontend. This has been based on feedback from two key product owners, Joe from Statemint/mine, and Jaco from polkadot-js. + +To avoid private gatekeeping, the PR into Statemine would require approval from Fellowship members. Therefore we need to make a few changes that will have it in the best state so it is approved, as well as be prepared for any further feedback provided to make any other changes. + +Our frontend app needs some changes in order for Jaco to accept it into the official apps repo after it has been PR'd into Statemine. As well as this we want to build a separate (non polkadot-js) custom user interface. + +### Overview + +- a *supersig* is like a *multisig* but with superpowers. +- we want to continue to change and improve to be to a system chain standard. +- make changes to pallet of supersig based on feedback from statemine product owner. +- make changes to UI based on feedback from polkadot-js apps product owner. +- You can try out the first version here, see our test [chain](https://apps.decentration.org/?rpc=wss%3A%2F%2Fsoupcan1.jelliedowl.com#/supersig/dashboard) + + +### Project Details + + +- An overview of the technology stack to be used: Substrate, Rust, React/Typescript. + - - PoC/MVP or other relevant prior work or research on the topic. Decentration has: + - delivered [Supersig v1](https://github.com/kabocha-network/pallet_supersig). + - launched [Kabocha crowdloan](https://github.com/kabocha-network/parachain/) + - developed pallet_mint: where funding proposals that are approved mint new coins, instead of from a treasury. + +- What your project is *not* or will *not* provide or implement + - In this grant proposal we are focussing on making iterations to the minimimal viable version of the pallet to make it less prone to bloat due to unbounded call data in the storage, we won't be creating a new pallet. + + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- *Where and how does your project fit into the ecosystem?* The aim is for it to be part of system chains on kusama and thereafter polkadot's Statemint. We want to maximise for ubiquitous use, and we believe this is the most effective route to get there. +- *Who is your target audience?* + - Multsig users of Substrate chains, who desire more flexibility and create scalable organisations. +- *What need(s) does your project meet?* It helps users of Substrate chains improve the fund management of the teams and projects that get funded by the community treasury. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + - pallet_collective is very similar, but as there are only a limited number of instances available, and such instances needed a general on-chain upgrade to instantiate, it is not useful for our needs. + - pure proxy in the proxy_pallet has similarities in how addresses are created on-chain. + +## Team :busts_in_silhouette: + +### Team members + +- *Name of team leader:* Ramsey Ajram +- *Names of team members:* Tsubasa Mori, Nathan Gardet Derc + +### Contact + +- **Contact Name:** Ramsey Ajram +- **Contact Email:** ramsey@decentration.org +- **Website:** + +### Legal Structure + +- **Registered Address:** Digital Trust Company +- **Registered Legal Entity:** Decentration Trust Company (470-2018-233-GB-001) + +### Team's experience + +Ramsey (decentration) - Substrate Engineer, Product manager, startup technical founder. Launched [Kabocha](https://kabocha.network) parachain, chain development and launch; team lead product owner of Supersig. Alumni of Polkadot Blockchain Academy +Here is a recent contribution from Ramsey in a [Substrate Seminar](https://www.youtube.com/watch?v=IiAkJAfZsug&t=2299s) + +Nathan Gardet-Derc (erudyx) - Substrate / Rust Engineer, contributor to Kabocha, Rusty Crewmate. developer on [pallet_supersig](https://github.com/kabocha-network/pallet_supersig). Alumni of Polkadot Blockchain Academy + +Tsubasa Mori (KingdomParadise) - Full stack developer - Javascript / Typescript / React / Rust / Node.js / Next.js + + +### Team Code Repos + +- +- + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- +- +- + +### Team LinkedIn Profiles (if available) + +## Development Status :open_book: + +pallet started here: + + +*Supersig is functional, accessible and usable for developers to integrate and for their end users. + +## Development Roadmap :nut_and_bolt: + +This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe *the functionality we should expect in as much detail as possible*, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. + +Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We *recommend* that teams structure their roadmap as 1 milestone ≈ 1 month. + +For each milestone, + +**Milestone 1** To make changes to `pallet_supersig` and `apps frontend` so that it is up to scratch with system chain level use, accepted by polkadot-js apps, and prepared for Fellowship review. + +- The pallet will be refactored based on feedback from Joe Petrowski, product owner of Statemine, after he is satisfied withe changes we will make the case to the Polkadot Fellowship. +- Based on feedback from Jaco, product owner of polkadot-js, changes need to be made so that supersig-app is accepted officially into the repo and if it is accepted into Statemine. +- The pallet will be tested on the Pop-Art, community run relay test network +- The pallet will be well benchmarked. +- The pallet will aim to be on Statemine parachain on kusama. +- Unit integration tests +- Easy to spin up node to test pallet +- Clearly written as Readme and inline documentation + +Details for pallet: + +We will likely be making a limit on call data size and a cap on the number of "live proposals" there can be per chain. + +### Limit Call Data Size + +1. Limit call data size: Introduce a maximum call data size limit in the configuration trait. This limit can be set to a reasonable default value, which can be changed as required. Users will be prevented from submitting call data exceeding this limit: + +```rust +#[pallet::config] +pub trait Config: frame_system::Config { + // ... + /// The maximum size of call data allowed (in bytes). + #[pallet::constant] + type MaxCallDataSize: Get; + // ... +} +``` + +2. Check call data size: Before storing the call data in create, approve, and other relevant functions, ensure that its size is within the specified limit. + +```rust +// In the `create` function +ensure!( + call_data.len() <= T::MaxCallDataSize::get() as usize, + Error::::CallDataTooLarge +); + +// Similarly, add checks in the `approve` and other relevant functions. + +``` + +3. Add a new error variant for oversized call data: + +```rust +#[pallet::error] +pub enum Error { + // ... + /// The call data size exceeds the maximum allowed limit. + CallDataTooLarge, + // ... +} +``` + +### Limit Number of Live Proposals + +1. Add the LiveProposalMaximum associated type to the pallet's Config trait: + +```rust +pub trait Config: frame_system::Config { + // ... + type LiveProposalMaximum: Get; + // ... +} +``` + +2. Add a storage item to track the number of active proposals for each Supersig account: + +```rust +#[pallet::storage] +#[pallet::getter(fn active_proposals)] +pub type ActiveProposals = StorageMap<_, Twox64Concat, SupersigId, u32, ValueQuery>; +``` + +3. Modify the submit_call extrinsic to check the number of active proposals before allowing a new one: + +```rust +#[pallet::weight(T::WeightInfo::submit_call())] +pub fn submit_call(origin: OriginFor, supersig_id: SupersigId, call_data: Vec) -> DispatchResultWithPostInfo { + let who = ensure_signed(origin)?; + // ... + + let current_active_proposals = Self::active_proposals(supersig_id); + ensure!(current_active_proposals < T::LiveProposalMaximum::get(), Error::::TooManyActiveProposals); + + // ... +} +``` + +4. Increment the number of active proposals for the Supersig account when a new proposal is submitted: + +```rust +ActiveProposals::::mutate(supersig_id, |active_proposals| *active_proposals += 1); +``` + +5. Add an error variant for the case when there are too many active proposals: + +```rust +#[pallet::error] +pub enum Error { + // ... + TooManyActiveProposals, +} +``` + +6. Decrement the number of active proposals when a proposal is approved or rejected. You can do this in the approve and reject extrinsics: + +```rust +ActiveProposals::::mutate(supersig_id, |active_proposals| *active_proposals = active_proposals.saturating_sub(1)); +``` + +As a non binding idea to test, we shall also be exploring the idea of enabling off-chain signing, though this will require a lot of refactoring: + +### Enable off-chain signing (optional work) + +To incorporate off-chain signing in the supersig pallet while maintaining the same features such as adding and removing members, we would need to do the following: + +1. Create a CallHash type alias to represent the hash of the call data: + +```rust +pub type CallHash = ::Hash; +``` + +2. Change the CallData storage item to use the CallHash instead of the actual call data: + +```rust +#[pallet::storage] +#[pallet::getter(fn call_data)] +pub type CallData = StorageMap<_, Twox64Concat, SupersigId, CallHash, OptionQuery>; +``` + +3. Modify the create and approve functions to accept a call_hash parameter instead of the call data: + +```rust +pub fn create(origin: OriginFor, call_hash: CallHash, ...); +pub fn approve(origin: OriginFor, call_hash: CallHash, ...); +``` + +4. In the create and approve functions, calculate the call hash and ensure it matches the provided call_hash parameter: + +```rust +// In the `create` function +let actual_call_hash = T::Hashing::hash_of(&call_data); +ensure!( + actual_call_hash == call_hash, + Error::::InvalidCallHash +); +// as well add the check in the `approve` function. +``` + +5. Add a new error variant for mismatched call hashes: +```rust +#[pallet::error] +pub enum Error { + // ... + /// The provided call hash does not match the actual call hash. + InvalidCallHash, + // ... +} +``` + +6. Update the extrinsics and RPCs to work with call hashes instead of call data. + +# Refactor Page-Supersig UI for polkadot js fork + +- A lot of functions need to be transformed into the hooks that polkadot js apps use as a standard. +- Very strict linting and standards, currently sitting at 300 errors. + +**Milestone 2** Custom UI foundation MVP, and act on feedback from Fellowship. + +- Build a custom interface where the user interacts with their organisation created with supersig. The interface will initially support Statemine, Kabocha, and Soupcan (testnet). +The interface will leverage all the features [here](https://trello.com/1/cards/64197a7bcc843f46bfb0ab2b/attachments/64198bf574e7348c470997bb/download/Screenshot_2023-03-21_at_10.46.20.png), but in a cleaner and bespoke user interface like [this simple mockup](https://trello.com/c/fUTXOuo3/619-create-supersig-ui-for-m2-2). +- Custom UI will be simpler and more bespoke to organising, initially around supersig. It will begin with similar features to page-supersig on polkadot-js app, however it will be the foundation for then future building blocks, such as: multisig interface, automated payments, and other statemine/mint primitives, XCM apps, etc. We can prioritise on what those will be based on feedback, and in future milestone. With our own interface we have the freedom to create something different and specific to a core set of interrelated tools, rather than abide by polkadot-js which is designed to encompass basically everything. +- Make improvements so that Fellowship member feedback is satisfied (if any). + + + +> :zap: If any of your deliverables is based on somebody else's work, make sure you work and publish *under the terms of the license* of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Teams that submit others' work without attributing it will be immediately terminated.** + +### Overview + +- **Total Estimated Duration:** 7 to 11 weeks +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** USD 18,000 + +### Milestone 1 — pallet_supersig MVP + +- **Estimated duration:** 4 to 5 weeks +- **FTE:** 2 +- **Costs:** 11,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide inline documentation of the supersig pallet's code, and a basic tutorial that explains how a user can spin up one of our Substrate nodes and send test transactions, which will show how the supersig functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an article that explains supersig pallet to developers on a blog post; and a substrate workshop/seminar that explains that shows how the pallet was designed (if there available slot, else a video shared on loom/youtube). +| 1. | Substrate module: pallet_supersig | We will refactor the pallet so that it does not store unbounded call data. | +| 2. | Supersig-app: polkadot-js-ui | We need to make various changes and use a lot of polkadot js hooks in order Jaco to accept the PR: refactoring converting a lot of hooks to be the native polkadot-rs hooks rather than our own hooks; linting; changing augment-types; linting, and 300 errors when building for the polkadot-js PR. | +| 3. | Benchmarking | The pallet will be benchmarked and unit tested using worst case weightings. | + +### Milestone 2 — Supersig UI and feedback from Fellowship + +- **Estimated duration:** 3 to 6 weeks +- **FTE:** 2 +- **Costs:** 7,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide inline documentation and a tutorial with a polkadot-js apps fork that guides a developer to simply set up supersig pallet and UI. | +| 0c. | Testing messages | Core functions will be fully covered by e2e testing guide and informative error messages. | +| 0d. | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with milestone 2. The dockerfile will be a polkadot JS UI fork, it will also be the smallest possible file size (MBs not GBs) | +| 0e. | Article | We will publish an article that explains supersig pallet to the end-user. The article will be on medium and subsocial. +| 1. | React/Typecript: Supersig UI | We will build a custom user interface so that users can interact with supersig. | +| 2. | Substrate chain | We will create a custom substrate template that will contain pallet supersig | +| 3. | Polkadot JS Apps UI Fork | We will add the custom feature to a polkadot JS UI fork (and make a PR to the main repo), so that the user can see the pallet in action, end to end. | + + +## Future Plans + +- After success with supersig being a system level chain, maintain it, and work on future versions, as well as XCM accesibility. + +## Additional Information :heavy_plus_sign: + +*Who can vouch for Ramsey(Decentration)?* Josh Muir (Kusama Council and Dat Dot), Dan Shields, Will Chevdor, Sacha Lanski... From 26174465b48b87fbdd533b07a1deaf46d7fee737 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 27 Mar 2023 10:48:02 +0200 Subject: [PATCH 208/665] Update index.md Update decentration --- applications/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 90f695727f1..e736a792c3b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -70,6 +70,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | +| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | ## 2022 @@ -191,7 +192,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | | [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | -| [Decentration](https://kabocha.network) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/kabocha-network) | ☐ | ☒ | ☒ | +| [Decentration](https://www.decentration.org/) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | | [Web3 Labs Ltd](https://www.web3labs.com/epirus-explorer) | [Epirus Substrate Explorer](./epirus_substrate_explorer.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Sol2Ink](./sol2ink.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [OpenBrush Phase 3](./openbrush-follow-up-2.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | From 13cefdc01ef0accd9a1fa10bc16d8059aced17dd Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 27 Mar 2023 15:18:56 +0200 Subject: [PATCH 209/665] Update Meta_Defender.md (#1639) --- applications/Meta_Defender.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Meta_Defender.md b/applications/Meta_Defender.md index ff1cc032d33..67bc6be2795 100644 --- a/applications/Meta_Defender.md +++ b/applications/Meta_Defender.md @@ -3,7 +3,7 @@ - **Team Name:** Meta Defender Team - **Payment Address:** 25r4oZedLXEunTmdvytyH4xcmQqqWWw8KmphdiD5LqpU29pv (aUSD) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 - +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1089#issuecomment-1484905533) ## Project Overview :page_facing_up: From f99a9cdbd0c5e221c59e9d736fec4cdfee95dc3a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 27 Mar 2023 15:20:15 +0200 Subject: [PATCH 210/665] Update index.md Add openPayroll --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index e736a792c3b..bc8fcd4caaa 100644 --- a/applications/index.md +++ b/applications/index.md @@ -71,6 +71,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | +| [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | + ## 2022 From e796bc7ddda0c96a86e672949c8faf029c753ee9 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 28 Mar 2023 10:34:16 +0200 Subject: [PATCH 211/665] Update index.md Accept binary merkle tree m1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index bc8fcd4caaa..e659559a8b2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -164,7 +164,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [QSTN](https://qstn.us/) | [QSTN](./QSTN.md) | [GitHub](https://github.com/qstnus) | ☐ | ☐ | ☐ | | [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☒ | | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☒ | -| ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☐ | ☐ | +| ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | From e2a1c1f2955dae47f24329757e961ca2a26bf203 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 28 Mar 2023 16:46:40 -0400 Subject: [PATCH 212/665] Update index.md (#1640) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e659559a8b2..f85bfdc42f4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -259,7 +259,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | | Matthew Darnell | [cScale](./cScale.md) | [GitHub](https://github.com/MatthewDarnell/cScale) | ☐ | ☒ | ☐ | -| [Web3go](https://web3go.xyz/) | [Web3go](./Web3Go.md) | [GitHub](https://github.com/web3go-xyz) | ☐ | ☒ | ☐ | +| [Web3go](https://web3go.xyz/) | [Web3go](./Web3Go.md) | [GitHub](https://github.com/web3go-xyz) | ☐ | ☒ | ☒ | | [Prosopo Limited](https://prosopo.io) | [Prosopo: Human Verification Marketplace](./prosopo.md) | [GitHub](https://github.com/prosopo-io) | ☐ | ☒ | ☒ | | [Litentry](https://www.litentry.com) | [Polka SignIn](./PolkaSignIn.md) | [GitHub](https://github.com/litentry) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib](./php-rpc-lib.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☒ | From f04ae51b3e360620a97dbd95469c23909f0fce17 Mon Sep 17 00:00:00 2001 From: fisher Date: Wed, 29 Mar 2023 21:38:53 +0800 Subject: [PATCH 213/665] Solidity implementation of an on-chain accountable light client verifier (#1546) * overview & project details * update * update * update * update * update * update * update * Initialize pull request for solidity verifier grant * update * update * update to add more details --------- Co-authored-by: Aki Wu --- ...y-verifier-for-accountable-light-client.md | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 applications/solidity-verifier-for-accountable-light-client.md diff --git a/applications/solidity-verifier-for-accountable-light-client.md b/applications/solidity-verifier-for-accountable-light-client.md new file mode 100644 index 00000000000..0cb7b33ef94 --- /dev/null +++ b/applications/solidity-verifier-for-accountable-light-client.md @@ -0,0 +1,145 @@ +# Solidity Verifier Implementation for Accountable Light Client + +- **Team Name:** Itering +- **Payment Address:** 0x5FD8bCC6180eCd977813465bDd0A76A5a9F88B47 (Ethereum USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview + +As a developer company contributing to Darwinia, Itering is working on implementing an on-chain accountable light client verifier using the Solidity language. The accountable light client design is based on a recent [paper](https://eprint.iacr.org/2022/1205) published by the Web3 Foundation. + +Darwinia is constantly following innovations in the cross-chain space, especially from the Web3 Foundation and Polkadot, with a goal of implementing these innovations in practical settings. Currently, Darwinia is prioritizing the development of on-chain light clients as the cross-chain solution. We recognize the importance of the accountable light client system presented in the paper. + +### Project Details + +After reading the paper, we found it to be extremely valuable. It presents an efficient method for utilizing SNARK to verify the aggregated public key of signers, while still holding those signers accountable. This approach greatly improves the speed and cost-effectiveness of proof generation. + +Darwinia has created [a beacon light client from ethereum to darwinia](https://darwinia.subscan.io/account/0xD2A37C4523542F2dFD7Cb792D2aeAd5c61C1bAAE), which is based on the BLS aggregate signature verification. The cross-chain gas is effectively reduced by aggregate signatures, but it is still too high because the light client smart contract needs to be aware of the entire list of public keys. If there are too many pubkeys, this could be a serious issue. + +So, we are searching for a more effective solution to the aggregate signature pubkeys problem. We concentrate on the honest computation provided by zero-knowledge proof solutions. It allows us to off-chain the verification step. But through our study, we discovered that the generic SNARK solutions have so many limits that not only took a long time to produce the proof, but also required an extremely powerful device. We were stuck here until we came across this paper and Alistair's explanation [video](https://www.youtube.com/watch?v=MCvX9ZZhO4I&list=PLOyWqupZ-WGvywLqJDsMIYdCn8QEa2ShQ&index=19) and [slides](https://docs.google.com/presentation/d/16LlsXWY2Q6_6QGZxkg84evaJqWNk6szX). + +This verifier will be implemented based on the BLS12-377 and BW6-761 elliptic curves, which is consistent with the implementation in the paper and [W3F's PoC implementation](https://github.com/w3f/apk-proofs). + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + + When Polkadot/Substrate/Kusama bridges to a blockchain that is EVM-compatible, this verifier will be helpful. + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + + The users of this verifier will be the cross-chain messaging/bridge service providers. + +- What need(s) does your project meet? + + Precompiled versions of BLS12-377 and BW6-761 should ideally be supported by the blockchains that use this verifier. + + If gas and speed are not a concern, you can also use the no-precompiled curves. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + + This kind of verifier hasn't been implemented in solidity yet, as far as we know. + +## Team :busts_in_silhouette: + +### Team members + +- Denny, denny.wang@itering.io +- Echo, echo.hu@itering.io +- Aki, aki.wu@itering.io +- Nada, nada.fu@darwiniadao.xyz + +### Contact + +- **Contact Name:** Aki Wu +- **Contact Email:** aki.wu@itering.io +- **Website:** https://github.com/wuminzhe + +### Legal Structure + +- **Registered Address:** 3 FRASER STREET #05-25 DUO TOWER SINGAPORE (189352) +- **Registered Legal Entity:** ITERING TECH PTE. LTD. + +### Team's experience + +Itering is a team of passionate blockchain technology enthusiasts. We believe that blockchains should be interoperable with each other. Itering has accumulated significant expertise in the field of cross-chain technology through several years of experience. Our expertise spans various cross-chain approaches, with a focus on light client. + +We are well-versed in Polkadot/Substrate technology. We leverage the Polkadot/Substrate technology stack to power most of our blockchain development. Our blockchains, Darwinia and its canary network Crab, are based on Substrate and currently operate as parachains of Polkadot and Kusama respectively. + +Additionally, we have extensive experience with the Solidity programming language. Notably, we have already implemented a beacon light client in Solidity that has been successfully running on the Darwinia Chain. + +### Team Code Repos + +- https://github.com/darwinia-network/darwinia-messages-sol +- https://github.com/darwinia-network/darwinia-messages-substrate +- https://github.com/darwinia-network/darwinia +- https://github.com/darwinia-network/darwinia-common + +Github accounts of team members: + +- Denny: https://github.com/hackfisher +- Echo: https://github.com/hujw77 +- Aki: https://github.com/wuminzhe + +## Development Status :open_book: + +- references to conversations you might have had related to this project with anyone from the Web3 Foundation, + https://forum.polkadot.network/t/decentralized-dot-eth-bridges-a-comparison-thread/777/33 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 6 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 60,000 USD + +### Milestone 1 — Curve precompiles + +- **Estimated duration:** 2 month +- **FTE:** 2 +- **Costs:** 20,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | BLS12-377 precompile | We will create a [EIP-2539](https://eips.ethereum.org/EIPS/eip-2539) compatible BLS12-377 precompile which can run inside [frontier](https://github.com/paritytech/frontier). It will be developed using Rust programming language. The libraries we plan to use are [arkworks-rs/curves](https://github.com/arkworks-rs/curves) library or the substrate host function calls provided by this [Pull Request](https://github.com/paritytech/substrate/pull/13031).
Other references:
https://github.com/celo-org/celo-blockchain/pull/1157
https://github.com/celo-org/celo-blockchain/pull/1341 | +| 2. | BW6-761 precompile | We will create a [EIP-3026](https://eips.ethereum.org/EIPS/eip-3026) compatible BW6-761 precompile which can run inside [frontier](https://github.com/paritytech/frontier). The programming language and libs to use are the same as BLS12-377 precompile.
Other references:
https://github.com/celo-org/celo-blockchain/pull/1282 | + +### Milestone 2 — Basic & Packed verifier + +- **Estimated Duration:** 4 month +- **FTE:** 2 +- **Costs:** 40,000 USD + +| Number | Deliverable | Specification | +| ------: | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and an example to verify the proof generated from [W3F's PoC example](https://github.com/w3f/apk-proofs/blob/main/bw6/examples/recursive.rs). | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Libraries preparation | We will prepare the import libraries which are critical to the implementation of the verifier in solidity.
1. Fiat-shamir transformation. A solidity friendly replacement to the Merlin::Transcript.
2. Lagrange evaluation.
3. KZG verification. We will write a froniter precompile to do it. | +| 2. | Basic APK verifier | We will implement the basic verifer which will check the apk is correct. We plan to use the PoC code from [apk-proofs](https://github.com/w3f/apk-proofs) as a reference to implement this verifier. It can verify the proofs generated by [the PoC example](https://github.com/w3f/apk-proofs/blob/main/bw6/examples/recursive.rs). We will implement it using Solidity language. | +| 3. | Packed APK verifier | We will implement the packed verifer which will check the apk is correct. We plan to use the PoC code from [apk-proofs](https://github.com/w3f/apk-proofs) as a reference to implement this verifier. We will implement it using Solidity language. | +| 4. | BLS verifier | We will implement the bls verifier which will check if the aggregate signature is signed by the apk. We will use the BLS12-377 precompile implemented in Milestone 1. We will implement it using Solidity language. | +| 5. | Signers threshold checker | Check if the bitvector of pubkeys contains enough signers. We will implement it using Solidity language. | + +## Future Plans + +- We intend to leverage this verifier to develop our on-chain light clients after the grant is completed. +- Adapt to other EVM chains that satisfy the curves' requirements. +- Follow the revision of the W3F paper. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / personal recommendation + +Additional information: + +- [Darwinia truth layer](https://github.com/darwinia-network/darwinia-messages-sol/tree/master/contracts/bridge/src/truth) currently include Beacon light client, BSC light client and Darwinia light client. +- [Helix Bridge](https://helixbridge.app/en) which have bridges based on Darwinia cross-chain messaging protocol. From 59a23c0ee8fae0e6ff2d5b80f506c60aa5a5de9b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 29 Mar 2023 15:41:53 +0200 Subject: [PATCH 214/665] Update index.md Add Solidity Verifier Implementation for Accountable Light Client --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index f85bfdc42f4..a6c562f22bd 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,6 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | +| [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☐ | ☐ | ## 2022 From a90c6dfa6238d52f9da357a15789b0676a73a558 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 29 Mar 2023 11:52:23 -0400 Subject: [PATCH 215/665] Update index.md (#1641) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a6c562f22bd..7c31bd74142 100644 --- a/applications/index.md +++ b/applications/index.md @@ -152,7 +152,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Primis Labs](https://github.com/Primis-Labs) | [Primis](./Primis.md) | [GitHub](https://github.com/Primis-Labs/client) | ☐ | ☒ | ☒ | | [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | | [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | -| [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☐ | +| [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☒ | | [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | | [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | From 0d82600e6f15d9f6aac1b97b5018f5d7a6a5dc90 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 30 Mar 2023 11:58:31 +0200 Subject: [PATCH 216/665] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7c31bd74142..d07b45668ee 100644 --- a/applications/index.md +++ b/applications/index.md @@ -50,7 +50,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☐ | ☐ | +| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | From de52e509f968b46e1a486aafc6fac8972db525b0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 31 Mar 2023 09:31:27 +0200 Subject: [PATCH 217/665] Update README.md Add ink!ubator --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 440d94601da..587cc982033 100644 --- a/README.md +++ b/README.md @@ -316,7 +316,7 @@ The best way to find out about upcoming hackathons is by following Polkadot on t ### Other Grant Programs -Below is a list of other grant programs in the Polkadot/Substrate ecosystem: +Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) @@ -324,6 +324,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) - [Edgeware Grants and Bounties](https://gov.edgewa.re/discussion/1132-edgeware-proposal-process-and-template) - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) +- [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) From 3cfb91e82a5473d58b76d68ec513b0c1c06ed6a3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 31 Mar 2023 09:33:25 +0200 Subject: [PATCH 218/665] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 587cc982033..7f0dca4ee3b 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ - [Substrate Builders Program](#substrate-builders-program) - [Treasury](#treasury) - [Hackathons](#hackathons) - - [Other Grant Programs](#other-grant-programs) + - [Other Grant or Bounty Programs](#other-grant-or-bounty-programs) ## :wave: Introduction @@ -314,7 +314,7 @@ From time to time, Web3 Foundation and/or Parity organise hackathons to promote The best way to find out about upcoming hackathons is by following Polkadot on the various social channels, such as Element or Twitter. -### Other Grant Programs +### Other Grant or Bounty Programs Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: From d9bf5eeea8738c3c74940c18c2935168637cf82c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 31 Mar 2023 09:33:28 +0200 Subject: [PATCH 219/665] Update funding.md --- docs/funding.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docs/funding.md b/docs/funding.md index 6067e9a2e6f..77cdfa95bcf 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -20,9 +20,9 @@ From time to time, Web3 Foundation and/or Parity organise hackathons to promote The best way to find out about upcoming hackathons is by following Polkadot on the various social channels, such as Element or Twitter. -### Other Grant Programs +### Other Grant or Bounty Programs -Below is a list of other grant programs in the Polkadot/Substrate ecosystem: +Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) @@ -30,6 +30,7 @@ Below is a list of other grant programs in the Polkadot/Substrate ecosystem: - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) - [Edgeware Grants and Bounties](https://gov.edgewa.re/discussion/1132-edgeware-proposal-process-and-template) - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) +- [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) From 74d11795cad26fdaf8df650a19bd23e55e83d0a3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 3 Apr 2023 13:44:40 +0200 Subject: [PATCH 220/665] Update index.md Adding wave 18 --- applications/index.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d07b45668ee..5abb8c8b906 100644 --- a/applications/index.md +++ b/applications/index.md @@ -13,7 +13,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## Menu -- [2023](#2023): [17](#%EF%B8%8F-wave-17---first-quarter-2023) +- [2023](#2023): [18](#%EF%B8%8F-wave-18---second-quarter-2023), [17](#%EF%B8%8F-wave-17---first-quarter-2023) - [2022](#2022): [16](#%EF%B8%8F-wave-16---fourth-quarter-2022), [15](#%EF%B8%8F-wave-15---third-quarter-2022), [14](#%EF%B8%8F-wave-14---second-quarter-2022), [13](#%EF%B8%8F-wave-13---first-quarter-2022) - [2021](#2021): [12](#%EF%B8%8F-wave-12---fourth-quarter-2021), [11](#%EF%B8%8F-wave-11---third-quarter-2021), [10](#%EF%B8%8F-wave-10---second-quarter-2021), [9](#%EF%B8%8F-wave-9---first-quarter-2021) - [2020](#2020): [8](#%EF%B8%8F-wave-8---fourth-quarter-2020), [7](#%EF%B8%8F-wave-7---third-quarter-2020), [6](#%EF%B8%8F-wave-6---second-quarter-2020), [5](#%EF%B8%8F-wave-5---first-quarter-2020) @@ -21,6 +21,14 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2023 +### 🏄‍♀️ Wave 18 - Second Quarter 2023 + +[Menu🔝](#menu) + +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | + + ### 🏄‍♀️ Wave 17 - First Quarter 2023 [Menu🔝](#menu) From fd9086f925f6cb2e324bb7db8f4b143422e36ff3 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Mon, 3 Apr 2023 17:26:36 +0200 Subject: [PATCH 221/665] Update xcm-tool.md fix typos --- docs/RFPs/Open/xcm-tool.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/docs/RFPs/Open/xcm-tool.md b/docs/RFPs/Open/xcm-tool.md index 7f0eaa91c0c..d36ae0fa8e1 100644 --- a/docs/RFPs/Open/xcm-tool.md +++ b/docs/RFPs/Open/xcm-tool.md @@ -8,18 +8,17 @@ XCM is the crosschain communication standard that will be used by all the parachains. Currently XCM is still in early stage but is already support some main usecases such as crosschain transfer of fungible tokens. -There are currently two major areas of XCM that still awaiting to be improves: +There are currently two major areas of XCM that are still awaiting to be improved: - Extend & improve [xcm-format](https://github.com/paritytech/xcm-format) to support more use cases - We have few issues & PRs so we are on track on getting this done but of couse more helps as always welcome - Implement library & tools to ease the development of XCM related code - - [xtokens](https://github.com/w3f/Open-Grants-Program/blob/master/applications/xtokens.md) handles the fungible asset implement, and we also need simialr one for NFT - - We need some tool to allow developer to test XCM related code: https://github.com/paritytech/polkadot/issues/2544 + - [xtokens](https://github.com/w3f/Open-Grants-Program/blob/master/applications/xtokens.md) handles the fungible asset implementations, and we also need a similar one for NFTs + - We need some tool to allow developers to test XCM related code: https://github.com/paritytech/polkadot/issues/2544 - To implement more complicated XCM scenarios, we need some tools to help with async programming The scope of the new project count be one of: -- Develop tools to help developer to test XCM related code -- Develop pallets or utility libraies to better handle the async nature of XCM communication -- Develop pallet to handle crosschain transfer of NFT - +- Develop tools to help developer to test XCM-related code +- Develop pallets or utility libraries to better handle the async nature of XCM communication +- Develop a pallet to handle crosschain transfers of NFTs From fc338f8182ce56139b14ba8dd8a3c65079b95b7e Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 3 Apr 2023 15:50:11 -0300 Subject: [PATCH 222/665] Update index.md (#1648) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 5abb8c8b906..b69052fe26f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -36,7 +36,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | -| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☐ | ☐ | +| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | From 3862855c6af080de5e2de4a35667d24f3c5b38de Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 4 Apr 2023 03:08:12 -0400 Subject: [PATCH 223/665] Update index.md (#1652) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b69052fe26f..55712a40bc1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -92,7 +92,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [CrossChain Labs](https://github.com/CrossChainLabs) | [DotPulse](DotPulse.md) | [GitHub](https://github.com/CrossChainLabs) | ☐ | ☒ | ☒ | -| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☐ | +| [Jett Hays](https://github.com/jettblu) | [Distributed Key Management](DistributedKeyManagement.md) | [GitHub](https://github.com/KryptikApp) | ☐ | ☒ | ☒ | | [NexToken Technology](https://github.com/NexTokenTech) | [TREX - Timed Release Encryption Xing chains](TREX_Network.md) | [GitHub](https://github.com/NexTokenTech/TREX) | ☐ | ☒ | ☒ | | [Blockcoders](http://blockcoders.io/) | [Cross-Consensus Messaging Software Development Kit](xcm-sdk.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | From 89c76532af756b57c9229e7d3f6c5375f8a9c048 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 4 Apr 2023 03:08:33 -0400 Subject: [PATCH 224/665] Update index.md (#1650) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 55712a40bc1..2c70b4c91b1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -47,7 +47,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | From f186dfd8f5bba592fd6aeecca8b1d504909a6ad9 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 4 Apr 2023 08:50:02 -0300 Subject: [PATCH 225/665] Update index.md to check societal as finished (#1653) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2c70b4c91b1..0bac3785d06 100644 --- a/applications/index.md +++ b/applications/index.md @@ -48,7 +48,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | From 6380fa0c236acc945df0d96b4cf312e921a87d4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 4 Apr 2023 15:32:19 +0200 Subject: [PATCH 226/665] Update index.md Coong Wallet M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0bac3785d06..4898be027fa 100644 --- a/applications/index.md +++ b/applications/index.md @@ -126,7 +126,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☒ | ☒ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | -| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☐ | ☐ | +| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☒ | ☐ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | From 514788722c391d44ca0369681404c1e6a8ea5cf7 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 10:00:47 +0200 Subject: [PATCH 227/665] Yarn update --- yarn.lock | 8720 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 8720 insertions(+) create mode 100644 yarn.lock diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000000..c6f06f36c54 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8720 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@algolia/autocomplete-core@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz#85ff36b2673654a393c8c505345eaedd6eaa4f70" + integrity sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg== + dependencies: + "@algolia/autocomplete-shared" "1.7.4" + +"@algolia/autocomplete-preset-algolia@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz#610ee1d887962f230b987cba2fd6556478000bc3" + integrity sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ== + dependencies: + "@algolia/autocomplete-shared" "1.7.4" + +"@algolia/autocomplete-shared@1.7.4": + version "1.7.4" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz#78aea1140a50c4d193e1f06a13b7f12c5e2cbeea" + integrity sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg== + +"@algolia/cache-browser-local-storage@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz#4c54a9b1795dcc1cd9f9533144f7df3057984d39" + integrity sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ== + dependencies: + "@algolia/cache-common" "4.17.0" + +"@algolia/cache-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.0.tgz#bc3da15548df585b44d76c55e66b0056a2b3f917" + integrity sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ== + +"@algolia/cache-in-memory@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz#eb55a92cb8eb8641903a2b23fd6d05ebdaca2010" + integrity sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw== + dependencies: + "@algolia/cache-common" "4.17.0" + +"@algolia/client-account@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.0.tgz#4b13e5a8e50a06be1f3289d9db337096ebc66b73" + integrity sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-analytics@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.0.tgz#1b36ffbe913b7b4d8900bc15982ca431f47a473c" + integrity sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.0.tgz#67fd898006e3ac359ea3e3ed61abfc26147ffa53" + integrity sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ== + dependencies: + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-personalization@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.0.tgz#428d9f4762c22856b6062bb54351eb31834db6c1" + integrity sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/client-search@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.0.tgz#0053c682f5f588e006c20791c27e8bcb0aa5b53c" + integrity sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA== + dependencies: + "@algolia/client-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/transporter" "4.17.0" + +"@algolia/events@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" + integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== + +"@algolia/logger-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.0.tgz#0fcea39c9485554edb4cdbfd965c5748b0b837ac" + integrity sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw== + +"@algolia/logger-console@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.0.tgz#8ac56ef4259c4fa3eb9eb6586c7b4b4ed942e8da" + integrity sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg== + dependencies: + "@algolia/logger-common" "4.17.0" + +"@algolia/requester-browser-xhr@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz#f52fdeeac2f3c531f00838920af33a73066a159b" + integrity sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A== + dependencies: + "@algolia/requester-common" "4.17.0" + +"@algolia/requester-common@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.0.tgz#746020d2cbc829213e7cede8eef2182c7a71e32b" + integrity sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg== + +"@algolia/requester-node-http@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz#262276d94c25a4ec2128b1bdfb9471529528d8b9" + integrity sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w== + dependencies: + "@algolia/requester-common" "4.17.0" + +"@algolia/transporter@4.17.0": + version "4.17.0" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.0.tgz#6aabdbc20c475d72d83c8e6519f1191f1a51fb37" + integrity sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA== + dependencies: + "@algolia/cache-common" "4.17.0" + "@algolia/logger-common" "4.17.0" + "@algolia/requester-common" "4.17.0" + +"@ampproject/remapping@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" + integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + dependencies: + "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" + integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== + dependencies: + "@babel/highlight" "^7.18.6" + +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" + integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== + +"@babel/core@7.12.9": + version "7.12.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.9.tgz#fd450c4ec10cdbb980e2928b7aa7a28484593fc8" + integrity sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.5" + "@babel/parser" "^7.12.7" + "@babel/template" "^7.12.7" + "@babel/traverse" "^7.12.9" + "@babel/types" "^7.12.7" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/core@^7.12.3", "@babel/core@^7.18.6", "@babel/core@^7.19.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" + integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helpers" "^7.21.0" + "@babel/parser" "^7.21.4" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.4" + "@babel/types" "^7.21.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.2" + semver "^6.3.0" + +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" + integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== + dependencies: + "@babel/types" "^7.21.4" + "@jridgewell/gen-mapping" "^0.3.2" + "@jridgewell/trace-mapping" "^0.3.17" + jsesc "^2.5.1" + +"@babel/helper-annotate-as-pure@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" + integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" + integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== + dependencies: + "@babel/helper-explode-assignable-expression" "^7.18.6" + "@babel/types" "^7.18.9" + +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" + integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== + dependencies: + "@babel/compat-data" "^7.21.4" + "@babel/helper-validator-option" "^7.21.0" + browserslist "^4.21.3" + lru-cache "^5.1.1" + semver "^6.3.0" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18" + integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-member-expression-to-functions" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-split-export-declaration" "^7.18.6" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz#40411a8ab134258ad2cf3a3d987ec6aa0723cee5" + integrity sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + regexpu-core "^5.3.1" + +"@babel/helper-define-polyfill-provider@^0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" + integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== + dependencies: + "@babel/helper-compilation-targets" "^7.17.7" + "@babel/helper-plugin-utils" "^7.16.7" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + semver "^6.1.2" + +"@babel/helper-environment-visitor@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" + integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== + +"@babel/helper-explode-assignable-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" + integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" + integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== + dependencies: + "@babel/template" "^7.20.7" + "@babel/types" "^7.21.0" + +"@babel/helper-hoist-variables@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" + integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5" + integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q== + dependencies: + "@babel/types" "^7.21.0" + +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" + integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== + dependencies: + "@babel/types" "^7.21.4" + +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" + integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/helper-validator-identifier" "^7.19.1" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.2" + "@babel/types" "^7.21.2" + +"@babel/helper-optimise-call-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" + integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-plugin-utils@7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" + integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== + +"@babel/helper-remap-async-to-generator@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" + integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-wrap-function" "^7.18.9" + "@babel/types" "^7.18.9" + +"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" + integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-member-expression-to-functions" "^7.20.7" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/helper-simple-access@^7.20.2": + version "7.20.2" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" + integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== + dependencies: + "@babel/types" "^7.20.2" + +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" + integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== + dependencies: + "@babel/types" "^7.20.0" + +"@babel/helper-split-export-declaration@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" + integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== + dependencies: + "@babel/types" "^7.18.6" + +"@babel/helper-string-parser@^7.19.4": + version "7.19.4" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" + integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== + +"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": + version "7.19.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" + integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== + +"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" + integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== + +"@babel/helper-wrap-function@^7.18.9": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" + integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== + dependencies: + "@babel/helper-function-name" "^7.19.0" + "@babel/template" "^7.18.10" + "@babel/traverse" "^7.20.5" + "@babel/types" "^7.20.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" + integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== + dependencies: + "@babel/template" "^7.20.7" + "@babel/traverse" "^7.21.0" + "@babel/types" "^7.21.0" + +"@babel/highlight@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" + integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== + dependencies: + "@babel/helper-validator-identifier" "^7.18.6" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" + integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" + integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" + integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-proposal-optional-chaining" "^7.20.7" + +"@babel/plugin-proposal-async-generator-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" + integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== + dependencies: + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-proposal-class-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" + integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-class-static-block@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" + integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-proposal-dynamic-import@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" + integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + +"@babel/plugin-proposal-export-namespace-from@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" + integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" + integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-json-strings" "^7.8.3" + +"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" + integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" + integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-proposal-numeric-separator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" + integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + +"@babel/plugin-proposal-object-rest-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" + integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== + dependencies: + "@babel/compat-data" "^7.20.5" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.20.7" + +"@babel/plugin-proposal-optional-catch-binding@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" + integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" + integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-proposal-private-methods@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" + integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-proposal-private-property-in-object@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" + integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" + integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-dynamic-import@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" + integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + +"@babel/plugin-syntax-import-assertions@^7.20.0": + version "7.20.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" + integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.19.0" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" + integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@7.8.3", "@babel/plugin-syntax-object-rest-spread@^7.8.0", "@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.20.0": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" + integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-arrow-functions@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" + integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-async-to-generator@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" + integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-remap-async-to-generator" "^7.18.9" + +"@babel/plugin-transform-block-scoped-functions@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" + integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-block-scoping@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" + integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-classes@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" + integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-compilation-targets" "^7.20.7" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-optimise-call-expression" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-replace-supers" "^7.20.7" + "@babel/helper-split-export-declaration" "^7.18.6" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" + integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/template" "^7.20.7" + +"@babel/plugin-transform-destructuring@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" + integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" + integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-duplicate-keys@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" + integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-exponentiation-operator@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" + integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-for-of@^7.21.0": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e" + integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-function-name@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" + integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== + dependencies: + "@babel/helper-compilation-targets" "^7.18.9" + "@babel/helper-function-name" "^7.18.9" + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" + integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-member-expression-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" + integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-modules-amd@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" + integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== + dependencies: + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-modules-commonjs@^7.21.2": + version "7.21.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7" + integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== + dependencies: + "@babel/helper-module-transforms" "^7.21.2" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-simple-access" "^7.20.2" + +"@babel/plugin-transform-modules-systemjs@^7.20.11": + version "7.20.11" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" + integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== + dependencies: + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-module-transforms" "^7.20.11" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-identifier" "^7.19.1" + +"@babel/plugin-transform-modules-umd@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" + integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== + dependencies: + "@babel/helper-module-transforms" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" + integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.20.5" + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-new-target@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" + integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-object-super@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" + integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-replace-supers" "^7.18.6" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" + integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-property-literals@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" + integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.18.12": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" + integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + +"@babel/plugin-transform-react-display-name@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" + integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-react-jsx-development@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" + integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== + dependencies: + "@babel/plugin-transform-react-jsx" "^7.18.6" + +"@babel/plugin-transform-react-jsx@^7.18.6": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" + integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-module-imports" "^7.18.6" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-jsx" "^7.18.6" + "@babel/types" "^7.21.0" + +"@babel/plugin-transform-react-pure-annotations@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" + integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-regenerator@^7.20.5": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" + integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + regenerator-transform "^0.15.1" + +"@babel/plugin-transform-reserved-words@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" + integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-runtime@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" + integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== + dependencies: + "@babel/helper-module-imports" "^7.21.4" + "@babel/helper-plugin-utils" "^7.20.2" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + semver "^6.3.0" + +"@babel/plugin-transform-shorthand-properties@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" + integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-spread@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" + integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + +"@babel/plugin-transform-sticky-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" + integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-template-literals@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" + integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typeof-symbol@^7.18.9": + version "7.18.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" + integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-typescript@^7.21.3": + version "7.21.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" + integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.18.6" + "@babel/helper-create-class-features-plugin" "^7.21.0" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/plugin-syntax-typescript" "^7.20.0" + +"@babel/plugin-transform-unicode-escapes@^7.18.10": + version "7.18.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" + integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== + dependencies: + "@babel/helper-plugin-utils" "^7.18.9" + +"@babel/plugin-transform-unicode-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" + integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" + integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== + dependencies: + "@babel/compat-data" "^7.21.4" + "@babel/helper-compilation-targets" "^7.21.4" + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" + "@babel/plugin-proposal-async-generator-functions" "^7.20.7" + "@babel/plugin-proposal-class-properties" "^7.18.6" + "@babel/plugin-proposal-class-static-block" "^7.21.0" + "@babel/plugin-proposal-dynamic-import" "^7.18.6" + "@babel/plugin-proposal-export-namespace-from" "^7.18.9" + "@babel/plugin-proposal-json-strings" "^7.18.6" + "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" + "@babel/plugin-proposal-numeric-separator" "^7.18.6" + "@babel/plugin-proposal-object-rest-spread" "^7.20.7" + "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" + "@babel/plugin-proposal-optional-chaining" "^7.21.0" + "@babel/plugin-proposal-private-methods" "^7.18.6" + "@babel/plugin-proposal-private-property-in-object" "^7.21.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-transform-arrow-functions" "^7.20.7" + "@babel/plugin-transform-async-to-generator" "^7.20.7" + "@babel/plugin-transform-block-scoped-functions" "^7.18.6" + "@babel/plugin-transform-block-scoping" "^7.21.0" + "@babel/plugin-transform-classes" "^7.21.0" + "@babel/plugin-transform-computed-properties" "^7.20.7" + "@babel/plugin-transform-destructuring" "^7.21.3" + "@babel/plugin-transform-dotall-regex" "^7.18.6" + "@babel/plugin-transform-duplicate-keys" "^7.18.9" + "@babel/plugin-transform-exponentiation-operator" "^7.18.6" + "@babel/plugin-transform-for-of" "^7.21.0" + "@babel/plugin-transform-function-name" "^7.18.9" + "@babel/plugin-transform-literals" "^7.18.9" + "@babel/plugin-transform-member-expression-literals" "^7.18.6" + "@babel/plugin-transform-modules-amd" "^7.20.11" + "@babel/plugin-transform-modules-commonjs" "^7.21.2" + "@babel/plugin-transform-modules-systemjs" "^7.20.11" + "@babel/plugin-transform-modules-umd" "^7.18.6" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" + "@babel/plugin-transform-new-target" "^7.18.6" + "@babel/plugin-transform-object-super" "^7.18.6" + "@babel/plugin-transform-parameters" "^7.21.3" + "@babel/plugin-transform-property-literals" "^7.18.6" + "@babel/plugin-transform-regenerator" "^7.20.5" + "@babel/plugin-transform-reserved-words" "^7.18.6" + "@babel/plugin-transform-shorthand-properties" "^7.18.6" + "@babel/plugin-transform-spread" "^7.20.7" + "@babel/plugin-transform-sticky-regex" "^7.18.6" + "@babel/plugin-transform-template-literals" "^7.18.9" + "@babel/plugin-transform-typeof-symbol" "^7.18.9" + "@babel/plugin-transform-unicode-escapes" "^7.18.10" + "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/preset-modules" "^0.1.5" + "@babel/types" "^7.21.4" + babel-plugin-polyfill-corejs2 "^0.3.3" + babel-plugin-polyfill-corejs3 "^0.6.0" + babel-plugin-polyfill-regenerator "^0.4.1" + core-js-compat "^3.25.1" + semver "^6.3.0" + +"@babel/preset-modules@^0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" + integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" + integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + dependencies: + "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-validator-option" "^7.18.6" + "@babel/plugin-transform-react-display-name" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx-development" "^7.18.6" + "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + +"@babel/preset-typescript@^7.18.6": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529" + integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A== + dependencies: + "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-validator-option" "^7.21.0" + "@babel/plugin-syntax-jsx" "^7.21.4" + "@babel/plugin-transform-modules-commonjs" "^7.21.2" + "@babel/plugin-transform-typescript" "^7.21.3" + +"@babel/regjsgen@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" + integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + +"@babel/runtime-corejs3@^7.18.6": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz#6e4939d9d9789ff63e2dc58e88f13a3913a24eba" + integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== + dependencies: + core-js-pure "^3.25.1" + regenerator-runtime "^0.13.11" + +"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": + version "7.21.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" + integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + dependencies: + regenerator-runtime "^0.13.11" + +"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" + integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== + dependencies: + "@babel/code-frame" "^7.18.6" + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" + integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== + dependencies: + "@babel/code-frame" "^7.21.4" + "@babel/generator" "^7.21.4" + "@babel/helper-environment-visitor" "^7.18.9" + "@babel/helper-function-name" "^7.21.0" + "@babel/helper-hoist-variables" "^7.18.6" + "@babel/helper-split-export-declaration" "^7.18.6" + "@babel/parser" "^7.21.4" + "@babel/types" "^7.21.4" + debug "^4.1.0" + globals "^11.1.0" + +"@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": + version "7.21.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" + integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== + dependencies: + "@babel/helper-string-parser" "^7.19.4" + "@babel/helper-validator-identifier" "^7.19.1" + to-fast-properties "^2.0.0" + +"@braintree/sanitize-url@^6.0.0": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" + integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@discoveryjs/json-ext@0.5.7": + version "0.5.7" + resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" + integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== + +"@docsearch/css@3.3.3": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.3.tgz#f9346c9e24602218341f51b8ba91eb9109add434" + integrity sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg== + +"@docsearch/react@^3.1.1": + version "3.3.3" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.3.3.tgz#907b6936a565f880b4c0892624b4f7a9f132d298" + integrity sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q== + dependencies: + "@algolia/autocomplete-core" "1.7.4" + "@algolia/autocomplete-preset-algolia" "1.7.4" + "@docsearch/css" "3.3.3" + algoliasearch "^4.0.0" + +"@docusaurus/core@2.4.0", "@docusaurus/core@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.0.tgz#a12c175cb2e5a7e4582e65876a50813f6168913d" + integrity sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA== + dependencies: + "@babel/core" "^7.18.6" + "@babel/generator" "^7.18.7" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/plugin-transform-runtime" "^7.18.6" + "@babel/preset-env" "^7.18.6" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@babel/runtime" "^7.18.6" + "@babel/runtime-corejs3" "^7.18.6" + "@babel/traverse" "^7.18.8" + "@docusaurus/cssnano-preset" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@slorber/static-site-generator-webpack-plugin" "^4.0.7" + "@svgr/webpack" "^6.2.1" + autoprefixer "^10.4.7" + babel-loader "^8.2.5" + babel-plugin-dynamic-import-node "^2.3.3" + boxen "^6.2.1" + chalk "^4.1.2" + chokidar "^3.5.3" + clean-css "^5.3.0" + cli-table3 "^0.6.2" + combine-promises "^1.1.0" + commander "^5.1.0" + copy-webpack-plugin "^11.0.0" + core-js "^3.23.3" + css-loader "^6.7.1" + css-minimizer-webpack-plugin "^4.0.0" + cssnano "^5.1.12" + del "^6.1.1" + detect-port "^1.3.0" + escape-html "^1.0.3" + eta "^2.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + html-minifier-terser "^6.1.0" + html-tags "^3.2.0" + html-webpack-plugin "^5.5.0" + import-fresh "^3.3.0" + leven "^3.1.0" + lodash "^4.17.21" + mini-css-extract-plugin "^2.6.1" + postcss "^8.4.14" + postcss-loader "^7.0.0" + prompts "^2.4.2" + react-dev-utils "^12.0.1" + react-helmet-async "^1.3.0" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + react-loadable-ssr-addon-v5-slorber "^1.0.1" + react-router "^5.3.3" + react-router-config "^5.1.1" + react-router-dom "^5.3.3" + rtl-detect "^1.0.4" + semver "^7.3.7" + serve-handler "^6.1.3" + shelljs "^0.8.5" + terser-webpack-plugin "^5.3.3" + tslib "^2.4.0" + update-notifier "^5.1.0" + url-loader "^4.1.1" + wait-on "^6.0.1" + webpack "^5.73.0" + webpack-bundle-analyzer "^4.5.0" + webpack-dev-server "^4.9.3" + webpack-merge "^5.8.0" + webpackbar "^5.0.2" + +"@docusaurus/cssnano-preset@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz#9213586358e0cce517f614af041eb7d184f8add6" + integrity sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw== + dependencies: + cssnano-preset-advanced "^5.3.8" + postcss "^8.4.14" + postcss-sort-media-queries "^4.2.1" + tslib "^2.4.0" + +"@docusaurus/logger@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.0.tgz#393d91ad9ecdb9a8f80167dd6a34d4b45219b835" + integrity sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw== + dependencies: + chalk "^4.1.2" + tslib "^2.4.0" + +"@docusaurus/mdx-loader@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz#c6310342904af2f203e7df86a9df623f86840f2d" + integrity sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g== + dependencies: + "@babel/parser" "^7.18.8" + "@babel/traverse" "^7.18.8" + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@mdx-js/mdx" "^1.6.22" + escape-html "^1.0.3" + file-loader "^6.2.0" + fs-extra "^10.1.0" + image-size "^1.0.1" + mdast-util-to-string "^2.0.0" + remark-emoji "^2.2.0" + stringify-object "^3.3.0" + tslib "^2.4.0" + unified "^9.2.2" + unist-util-visit "^2.0.3" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@docusaurus/module-type-aliases@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz#6961605d20cd46f86163ed8c2d83d438b02b4028" + integrity sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg== + dependencies: + "@docusaurus/react-loadable" "5.5.2" + "@docusaurus/types" "2.4.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + "@types/react-router-dom" "*" + react-helmet-async "*" + react-loadable "npm:@docusaurus/react-loadable@5.5.2" + +"@docusaurus/plugin-content-blog@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz#50dbfbc7b51f152ae660385fd8b34076713374c3" + integrity sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + cheerio "^1.0.0-rc.12" + feed "^4.2.2" + fs-extra "^10.1.0" + lodash "^4.17.21" + reading-time "^1.5.0" + tslib "^2.4.0" + unist-util-visit "^2.0.3" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-docs@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz#36e235adf902325735b873b4f535205884363728" + integrity sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@types/react-router-config" "^5.0.6" + combine-promises "^1.1.0" + fs-extra "^10.1.0" + import-fresh "^3.3.0" + js-yaml "^4.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + webpack "^5.73.0" + +"@docusaurus/plugin-content-pages@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz#6169909a486e1eae0ddffff0b1717ce4332db4d4" + integrity sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + fs-extra "^10.1.0" + tslib "^2.4.0" + webpack "^5.73.0" + +"@docusaurus/plugin-debug@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz#1ad513fe9bcaf017deccf62df8b8843faeeb7d37" + integrity sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + fs-extra "^10.1.0" + react-json-view "^1.21.3" + tslib "^2.4.0" + +"@docusaurus/plugin-google-analytics@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz#8062d7a09d366329dfd3ce4e8a619da8624b6cc3" + integrity sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-gtag@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz#a8efda476f971410dfb3aab1cfe1f0f7d269adc5" + integrity sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-google-tag-manager@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz#9a94324ac496835fc34e233cc60441df4e04dfdd" + integrity sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + tslib "^2.4.0" + +"@docusaurus/plugin-sitemap@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz#ba0eb43565039fe011bdd874b5c5d7252b19d709" + integrity sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + fs-extra "^10.1.0" + sitemap "^7.1.1" + tslib "^2.4.0" + +"@docusaurus/preset-classic@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz#92fdcfab35d8d0ffb8c38bcbf439e4e1cb0566a3" + integrity sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/plugin-debug" "2.4.0" + "@docusaurus/plugin-google-analytics" "2.4.0" + "@docusaurus/plugin-google-gtag" "2.4.0" + "@docusaurus/plugin-google-tag-manager" "2.4.0" + "@docusaurus/plugin-sitemap" "2.4.0" + "@docusaurus/theme-classic" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-search-algolia" "2.4.0" + "@docusaurus/types" "2.4.0" + +"@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": + version "5.5.2" + resolved "https://registry.yarnpkg.com/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz#81aae0db81ecafbdaee3651f12804580868fa6ce" + integrity sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ== + dependencies: + "@types/react" "*" + prop-types "^15.6.2" + +"@docusaurus/theme-classic@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz#a5404967b00adec3472efca4c3b3f6a5e2021c78" + integrity sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w== + dependencies: + "@docusaurus/core" "2.4.0" + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/types" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + "@mdx-js/react" "^1.6.22" + clsx "^1.2.1" + copy-text-to-clipboard "^3.0.1" + infima "0.2.0-alpha.43" + lodash "^4.17.21" + nprogress "^0.2.0" + postcss "^8.4.14" + prism-react-renderer "^1.3.5" + prismjs "^1.28.0" + react-router-dom "^5.3.3" + rtlcss "^3.5.0" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-common@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.0.tgz#626096fe9552d240a2115b492c7e12099070cf2d" + integrity sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg== + dependencies: + "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/module-type-aliases" "2.4.0" + "@docusaurus/plugin-content-blog" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/plugin-content-pages" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-common" "2.4.0" + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router-config" "*" + clsx "^1.2.1" + parse-numeric-range "^1.3.0" + prism-react-renderer "^1.3.5" + tslib "^2.4.0" + use-sync-external-store "^1.2.0" + utility-types "^3.10.0" + +"@docusaurus/theme-search-algolia@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz#07d297d50c44446d6bc5a37be39afb8f014084e1" + integrity sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA== + dependencies: + "@docsearch/react" "^3.1.1" + "@docusaurus/core" "2.4.0" + "@docusaurus/logger" "2.4.0" + "@docusaurus/plugin-content-docs" "2.4.0" + "@docusaurus/theme-common" "2.4.0" + "@docusaurus/theme-translations" "2.4.0" + "@docusaurus/utils" "2.4.0" + "@docusaurus/utils-validation" "2.4.0" + algoliasearch "^4.13.1" + algoliasearch-helper "^3.10.0" + clsx "^1.2.1" + eta "^2.0.0" + fs-extra "^10.1.0" + lodash "^4.17.21" + tslib "^2.4.0" + utility-types "^3.10.0" + +"@docusaurus/theme-translations@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz#62dacb7997322f4c5a828b3ab66177ec6769eb33" + integrity sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q== + dependencies: + fs-extra "^10.1.0" + tslib "^2.4.0" + +"@docusaurus/types@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.0.tgz#f94f89a0253778b617c5d40ac6f16b17ec55ce41" + integrity sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + commander "^5.1.0" + joi "^17.6.0" + react-helmet-async "^1.3.0" + utility-types "^3.10.0" + webpack "^5.73.0" + webpack-merge "^5.8.0" + +"@docusaurus/utils-common@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.0.tgz#eb2913871860ed32e73858b4c7787dd820c5558d" + integrity sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A== + dependencies: + tslib "^2.4.0" + +"@docusaurus/utils-validation@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz#1ed92bfab5da321c4a4d99cad28a15627091aa90" + integrity sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w== + dependencies: + "@docusaurus/logger" "2.4.0" + "@docusaurus/utils" "2.4.0" + joi "^17.6.0" + js-yaml "^4.1.0" + tslib "^2.4.0" + +"@docusaurus/utils@2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.0.tgz#fdf0c3545819e48bb57eafc5057495fd4d50e900" + integrity sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg== + dependencies: + "@docusaurus/logger" "2.4.0" + "@svgr/webpack" "^6.2.1" + escape-string-regexp "^4.0.0" + file-loader "^6.2.0" + fs-extra "^10.1.0" + github-slugger "^1.4.0" + globby "^11.1.0" + gray-matter "^4.0.3" + js-yaml "^4.1.0" + lodash "^4.17.21" + micromatch "^4.0.5" + resolve-pathname "^3.0.0" + shelljs "^0.8.5" + tslib "^2.4.0" + url-loader "^4.1.1" + webpack "^5.73.0" + +"@hapi/hoek@^9.0.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-9.3.0.tgz#8368869dcb735be2e7f5cb7647de78e167a251fb" + integrity sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ== + +"@hapi/topo@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@hapi/topo/-/topo-5.1.0.tgz#dc448e332c6c6e37a4dc02fd84ba8d44b9afb012" + integrity sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@jest/schemas@^29.4.3": + version "29.4.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" + integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== + dependencies: + "@sinclair/typebox" "^0.25.16" + +"@jest/types@^29.5.0": + version "29.5.0" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" + integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== + dependencies: + "@jest/schemas" "^29.4.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" + integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== + dependencies: + "@jridgewell/set-array" "^1.0.0" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" + integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + dependencies: + "@jridgewell/set-array" "^1.0.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/resolve-uri@3.1.0": + version "3.1.0" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" + integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== + +"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" + integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== + +"@jridgewell/source-map@^0.3.2": + version "0.3.2" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" + integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" + +"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.14" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== + +"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": + version "0.3.17" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" + integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + dependencies: + "@jridgewell/resolve-uri" "3.1.0" + "@jridgewell/sourcemap-codec" "1.4.14" + +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" + integrity sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A== + +"@mdx-js/mdx@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/mdx/-/mdx-1.6.22.tgz#8a723157bf90e78f17dc0f27995398e6c731f1ba" + integrity sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA== + dependencies: + "@babel/core" "7.12.9" + "@babel/plugin-syntax-jsx" "7.12.1" + "@babel/plugin-syntax-object-rest-spread" "7.8.3" + "@mdx-js/util" "1.6.22" + babel-plugin-apply-mdx-type-prop "1.6.22" + babel-plugin-extract-import-names "1.6.22" + camelcase-css "2.0.1" + detab "2.0.4" + hast-util-raw "6.0.1" + lodash.uniq "4.5.0" + mdast-util-to-hast "10.0.1" + remark-footnotes "2.0.0" + remark-mdx "1.6.22" + remark-parse "8.0.3" + remark-squeeze-paragraphs "4.0.0" + style-to-object "0.3.0" + unified "9.2.0" + unist-builder "2.0.3" + unist-util-visit "2.0.3" + +"@mdx-js/react@^1.6.21", "@mdx-js/react@^1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" + integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== + +"@mdx-js/util@1.6.22": + version "1.6.22" + resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" + integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@polka/url@^1.0.0-next.20": + version "1.0.0-next.21" + resolved "https://registry.yarnpkg.com/@polka/url/-/url-1.0.0-next.21.tgz#5de5a2385a35309427f6011992b544514d559aa1" + integrity sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g== + +"@rollup/plugin-babel@^6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz#07ccde15de278c581673034ad6accdb4a153dfeb" + integrity sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg== + dependencies: + "@babel/helper-module-imports" "^7.18.6" + "@rollup/pluginutils" "^5.0.1" + +"@rollup/pluginutils@^5.0.1": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.0.2.tgz#012b8f53c71e4f6f9cb317e311df1404f56e7a33" + integrity sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA== + dependencies: + "@types/estree" "^1.0.0" + estree-walker "^2.0.2" + picomatch "^2.3.1" + +"@sideway/address@^4.1.3": + version "4.1.4" + resolved "https://registry.yarnpkg.com/@sideway/address/-/address-4.1.4.tgz#03dccebc6ea47fdc226f7d3d1ad512955d4783f0" + integrity sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw== + dependencies: + "@hapi/hoek" "^9.0.0" + +"@sideway/formula@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sideway/formula/-/formula-3.0.1.tgz#80fcbcbaf7ce031e0ef2dd29b1bfc7c3f583611f" + integrity sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg== + +"@sideway/pinpoint@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" + integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== + +"@sinclair/typebox@^0.25.16": + version "0.25.24" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" + integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@slorber/static-site-generator-webpack-plugin@^4.0.7": + version "4.0.7" + resolved "https://registry.yarnpkg.com/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz#fc1678bddefab014e2145cbe25b3ce4e1cfc36f3" + integrity sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA== + dependencies: + eval "^0.1.8" + p-map "^4.0.0" + webpack-sources "^3.2.2" + +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== + +"@svgr/babel-plugin-add-jsx-attribute@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" + integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== + +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" + integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== + +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== + +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" + integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== + +"@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" + integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== + +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== + +"@svgr/babel-plugin-svg-dynamic-title@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" + integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== + +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== + +"@svgr/babel-plugin-svg-em-dimensions@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" + integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== + +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== + +"@svgr/babel-plugin-transform-react-native-svg@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" + integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== + +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== + +"@svgr/babel-plugin-transform-svg-component@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" + integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== + +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" + +"@svgr/babel-preset@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-6.5.1.tgz#b90de7979c8843c5c580c7e2ec71f024b49eb828" + integrity sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^6.5.1" + "@svgr/babel-plugin-remove-jsx-attribute" "*" + "@svgr/babel-plugin-remove-jsx-empty-expression" "*" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^6.5.1" + "@svgr/babel-plugin-svg-dynamic-title" "^6.5.1" + "@svgr/babel-plugin-svg-em-dimensions" "^6.5.1" + "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" + "@svgr/babel-plugin-transform-svg-component" "^6.5.1" + +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== + dependencies: + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" + +"@svgr/core@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-6.5.1.tgz#d3e8aa9dbe3fbd747f9ee4282c1c77a27410488a" + integrity sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + camelcase "^6.2.0" + cosmiconfig "^7.0.1" + +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== + dependencies: + "@babel/types" "^7.12.6" + +"@svgr/hast-util-to-babel-ast@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz#81800bd09b5bcdb968bf6ee7c863d2288fdb80d2" + integrity sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw== + dependencies: + "@babel/types" "^7.20.0" + entities "^4.4.0" + +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== + dependencies: + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" + +"@svgr/plugin-jsx@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz#0e30d1878e771ca753c94e69581c7971542a7072" + integrity sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw== + dependencies: + "@babel/core" "^7.19.6" + "@svgr/babel-preset" "^6.5.1" + "@svgr/hast-util-to-babel-ast" "^6.5.1" + svg-parser "^2.0.4" + +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== + dependencies: + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" + svgo "^1.2.2" + +"@svgr/plugin-svgo@^6.5.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz#0f91910e988fc0b842f88e0960c2862e022abe84" + integrity sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ== + dependencies: + cosmiconfig "^7.0.1" + deepmerge "^4.2.2" + svgo "^2.8.0" + +"@svgr/webpack@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== + dependencies: + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" + +"@svgr/webpack@^6.2.1": + version "6.5.1" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-6.5.1.tgz#ecf027814fc1cb2decc29dc92f39c3cf691e40e8" + integrity sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA== + dependencies: + "@babel/core" "^7.19.6" + "@babel/plugin-transform-react-constant-elements" "^7.18.12" + "@babel/preset-env" "^7.19.4" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.18.6" + "@svgr/core" "^6.5.1" + "@svgr/plugin-jsx" "^6.5.1" + "@svgr/plugin-svgo" "^6.5.1" + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@trysound/sax@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad" + integrity sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA== + +"@types/body-parser@*": + version "1.19.2" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/bonjour@^3.5.9": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/bonjour/-/bonjour-3.5.10.tgz#0f6aadfe00ea414edc86f5d106357cda9701e275" + integrity sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw== + dependencies: + "@types/node" "*" + +"@types/connect-history-api-fallback@^1.3.5": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" + integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + dependencies: + "@types/express-serve-static-core" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.35" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== + dependencies: + "@types/node" "*" + +"@types/eslint-scope@^3.7.3": + version "3.7.4" + resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" + integrity sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA== + dependencies: + "@types/eslint" "*" + "@types/estree" "*" + +"@types/eslint@*": + version "8.37.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" + integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== + dependencies: + "@types/estree" "*" + "@types/json-schema" "*" + +"@types/estree@*", "@types/estree@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" + integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== + +"@types/estree@^0.0.51": + version "0.0.51" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" + integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + +"@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": + version "4.17.33" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" + integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + +"@types/express@*", "@types/express@^4.17.13": + version "4.17.17" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.17.tgz#01d5437f6ef9cfa8668e616e13c2f2ac9a491ae4" + integrity sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/hast@^2.0.0": + version "2.3.4" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" + integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + dependencies: + "@types/unist" "*" + +"@types/history@^4.7.11": + version "4.7.11" + resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.11.tgz#56588b17ae8f50c53983a524fc3cc47437969d64" + integrity sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA== + +"@types/html-minifier-terser@^6.0.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" + integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== + +"@types/http-proxy@^1.17.8": + version "1.17.10" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.10.tgz#e576c8e4a0cc5c6a138819025a88e167ebb38d6c" + integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== + dependencies: + "@types/node" "*" + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": + version "2.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" + integrity sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz#9153fe98bba2bd565a63add9436d6f0d7f8468ff" + integrity sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": + version "7.0.11" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" + integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + +"@types/mdast@^3.0.0": + version "3.0.11" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" + integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== + dependencies: + "@types/unist" "*" + +"@types/mime@*": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" + integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== + +"@types/minimatch@^3.0.3": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== + +"@types/node@*": + version "18.15.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" + integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + +"@types/node@^17.0.5": + version "17.0.45" + resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" + integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== + +"@types/parse-json@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" + integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== + +"@types/parse5@^5.0.0": + version "5.0.3" + resolved "https://registry.yarnpkg.com/@types/parse5/-/parse5-5.0.3.tgz#e7b5aebbac150f8b5fdd4a46e7f0bd8e65e19109" + integrity sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw== + +"@types/prop-types@*": + version "15.7.5" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" + integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== + +"@types/q@^1.5.1": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" + integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== + +"@types/qs@*": + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== + +"@types/range-parser@*": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== + +"@types/react-router-config@*", "@types/react-router-config@^5.0.6": + version "5.0.6" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" + integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router-dom@*": + version "5.3.3" + resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.3.3.tgz#e9d6b4a66fcdbd651a5f106c2656a30088cc1e83" + integrity sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + "@types/react-router" "*" + +"@types/react-router@*": + version "5.1.20" + resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" + integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== + dependencies: + "@types/history" "^4.7.11" + "@types/react" "*" + +"@types/react@*": + version "18.0.33" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.33.tgz#a1575160cb4376787c2f5fe0312302f824baa61e" + integrity sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA== + dependencies: + "@types/prop-types" "*" + "@types/scheduler" "*" + csstype "^3.0.2" + +"@types/retry@0.12.0": + version "0.12.0" + resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" + integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== + +"@types/sax@^1.2.1": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@types/sax/-/sax-1.2.4.tgz#8221affa7f4f3cb21abd22f244cfabfa63e6a69e" + integrity sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw== + dependencies: + "@types/node" "*" + +"@types/scheduler@*": + version "0.16.3" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" + integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== + +"@types/serve-index@^1.9.1": + version "1.9.1" + resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" + integrity sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg== + dependencies: + "@types/express" "*" + +"@types/serve-static@*", "@types/serve-static@^1.13.10": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" + integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + dependencies: + "@types/mime" "*" + "@types/node" "*" + +"@types/sockjs@^0.3.33": + version "0.3.33" + resolved "https://registry.yarnpkg.com/@types/sockjs/-/sockjs-0.3.33.tgz#570d3a0b99ac995360e3136fd6045113b1bd236f" + integrity sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw== + dependencies: + "@types/node" "*" + +"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" + integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== + +"@types/ws@^8.5.1": + version "8.5.4" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" + integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== + dependencies: + "@types/node" "*" + +"@types/yargs-parser@*": + version "21.0.0" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.0.tgz#0c60e537fa790f5f9472ed2776c2b71ec117351b" + integrity sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA== + +"@types/yargs@^17.0.8": + version "17.0.24" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.24.tgz#b3ef8d50ad4aa6aecf6ddc97c580a00f5aa11902" + integrity sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw== + dependencies: + "@types/yargs-parser" "*" + +"@webassemblyjs/ast@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" + integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== + dependencies: + "@webassemblyjs/helper-numbers" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + +"@webassemblyjs/floating-point-hex-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" + integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== + +"@webassemblyjs/helper-api-error@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" + integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== + +"@webassemblyjs/helper-buffer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" + integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== + +"@webassemblyjs/helper-numbers@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" + integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== + dependencies: + "@webassemblyjs/floating-point-hex-parser" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@xtuc/long" "4.2.2" + +"@webassemblyjs/helper-wasm-bytecode@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" + integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== + +"@webassemblyjs/helper-wasm-section@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" + integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + +"@webassemblyjs/ieee754@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" + integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== + dependencies: + "@xtuc/ieee754" "^1.2.0" + +"@webassemblyjs/leb128@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" + integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== + dependencies: + "@xtuc/long" "4.2.2" + +"@webassemblyjs/utf8@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" + integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== + +"@webassemblyjs/wasm-edit@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" + integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-wasm-section" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-opt" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + "@webassemblyjs/wast-printer" "1.11.1" + +"@webassemblyjs/wasm-gen@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" + integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wasm-opt@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" + integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-buffer" "1.11.1" + "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + +"@webassemblyjs/wasm-parser@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" + integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/ieee754" "1.11.1" + "@webassemblyjs/leb128" "1.11.1" + "@webassemblyjs/utf8" "1.11.1" + +"@webassemblyjs/wast-printer@1.11.1": + version "1.11.1" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" + integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== + dependencies: + "@webassemblyjs/ast" "1.11.1" + "@xtuc/long" "4.2.2" + +"@xtuc/ieee754@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" + integrity sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA== + +"@xtuc/long@4.2.2": + version "4.2.2" + resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" + integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== + +accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-import-assertions@^1.7.6: + version "1.8.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" + integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== + +acorn-walk@^8.0.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== + +acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: + version "8.8.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" + integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== + +address@^1.0.1, address@^1.1.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv-formats@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-2.1.1.tgz#6e669400659eb74973bbf2e33327180a0996b520" + integrity sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA== + dependencies: + ajv "^8.0.0" + +ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv-keywords@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" + integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== + dependencies: + fast-deep-equal "^3.1.3" + +ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.8.0: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + dependencies: + fast-deep-equal "^3.1.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + uri-js "^4.2.2" + +algoliasearch-helper@^3.10.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz#0fe39d49b0290e4aa5e1fe733bd24d857d258e94" + integrity sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ== + dependencies: + "@algolia/events" "^4.0.1" + +algoliasearch@^4.0.0, algoliasearch@^4.13.1: + version "4.17.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.0.tgz#46ed58b2b99509d041f11cd1ea83623edf84355f" + integrity sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA== + dependencies: + "@algolia/cache-browser-local-storage" "4.17.0" + "@algolia/cache-common" "4.17.0" + "@algolia/cache-in-memory" "4.17.0" + "@algolia/client-account" "4.17.0" + "@algolia/client-analytics" "4.17.0" + "@algolia/client-common" "4.17.0" + "@algolia/client-personalization" "4.17.0" + "@algolia/client-search" "4.17.0" + "@algolia/logger-common" "4.17.0" + "@algolia/logger-console" "4.17.0" + "@algolia/requester-browser-xhr" "4.17.0" + "@algolia/requester-common" "4.17.0" + "@algolia/requester-node-http" "4.17.0" + "@algolia/transporter" "4.17.0" + +ansi-align@^3.0.0, ansi-align@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-html-community@^0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^6.1.0: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5" + integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^5.0.0: + version "5.0.2" + resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" + integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-buffer-byte-length@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" + integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== + dependencies: + call-bind "^1.0.2" + is-array-buffer "^3.0.1" + +array-differ@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" + integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-flatten@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099" + integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array.prototype.reduce@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" + integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.7" + +arrify@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +autoprefixer@^10.4.12, autoprefixer@^10.4.7: + version "10.4.14" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.14.tgz#e28d49902f8e759dd25b153264e862df2705f79d" + integrity sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ== + dependencies: + browserslist "^4.21.5" + caniuse-lite "^1.0.30001464" + fraction.js "^4.2.0" + normalize-range "^0.1.2" + picocolors "^1.0.0" + postcss-value-parser "^4.2.0" + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== + +axios@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" + integrity sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g== + dependencies: + follow-redirects "^1.14.7" + +babel-loader@^8.2.5: + version "8.3.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.3.0.tgz#124936e841ba4fe8176786d6ff28add1f134d6a8" + integrity sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q== + dependencies: + find-cache-dir "^3.3.1" + loader-utils "^2.0.0" + make-dir "^3.1.0" + schema-utils "^2.6.5" + +babel-plugin-apply-mdx-type-prop@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz#d216e8fd0de91de3f1478ef3231e05446bc8705b" + integrity sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + "@mdx-js/util" "1.6.22" + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== + dependencies: + object.assign "^4.1.0" + +babel-plugin-extract-import-names@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz#de5f9a28eb12f3eb2578bf74472204e66d1a13dc" + integrity sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ== + dependencies: + "@babel/helper-plugin-utils" "7.10.4" + +babel-plugin-polyfill-corejs2@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" + integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== + dependencies: + "@babel/compat-data" "^7.17.7" + "@babel/helper-define-polyfill-provider" "^0.3.3" + semver "^6.1.1" + +babel-plugin-polyfill-corejs3@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" + integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + core-js-compat "^3.25.1" + +babel-plugin-polyfill-regenerator@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" + integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.3.3" + +bail@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" + integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base16@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70" + integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ== + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw== + +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.1.tgz#b1812a8912c195cd371a3ee5e66faa2338a5c668" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.11.0" + raw-body "2.5.1" + type-is "~1.6.18" + unpipe "1.0.0" + +bonjour-service@^1.0.11: + version "1.1.1" + resolved "https://registry.yarnpkg.com/bonjour-service/-/bonjour-service-1.1.1.tgz#960948fa0e0153f5d26743ab15baf8e33752c135" + integrity sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg== + dependencies: + array-flatten "^2.1.2" + dns-equal "^1.0.0" + fast-deep-equal "^3.1.3" + multicast-dns "^7.2.5" + +boolbase@^1.0.0, boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== + +boxen@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +boxen@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-6.2.1.tgz#b098a2278b2cd2845deef2dff2efc38d329b434d" + integrity sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw== + dependencies: + ansi-align "^3.0.1" + camelcase "^6.2.0" + chalk "^4.1.2" + cli-boxes "^3.0.0" + string-width "^5.0.1" + type-fest "^2.5.0" + widest-line "^4.0.1" + wrap-ansi "^8.0.1" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: + version "4.21.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" + integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + dependencies: + caniuse-lite "^1.0.30001449" + electron-to-chromium "^1.4.284" + node-releases "^2.0.8" + update-browserslist-db "^1.0.10" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + integrity sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camel-case@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.2.tgz#9728072a954f805228225a6deea6b38461e1bd5a" + integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== + dependencies: + pascal-case "^3.1.2" + tslib "^2.0.3" + +camelcase-css@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-2.0.1.tgz#ee978f6947914cc30c6b44741b6ed1df7f043fd5" + integrity sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-api@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" + integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== + dependencies: + browserslist "^4.0.0" + caniuse-lite "^1.0.0" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: + version "1.0.30001474" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz#13b6fe301a831fe666cce8ca4ef89352334133d5" + integrity sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q== + +ccount@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" + integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== + +chalk@^2.0.0, chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +character-entities-legacy@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" + integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== + +character-entities@^1.0.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" + integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== + +character-reference-invalid@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" + integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== + +cheerio-select@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4" + integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g== + dependencies: + boolbase "^1.0.0" + css-select "^5.1.0" + css-what "^6.1.0" + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + +cheerio@^1.0.0-rc.12: + version "1.0.0-rc.12" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" + integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + dependencies: + cheerio-select "^2.1.0" + dom-serializer "^2.0.0" + domhandler "^5.0.3" + domutils "^3.0.1" + htmlparser2 "^8.0.1" + parse5 "^7.0.0" + parse5-htmlparser2-tree-adapter "^7.0.0" + +chokidar@^3.4.2, chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chrome-trace-event@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac" + integrity sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +ci-info@^3.2.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" + integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== + +clean-css@^5.2.2, clean-css@^5.3.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-5.3.2.tgz#70ecc7d4d4114921f5d298349ff86a31a9975224" + integrity sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-boxes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-3.0.0.tgz#71a10c716feeba005e4504f36329ef0b17cf3145" + integrity sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g== + +cli-table3@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" + integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +clone-deep@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" + integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== + dependencies: + is-plain-object "^2.0.4" + kind-of "^6.0.2" + shallow-clone "^3.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clsx@^1.1.1, clsx@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" + integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== + +coa@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" + integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== + dependencies: + "@types/q" "^1.5.1" + chalk "^2.4.1" + q "^1.1.2" + +collapse-white-space@^1.0.2: + version "1.0.6" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" + integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colord@^2.9.1: + version "2.9.3" + resolved "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43" + integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== + +colorette@^2.0.10: + version "2.0.19" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" + integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + +combine-promises@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/combine-promises/-/combine-promises-1.1.0.tgz#72db90743c0ca7aab7d0d8d2052fd7b0f674de71" + integrity sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg== + +comma-separated-tokens@^1.0.0: + version "1.0.8" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" + integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== + +commander@7, commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +compressible@~2.0.16: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" + integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.16" + debug "2.6.9" + on-headers "~1.0.2" + safe-buffer "5.1.2" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect-history-api-fallback@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz#647264845251a0daf25b97ce87834cace0f5f1c8" + integrity sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA== + +consola@^2.15.3: + version "2.15.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-2.15.3.tgz#2e11f98d6a4be71ff72e0bdf07bd23e12cb61550" + integrity sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw== + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + integrity sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA== + +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.7.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +copy-text-to-clipboard@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz#6bf40deef0a51ac6858efb0d76ded2c6d6a15059" + integrity sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng== + +copy-webpack-plugin@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz#96d4dbdb5f73d02dd72d0528d1958721ab72e04a" + integrity sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ== + dependencies: + fast-glob "^3.2.11" + glob-parent "^6.0.1" + globby "^13.1.1" + normalize-path "^3.0.0" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + +core-js-compat@^3.25.1: + version "3.30.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.0.tgz#99aa2789f6ed2debfa1df3232784126ee97f4d80" + integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== + dependencies: + browserslist "^4.21.5" + +core-js-pure@^3.25.1: + version "3.30.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.0.tgz#41b6c42e5f363bd53d79999bd35093b17e42e1bf" + integrity sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ== + +core-js@^3.23.3: + version "3.30.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.0.tgz#64ac6f83bc7a49fd42807327051701d4b1478dea" + integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cose-base@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-1.0.3.tgz#650334b41b869578a543358b80cda7e0abe0a60a" + integrity sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg== + dependencies: + layout-base "^1.0.0" + +cose-base@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cose-base/-/cose-base-2.2.0.tgz#1c395c35b6e10bb83f9769ca8b817d614add5c01" + integrity sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g== + dependencies: + layout-base "^2.0.0" + +cosmiconfig-typescript-loader@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" + integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: + version "7.1.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" + integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.2.1" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.10.0" + +cosmiconfig@^8.1.3: + version "8.1.3" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" + integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== + dependencies: + import-fresh "^3.2.1" + js-yaml "^4.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + +countup.js@^2.5.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/countup.js/-/countup.js-2.6.0.tgz#db25f37653c5ee996b4dfa03d1ab2f430c903fd1" + integrity sha512-GeORCrCcaFUHP3RNf0/dWK+XQX+fsdtrMO31mNvsbKXNNG+DMTcgZ4dWpIG9BnOS8t5+iJbaRXgaaG9oLs0N4g== + +cross-fetch@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" + integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + dependencies: + node-fetch "2.6.7" + +cross-spawn@^7.0.0, cross-spawn@^7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-declaration-sorter@^6.3.1: + version "6.4.0" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" + integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== + +css-loader@^6.7.1: + version "6.7.3" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" + integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + dependencies: + icss-utils "^5.1.0" + postcss "^8.4.19" + postcss-modules-extract-imports "^3.0.0" + postcss-modules-local-by-default "^4.0.0" + postcss-modules-scope "^3.0.0" + postcss-modules-values "^4.0.0" + postcss-value-parser "^4.2.0" + semver "^7.3.8" + +css-minimizer-webpack-plugin@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz#79f6199eb5adf1ff7ba57f105e3752d15211eb35" + integrity sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA== + dependencies: + cssnano "^5.1.8" + jest-worker "^29.1.2" + postcss "^8.4.17" + schema-utils "^4.0.0" + serialize-javascript "^6.0.0" + source-map "^0.6.1" + +css-select-base-adapter@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" + integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== + +css-select@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" + integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== + dependencies: + boolbase "^1.0.0" + css-what "^3.2.1" + domutils "^1.7.0" + nth-check "^1.0.2" + +css-select@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" + integrity sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ== + dependencies: + boolbase "^1.0.0" + css-what "^6.0.1" + domhandler "^4.3.1" + domutils "^2.8.0" + nth-check "^2.0.1" + +css-select@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" + integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg== + dependencies: + boolbase "^1.0.0" + css-what "^6.1.0" + domhandler "^5.0.2" + domutils "^3.0.1" + nth-check "^2.0.1" + +css-tree@1.0.0-alpha.37: + version "1.0.0-alpha.37" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" + integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== + dependencies: + mdn-data "2.0.4" + source-map "^0.6.1" + +css-tree@^1.1.2, css-tree@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" + integrity sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q== + dependencies: + mdn-data "2.0.14" + source-map "^0.6.1" + +css-what@^3.2.1: + version "3.4.2" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" + integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== + +css-what@^6.0.1, css-what@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" + integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cssnano-preset-advanced@^5.3.8: + version "5.3.10" + resolved "https://registry.yarnpkg.com/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz#25558a1fbf3a871fb6429ce71e41be7f5aca6eef" + integrity sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ== + dependencies: + autoprefixer "^10.4.12" + cssnano-preset-default "^5.2.14" + postcss-discard-unused "^5.1.0" + postcss-merge-idents "^5.1.1" + postcss-reduce-idents "^5.2.0" + postcss-zindex "^5.1.0" + +cssnano-preset-default@^5.2.14: + version "5.2.14" + resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz#309def4f7b7e16d71ab2438052093330d9ab45d8" + integrity sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A== + dependencies: + css-declaration-sorter "^6.3.1" + cssnano-utils "^3.1.0" + postcss-calc "^8.2.3" + postcss-colormin "^5.3.1" + postcss-convert-values "^5.1.3" + postcss-discard-comments "^5.1.2" + postcss-discard-duplicates "^5.1.0" + postcss-discard-empty "^5.1.1" + postcss-discard-overridden "^5.1.0" + postcss-merge-longhand "^5.1.7" + postcss-merge-rules "^5.1.4" + postcss-minify-font-values "^5.1.0" + postcss-minify-gradients "^5.1.1" + postcss-minify-params "^5.1.4" + postcss-minify-selectors "^5.2.1" + postcss-normalize-charset "^5.1.0" + postcss-normalize-display-values "^5.1.0" + postcss-normalize-positions "^5.1.1" + postcss-normalize-repeat-style "^5.1.1" + postcss-normalize-string "^5.1.0" + postcss-normalize-timing-functions "^5.1.0" + postcss-normalize-unicode "^5.1.1" + postcss-normalize-url "^5.1.0" + postcss-normalize-whitespace "^5.1.1" + postcss-ordered-values "^5.1.3" + postcss-reduce-initial "^5.1.2" + postcss-reduce-transforms "^5.1.0" + postcss-svgo "^5.1.0" + postcss-unique-selectors "^5.1.1" + +cssnano-utils@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz#95684d08c91511edfc70d2636338ca37ef3a6861" + integrity sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA== + +cssnano@^5.1.12, cssnano@^5.1.8: + version "5.1.15" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-5.1.15.tgz#ded66b5480d5127fcb44dac12ea5a983755136bf" + integrity sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw== + dependencies: + cssnano-preset-default "^5.2.14" + lilconfig "^2.0.3" + yaml "^1.10.2" + +csso@^4.0.2, csso@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" + integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== + dependencies: + css-tree "^1.1.2" + +csstype@^3.0.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" + integrity sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ== + +cytoscape-cose-bilkent@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz#762fa121df9930ffeb51a495d87917c570ac209b" + integrity sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ== + dependencies: + cose-base "^1.0.0" + +cytoscape-fcose@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz#e4d6f6490df4fab58ae9cea9e5c3ab8d7472f471" + integrity sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ== + dependencies: + cose-base "^2.2.0" + +cytoscape@^3.23.0: + version "3.23.0" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.23.0.tgz#054ee05a6d0aa3b4f139382bbf2f4e5226df3c6d" + integrity sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA== + dependencies: + heap "^0.2.6" + lodash "^4.17.21" + +"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.3.tgz#39f1f4954e4a09ff69ac597c2d61906b04e84740" + integrity sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ== + dependencies: + internmap "1 - 2" + +d3-axis@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322" + integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw== + +d3-brush@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c" + integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "3" + d3-transition "3" + +d3-chord@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966" + integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g== + dependencies: + d3-path "1 - 3" + +"d3-color@1 - 3", d3-color@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2" + integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA== + +d3-contour@4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/d3-contour/-/d3-contour-4.0.2.tgz#bb92063bc8c5663acb2422f99c73cbb6c6ae3bcc" + integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA== + dependencies: + d3-array "^3.2.0" + +d3-delaunay@6: + version "6.0.4" + resolved "https://registry.yarnpkg.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b" + integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A== + dependencies: + delaunator "5" + +"d3-dispatch@1 - 3", d3-dispatch@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e" + integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg== + +"d3-drag@2 - 3", d3-drag@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba" + integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg== + dependencies: + d3-dispatch "1 - 3" + d3-selection "3" + +"d3-dsv@1 - 3", d3-dsv@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73" + integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q== + dependencies: + commander "7" + iconv-lite "0.6" + rw "1" + +"d3-ease@1 - 3", d3-ease@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4" + integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w== + +d3-fetch@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22" + integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw== + dependencies: + d3-dsv "1 - 3" + +d3-force@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4" + integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg== + dependencies: + d3-dispatch "1 - 3" + d3-quadtree "1 - 3" + d3-timer "1 - 3" + +"d3-format@1 - 3", d3-format@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641" + integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA== + +d3-geo@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e" + integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA== + dependencies: + d3-array "2.5.0 - 3" + +d3-hierarchy@3: + version "3.1.2" + resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6" + integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA== + +"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d" + integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g== + dependencies: + d3-color "1 - 3" + +"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" + integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ== + +d3-polygon@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398" + integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg== + +"d3-quadtree@1 - 3", d3-quadtree@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f" + integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw== + +d3-random@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4" + integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== + +d3-scale-chromatic@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a" + integrity sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g== + dependencies: + d3-color "1 - 3" + d3-interpolate "1 - 3" + +d3-scale@4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396" + integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ== + dependencies: + d3-array "2.10.0 - 3" + d3-format "1 - 3" + d3-interpolate "1.2.0 - 3" + d3-time "2.1.1 - 3" + d3-time-format "2 - 4" + +"d3-selection@2 - 3", d3-selection@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31" + integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ== + +d3-shape@3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5" + integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA== + dependencies: + d3-path "^3.1.0" + +"d3-time-format@2 - 4", d3-time-format@4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" + integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg== + dependencies: + d3-time "1 - 3" + +"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7" + integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q== + dependencies: + d3-array "2 - 3" + +"d3-timer@1 - 3", d3-timer@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0" + integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA== + +"d3-transition@2 - 3", d3-transition@3: + version "3.0.1" + resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f" + integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w== + dependencies: + d3-color "1 - 3" + d3-dispatch "1 - 3" + d3-ease "1 - 3" + d3-interpolate "1 - 3" + d3-timer "1 - 3" + +d3-zoom@3: + version "3.0.0" + resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3" + integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw== + dependencies: + d3-dispatch "1 - 3" + d3-drag "2 - 3" + d3-interpolate "1 - 3" + d3-selection "2 - 3" + d3-transition "2 - 3" + +d3@^7.4.0, d3@^7.8.2: + version "7.8.4" + resolved "https://registry.yarnpkg.com/d3/-/d3-7.8.4.tgz#e35d45800e4068cab07e59e5d883a4bb42ab217f" + integrity sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA== + dependencies: + d3-array "3" + d3-axis "3" + d3-brush "3" + d3-chord "3" + d3-color "3" + d3-contour "4" + d3-delaunay "6" + d3-dispatch "3" + d3-drag "3" + d3-dsv "3" + d3-ease "3" + d3-fetch "3" + d3-force "3" + d3-format "3" + d3-geo "3" + d3-hierarchy "3" + d3-interpolate "3" + d3-path "3" + d3-polygon "3" + d3-quadtree "3" + d3-random "3" + d3-scale "4" + d3-scale-chromatic "3" + d3-selection "3" + d3-shape "3" + d3-time "3" + d3-time-format "4" + d3-timer "3" + d3-transition "3" + d3-zoom "3" + +dagre-d3-es@7.0.9: + version "7.0.9" + resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz#aca12fccd9d09955a4430029ba72ee6934542a8d" + integrity sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w== + dependencies: + d3 "^7.8.2" + lodash-es "^4.17.21" + +dayjs@^1.11.7: + version "1.11.7" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" + integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + +debug@2.6.9, debug@^2.6.0: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA== + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +default-gateway@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-6.0.3.tgz#819494c888053bdb743edbf343d6cdf7f2943a71" + integrity sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg== + dependencies: + execa "^5.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +define-properties@^1.1.3, define-properties@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" + integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== + dependencies: + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +del@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" + integrity sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg== + dependencies: + globby "^11.0.1" + graceful-fs "^4.2.4" + is-glob "^4.0.1" + is-path-cwd "^2.2.0" + is-path-inside "^3.0.2" + p-map "^4.0.0" + rimraf "^3.0.2" + slash "^3.0.0" + +delaunator@5: + version "5.0.0" + resolved "https://registry.yarnpkg.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b" + integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw== + dependencies: + robust-predicates "^3.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detab@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.4.tgz#b927892069aff405fbb9a186fe97a44a92a94b43" + integrity sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g== + dependencies: + repeat-string "^1.5.4" + +detect-node@^2.0.4: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.1.0.tgz#c9c70775a49c3d03bc2c06d9a73be550f978f8b1" + integrity sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g== + +detect-port-alt@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/detect-port-alt/-/detect-port-alt-1.1.6.tgz#24707deabe932d4a3cf621302027c2b266568275" + integrity sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q== + dependencies: + address "^1.0.1" + debug "^2.6.0" + +detect-port@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.5.1.tgz#451ca9b6eaf20451acb0799b8ab40dff7718727b" + integrity sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ== + dependencies: + address "^1.0.1" + debug "4" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== + +dns-packet@^5.2.2: + version "5.5.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.5.0.tgz#f59cbf3396c130957c56a6ad5fd3959ccdc30065" + integrity sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA== + dependencies: + "@leichtgewicht/ip-codec" "^2.0.1" + +dom-converter@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.2.0.tgz#6721a9daee2e293682955b6afe416771627bb768" + integrity sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA== + dependencies: + utila "~0.4" + +dom-serializer@0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" + integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== + dependencies: + domelementtype "^2.0.1" + entities "^2.0.0" + +dom-serializer@^1.0.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" + integrity sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + +dom-serializer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53" + integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.2" + entities "^4.2.0" + +domelementtype@1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" + integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== + +domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" + integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.1.tgz#8d792033416f59d68bc03a5aa7b018c1ca89279c" + integrity sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ== + dependencies: + domelementtype "^2.2.0" + +domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" + integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== + dependencies: + domelementtype "^2.3.0" + +dompurify@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.3.tgz#f4133af0e6a50297fc8874e2eaedc13a3c308c03" + integrity sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ== + +domutils@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== + dependencies: + dom-serializer "0" + domelementtype "1" + +domutils@^2.5.2, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +domutils@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" + integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + dependencies: + dom-serializer "^2.0.0" + domelementtype "^2.3.0" + domhandler "^5.0.1" + +dot-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.4.tgz#9b2b670d00a431667a8a75ba29cd1b98809ce751" + integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +dot-prop@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexer@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +eastasianwidth@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" + integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +electron-to-chromium@^1.4.284: + version "1.4.352" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.352.tgz#be96bd7c2f4b980deebc9338a49a67430a33ed73" + integrity sha512-ikFUEyu5/q+wJpMOxWxTaEVk2M1qKqTGKKyfJmod1CPZxKfYnxVS41/GCBQg21ItBpZybyN8sNpRqCUGm+Zc4Q== + +elkjs@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/elkjs/-/elkjs-0.8.2.tgz#c37763c5a3e24e042e318455e0147c912a7c248e" + integrity sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + +emoticon@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/emoticon/-/emoticon-3.2.0.tgz#c008ca7d7620fac742fe1bf4af8ff8fed154ae7f" + integrity sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enhanced-resolve@^5.10.0: + version "5.12.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" + integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== + dependencies: + graceful-fs "^4.2.4" + tapable "^2.2.0" + +entities@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== + +entities@^4.2.0, entities@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" + integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: + version "1.21.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" + integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== + dependencies: + array-buffer-byte-length "^1.0.0" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-set-tostringtag "^2.0.1" + es-to-primitive "^1.2.1" + function.prototype.name "^1.1.5" + get-intrinsic "^1.2.0" + get-symbol-description "^1.0.0" + globalthis "^1.0.3" + gopd "^1.0.1" + has "^1.0.3" + has-property-descriptors "^1.0.0" + has-proto "^1.0.1" + has-symbols "^1.0.3" + internal-slot "^1.0.5" + is-array-buffer "^3.0.2" + is-callable "^1.2.7" + is-negative-zero "^2.0.2" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.2" + is-string "^1.0.7" + is-typed-array "^1.1.10" + is-weakref "^1.0.2" + object-inspect "^1.12.3" + object-keys "^1.1.1" + object.assign "^4.1.4" + regexp.prototype.flags "^1.4.3" + safe-regex-test "^1.0.0" + string.prototype.trim "^1.2.7" + string.prototype.trimend "^1.0.6" + string.prototype.trimstart "^1.0.6" + typed-array-length "^1.0.4" + unbox-primitive "^1.0.2" + which-typed-array "^1.1.9" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-module-lexer@^0.9.0: + version "0.9.3" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" + integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== + +es-set-tostringtag@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" + integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== + dependencies: + get-intrinsic "^1.1.3" + has "^1.0.3" + has-tostringtag "^1.0.0" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@^1.0.3, escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +eslint-scope@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +estree-walker@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eta@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.0.1.tgz#199e675359cb6e19d38f29e1f405e1ba0e79a6df" + integrity sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +eval@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/eval/-/eval-0.1.8.tgz#2b903473b8cc1d1989b83a1e7923f883eb357f85" + integrity sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw== + dependencies: + "@types/node" "*" + require-like ">= 0.1.1" + +eventemitter3@^4.0.0: + version "4.0.7" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" + integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== + +events@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" + integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +express@^4.17.3: + version "4.18.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.18.2.tgz#3fabe08296e930c796c19e3c516979386ba9fd59" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.2.0" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.7" + proxy-addr "~2.0.7" + qs "6.11.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.18.0" + serve-static "1.15.0" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.2.11, fast-glob@^3.2.9: + version "3.2.12" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" + integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-url-parser@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" + integrity sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ== + dependencies: + punycode "^1.3.2" + +fastq@^1.6.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a" + integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw== + dependencies: + reusify "^1.0.4" + +faye-websocket@^0.11.3: + version "0.11.4" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.4.tgz#7f0d9275cfdd86a1c963dc8b65fcc451edcbb1da" + integrity sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g== + dependencies: + websocket-driver ">=0.5.1" + +fbemitter@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-3.0.0.tgz#00b2a1af5411254aab416cd75f9e6289bee4bff3" + integrity sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw== + dependencies: + fbjs "^3.0.0" + +fbjs-css-vars@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz#216551136ae02fe255932c3ec8775f18e2c078b8" + integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== + +fbjs@^3.0.0, fbjs@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" + integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + dependencies: + cross-fetch "^3.1.5" + fbjs-css-vars "^1.0.0" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.30" + +feed@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e" + integrity sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ== + dependencies: + xml-js "^1.6.11" + +file-loader@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-6.2.0.tgz#baef7cf8e1840df325e4390b4484879480eebe4d" + integrity sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw== + dependencies: + loader-utils "^2.0.0" + schema-utils "^3.0.0" + +filesize@^8.0.6: + version "8.0.7" + resolved "https://registry.yarnpkg.com/filesize/-/filesize-8.0.7.tgz#695e70d80f4e47012c132d57a059e80c6b580bd8" + integrity sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-cache-dir@^3.3.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" + integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flux@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/flux/-/flux-4.0.4.tgz#9661182ea81d161ee1a6a6af10d20485ef2ac572" + integrity sha512-NCj3XlayA2UsapRpM7va6wU1+9rE5FIL7qoMcmxWHRzbp0yujihMBm9BBHZ1MDIk5h5o2Bl6eGiCe8rYELAmYw== + dependencies: + fbemitter "^3.0.0" + fbjs "^3.0.1" + +follow-redirects@^1.0.0, follow-redirects@^1.14.7: + version "1.15.2" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" + integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== + +for-each@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" + integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== + dependencies: + is-callable "^1.1.3" + +fork-ts-checker-webpack-plugin@^6.5.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" + integrity sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ== + dependencies: + "@babel/code-frame" "^7.8.3" + "@types/json-schema" "^7.0.5" + chalk "^4.1.0" + chokidar "^3.4.2" + cosmiconfig "^6.0.0" + deepmerge "^4.2.2" + fs-extra "^9.0.0" + glob "^7.1.6" + memfs "^3.1.2" + minimatch "^3.0.4" + schema-utils "2.7.0" + semver "^7.3.2" + tapable "^1.0.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fraction.js@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.2.0.tgz#448e5109a313a3527f5a3ab2119ec4cf0e0e2950" + integrity sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-extra@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-monkey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" + integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +function.prototype.name@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" + integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.19.0" + functions-have-names "^1.2.2" + +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" + integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.3" + +get-own-enumerable-property-symbols@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" + integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +github-slugger@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" + integrity sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw== + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob-to-regexp@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz#c75297087c851b9a578bd217dd59a92f59fe546e" + integrity sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw== + +glob@^7.0.0, glob@^7.1.3, glob@^7.1.6: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" + integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== + dependencies: + ini "2.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globalthis@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" + integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== + dependencies: + define-properties "^1.1.3" + +globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +globby@^13.1.1: + version "13.1.3" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" + integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== + dependencies: + dir-glob "^3.0.1" + fast-glob "^3.2.11" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^4.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +gray-matter@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-4.0.3.tgz#e893c064825de73ea1f5f7d88c7a9f7274288798" + integrity sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q== + dependencies: + js-yaml "^3.13.1" + kind-of "^6.0.2" + section-matter "^1.0.0" + strip-bom-string "^1.0.0" + +gzip-size@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" + integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== + dependencies: + duplexer "^0.1.2" + +handle-thing@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" + integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== + +has-bigints@^1.0.1, has-bigints@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" + integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861" + integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ== + dependencies: + get-intrinsic "^1.1.1" + +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + +has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hast-to-hyperscript@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz#9b67fd188e4c81e8ad66f803855334173920218d" + integrity sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA== + dependencies: + "@types/unist" "^2.0.3" + comma-separated-tokens "^1.0.0" + property-information "^5.3.0" + space-separated-tokens "^1.0.0" + style-to-object "^0.3.0" + unist-util-is "^4.0.0" + web-namespaces "^1.0.0" + +hast-util-from-parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz#554e34abdeea25ac76f5bd950a1f0180e0b3bc2a" + integrity sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA== + dependencies: + "@types/parse5" "^5.0.0" + hastscript "^6.0.0" + property-information "^5.0.0" + vfile "^4.0.0" + vfile-location "^3.2.0" + web-namespaces "^1.0.0" + +hast-util-parse-selector@^2.0.0: + version "2.2.5" + resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz#d57c23f4da16ae3c63b3b6ca4616683313499c3a" + integrity sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ== + +hast-util-raw@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-6.0.1.tgz#973b15930b7529a7b66984c98148b46526885977" + integrity sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig== + dependencies: + "@types/hast" "^2.0.0" + hast-util-from-parse5 "^6.0.0" + hast-util-to-parse5 "^6.0.0" + html-void-elements "^1.0.0" + parse5 "^6.0.0" + unist-util-position "^3.0.0" + vfile "^4.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hast-util-to-parse5@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz#1ec44650b631d72952066cea9b1445df699f8479" + integrity sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ== + dependencies: + hast-to-hyperscript "^9.0.0" + property-information "^5.0.0" + web-namespaces "^1.0.0" + xtend "^4.0.0" + zwitch "^1.0.0" + +hastscript@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-6.0.0.tgz#e8768d7eac56c3fdeac8a92830d58e811e5bf640" + integrity sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w== + dependencies: + "@types/hast" "^2.0.0" + comma-separated-tokens "^1.0.0" + hast-util-parse-selector "^2.0.0" + property-information "^5.0.0" + space-separated-tokens "^1.0.0" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +heap@^0.2.6: + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +history@^4.9.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/history/-/history-4.10.1.tgz#33371a65e3a83b267434e2b3f3b1b4c58aad4cf3" + integrity sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew== + dependencies: + "@babel/runtime" "^7.1.2" + loose-envify "^1.2.0" + resolve-pathname "^3.0.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + value-equal "^1.0.1" + +hoist-non-react-statics@^3.1.0: + version "3.3.2" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45" + integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw== + dependencies: + react-is "^16.7.0" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + integrity sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ== + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-entities@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" + integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + +html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#bfc818934cc07918f6b3669f5774ecdfd48f32ab" + integrity sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw== + dependencies: + camel-case "^4.1.2" + clean-css "^5.2.2" + commander "^8.3.0" + he "^1.2.0" + param-case "^3.0.4" + relateurl "^0.2.7" + terser "^5.10.0" + +html-tags@^3.2.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-3.3.1.tgz#a04026a18c882e4bba8a01a3d39cfe465d40b5ce" + integrity sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ== + +html-void-elements@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" + integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== + +html-webpack-plugin@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" + integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + dependencies: + "@types/html-minifier-terser" "^6.0.0" + html-minifier-terser "^6.0.2" + lodash "^4.17.21" + pretty-error "^4.0.0" + tapable "^2.0.0" + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + +htmlparser2@^8.0.1: + version "8.0.2" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" + integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== + dependencies: + domelementtype "^2.3.0" + domhandler "^5.0.3" + domutils "^3.0.1" + entities "^4.4.0" + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + integrity sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.5.1: + version "0.5.8" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.5.8.tgz#af23090d9ac4e24573de6f6aecc9d84a48bf20e3" + integrity sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q== + +http-proxy-middleware@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz#e1a4dd6979572c7ab5a4e4b55095d1f32a74963f" + integrity sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw== + dependencies: + "@types/http-proxy" "^1.17.8" + http-proxy "^1.18.1" + is-glob "^4.0.1" + is-plain-obj "^3.0.0" + micromatch "^4.0.2" + +http-proxy@^1.18.1: + version "1.18.1" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549" + integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.6: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +icss-utils@^5.0.0, icss-utils@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" + integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== + +ignore@^5.1.4, ignore@^5.2.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" + integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== + +image-size@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-1.0.2.tgz#d778b6d0ab75b2737c1556dd631652eb963bc486" + integrity sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg== + dependencies: + queue "6.0.2" + +immer@^9.0.7: + version "9.0.21" + resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" + integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== + +import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" + integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +infima@0.2.0-alpha.43: + version "0.2.0-alpha.43" + resolved "https://registry.yarnpkg.com/infima/-/infima-0.2.0-alpha.43.tgz#f7aa1d7b30b6c08afef441c726bac6150228cbe0" + integrity sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw== + +ini@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" + integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== + +ini@^1.3.5, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inline-style-parser@0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" + integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== + +internal-slot@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" + integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== + dependencies: + get-intrinsic "^1.2.0" + has "^1.0.3" + side-channel "^1.0.4" + +"internmap@1 - 2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" + integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +invariant@^2.2.4: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== + dependencies: + loose-envify "^1.0.0" + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +ipaddr.js@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" + integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + +is-alphabetical@1.0.4, is-alphabetical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" + integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== + +is-alphanumerical@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" + integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + +is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" + integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.2.0" + is-typed-array "^1.1.10" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-boolean-object@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-core-module@^2.9.0: + version "2.11.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" + integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== + dependencies: + has "^1.0.3" + +is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-decimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" + integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extendable@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hexadecimal@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" + integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== + +is-installed-globally@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" + integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== + dependencies: + global-dirs "^3.0.0" + is-path-inside "^3.0.2" + +is-negative-zero@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== + +is-npm@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" + integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== + +is-number-object@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" + integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" + integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ== + +is-path-inside@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-plain-obj@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" + integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== + +is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== + +is-root@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" + integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== + +is-shared-array-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" + integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== + dependencies: + call-bind "^1.0.2" + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" + +is-symbol@^1.0.2, is-symbol@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== + dependencies: + has-symbols "^1.0.2" + +is-typed-array@^1.1.10, is-typed-array@^1.1.9: + version "1.1.10" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" + integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + +is-typedarray@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakref@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-whitespace-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" + integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== + +is-word-character@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" + integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +jest-util@^29.5.0: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" + integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== + dependencies: + "@jest/types" "^29.5.0" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-worker@^27.4.5: + version "27.5.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-27.5.1.tgz#8d146f0900e8973b106b6f73cc1e9a8cb86f8db0" + integrity sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg== + dependencies: + "@types/node" "*" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest-worker@^29.1.2: + version "29.5.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" + integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + dependencies: + "@types/node" "*" + jest-util "^29.5.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +joi@^17.6.0: + version "17.9.1" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.1.tgz#74899b9fa3646904afa984a11df648eca66c9018" + integrity sha512-FariIi9j6QODKATGBrEX7HZcja8Bsh3rfdGYy/Sb65sGlZWK/QWesU1ghk7aJWDj95knjXlQfSmzFSPPkLVsfw== + dependencies: + "@hapi/hoek" "^9.0.0" + "@hapi/topo" "^5.0.0" + "@sideway/address" "^4.1.3" + "@sideway/formula" "^3.0.1" + "@sideway/pinpoint" "^2.0.0" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ== + +json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json5@^2.1.2, json5@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +khroma@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/khroma/-/khroma-2.0.0.tgz#7577de98aed9f36c7a474c4d453d94c0d6c6588b" + integrity sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g== + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +klona@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" + integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== + +latest-version@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +launch-editor@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/launch-editor/-/launch-editor-2.6.0.tgz#4c0c1a6ac126c572bd9ff9a30da1d2cae66defd7" + integrity sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ== + dependencies: + picocolors "^1.0.0" + shell-quote "^1.7.3" + +layout-base@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-1.0.2.tgz#1291e296883c322a9dd4c5dd82063721b53e26e2" + integrity sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg== + +layout-base@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/layout-base/-/layout-base-2.0.1.tgz#d0337913586c90f9c2c075292069f5c2da5dd285" + integrity sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +lilconfig@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52" + integrity sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +loader-runner@^4.2.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-4.3.0.tgz#c1b4a163b99f614830353b16755e7149ac2314e1" + integrity sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg== + +loader-utils@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.4.tgz#8b5cb38b5c34a9a018ee1fc0e6a066d1dfcc528c" + integrity sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" + +loader-utils@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-3.2.1.tgz#4fb104b599daafd82ef3e1a41fb9265f87e1f576" + integrity sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw== + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.curry@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.curry/-/lodash.curry-4.1.1.tgz#248e36072ede906501d75966200a86dab8b23170" + integrity sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.flow@^3.3.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/lodash.flow/-/lodash.flow-3.5.0.tgz#87bf40292b8cf83e4e8ce1a3ae4209e20071675a" + integrity sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw== + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.uniq@4.5.0, lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +lower-case@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.2.tgz#6fa237c63dbdc4a82ca0fd882e4722dc5e634e28" + integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== + dependencies: + tslib "^2.0.3" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^3.0.0, make-dir@^3.0.2, make-dir@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== + dependencies: + semver "^6.0.0" + +markdown-escapes@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" + integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== + +mdast-squeeze-paragraphs@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz#7c4c114679c3bee27ef10b58e2e015be79f1ef97" + integrity sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ== + dependencies: + unist-util-remove "^2.0.0" + +mdast-util-definitions@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz#c5c1a84db799173b4dcf7643cda999e440c24db2" + integrity sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ== + dependencies: + unist-util-visit "^2.0.0" + +mdast-util-to-hast@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" + integrity sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + mdast-util-definitions "^4.0.0" + mdurl "^1.0.0" + unist-builder "^2.0.0" + unist-util-generated "^1.0.0" + unist-util-position "^3.0.0" + unist-util-visit "^2.0.0" + +mdast-util-to-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" + integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== + +mdn-data@2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" + integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== + +mdn-data@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" + integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== + +mdurl@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== + +mdx-mermaid@^1.2.3: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz#9a9d335368de88f0c771daf12dde855bc6b67d57" + integrity sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memfs@^3.1.2, memfs@^3.4.3: + version "3.4.13" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345" + integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== + dependencies: + fs-monkey "^1.0.3" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +mermaid@^9.1.3: + version "9.4.3" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.4.3.tgz#62cf210c246b74972ea98c19837519b6f03427f2" + integrity sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw== + dependencies: + "@braintree/sanitize-url" "^6.0.0" + cytoscape "^3.23.0" + cytoscape-cose-bilkent "^4.1.0" + cytoscape-fcose "^2.1.0" + d3 "^7.4.0" + dagre-d3-es "7.0.9" + dayjs "^1.11.7" + dompurify "2.4.3" + elkjs "^0.8.2" + khroma "^2.0.0" + lodash-es "^4.17.21" + non-layered-tidy-tree-layout "^2.0.2" + stylis "^4.1.2" + ts-dedent "^2.2.0" + uuid "^9.0.0" + web-worker "^1.2.0" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0, "mime-db@>= 1.43.0 < 2": + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-db@~1.33.0: + version "1.33.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== + +mime-types@2.1.18: + version "2.1.18" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== + dependencies: + mime-db "~1.33.0" + +mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mini-css-extract-plugin@^2.6.1: + version "2.7.5" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5" + integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ== + dependencies: + schema-utils "^4.0.0" + +minimalistic-assert@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mri@^1.1.5: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" + integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== + +mrmime@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mrmime/-/mrmime-1.0.1.tgz#5f90c825fad4bdd41dc914eff5d1a8cfdaf24f27" + integrity sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multicast-dns@^7.2.5: + version "7.2.5" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-7.2.5.tgz#77eb46057f4d7adbd16d9290fa7299f6fa64cced" + integrity sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg== + dependencies: + dns-packet "^5.2.2" + thunky "^1.0.2" + +multimatch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-4.0.0.tgz#8c3c0f6e3e8449ada0af3dd29efb491a375191b3" + integrity sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ== + dependencies: + "@types/minimatch" "^3.0.3" + array-differ "^3.0.0" + array-union "^2.1.0" + arrify "^2.0.1" + minimatch "^3.0.4" + +nanoid@^3.3.4: + version "3.3.6" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" + integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +no-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.4.tgz#d361fd5c9800f558551a8369fc0dcd4662b6124d" + integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== + dependencies: + lower-case "^2.0.2" + tslib "^2.0.3" + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-fetch@2.6.7: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + +node-releases@^2.0.8: + version "2.0.10" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" + integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== + +non-layered-tidy-tree-layout@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz#57d35d13c356643fc296a55fb11ac15e74da7804" + integrity sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw== + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA== + +normalize-url@^4.1.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-run-path@^4.0.0, npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nprogress@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" + integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== + +nth-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" + integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== + dependencies: + boolbase "~1.0.0" + +nth-check@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" + integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w== + dependencies: + boolbase "^1.0.0" + +object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.12.3, object-inspect@^1.9.0: + version "1.12.3" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" + integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== + +object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0, object.assign@^4.1.4: + version "4.1.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" + integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + has-symbols "^1.0.3" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.1.0: + version "2.1.5" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" + integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== + dependencies: + array.prototype.reduce "^1.0.5" + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +object.values@^1.1.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" + integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +obuf@^1.0.0, obuf@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + integrity sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.0.9, open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +opener@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598" + integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A== + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-retry@^4.5.0: + version "4.6.2" + resolved "https://registry.yarnpkg.com/p-retry/-/p-retry-4.6.2.tgz#9baae7184057edd4e17231cee04264106e092a16" + integrity sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ== + dependencies: + "@types/retry" "0.12.0" + retry "^0.13.1" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +param-case@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.4.tgz#7d17fe4aa12bde34d4a77d91acfb6219caad01c5" + integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== + dependencies: + dot-case "^3.0.4" + tslib "^2.0.3" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-entities@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-2.0.0.tgz#53c6eb5b9314a1f4ec99fa0fdf7ce01ecda0cbe8" + integrity sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-json@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse-numeric-range@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz#7c63b61190d61e4d53a1197f0c83c47bb670ffa3" + integrity sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ== + +parse5-htmlparser2-tree-adapter@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" + integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + dependencies: + domhandler "^5.0.2" + parse5 "^7.0.0" + +parse5@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + +parse5@^7.0.0: + version "7.1.2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" + integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + dependencies: + entities "^4.4.0" + +parseurl@~1.3.2, parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +pascal-case@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.2.tgz#b48e0ef2b98e205e7c1dae747d0b1508237660eb" + integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== + dependencies: + no-case "^3.0.4" + tslib "^2.0.3" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +path-to-regexp@2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-2.2.1.tgz#90b617025a16381a879bc82a38d4e8bdeb2bcf45" + integrity sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ== + +path-to-regexp@^1.7.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" + integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== + dependencies: + isarray "0.0.1" + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +picocolors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" + integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-calc@^8.2.3: + version "8.2.4" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-8.2.4.tgz#77b9c29bfcbe8a07ff6693dc87050828889739a5" + integrity sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q== + dependencies: + postcss-selector-parser "^6.0.9" + postcss-value-parser "^4.2.0" + +postcss-colormin@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz#86c27c26ed6ba00d96c79e08f3ffb418d1d1988f" + integrity sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + colord "^2.9.1" + postcss-value-parser "^4.2.0" + +postcss-convert-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz#04998bb9ba6b65aa31035d669a6af342c5f9d393" + integrity sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-discard-comments@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz#8df5e81d2925af2780075840c1526f0660e53696" + integrity sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ== + +postcss-discard-duplicates@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz#9eb4fe8456706a4eebd6d3b7b777d07bad03e848" + integrity sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw== + +postcss-discard-empty@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz#e57762343ff7f503fe53fca553d18d7f0c369c6c" + integrity sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A== + +postcss-discard-overridden@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz#7e8c5b53325747e9d90131bb88635282fb4a276e" + integrity sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw== + +postcss-discard-unused@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz#8974e9b143d887677304e558c1166d3762501142" + integrity sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-loader@^7.0.0: + version "7.2.4" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.2.4.tgz#2884f4ca172de633b2cf1f93dc852968f0632ba9" + integrity sha512-F88rpxxNspo5hatIc+orYwZDtHFaVFOSIVAx+fBfJC1GmhWbVmPWtmg2gXKE1OxJbneOSGn8PWdIwsZFcruS+w== + dependencies: + cosmiconfig "^8.1.3" + cosmiconfig-typescript-loader "^4.3.0" + klona "^2.0.6" + semver "^7.3.8" + +postcss-merge-idents@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz#7753817c2e0b75d0853b56f78a89771e15ca04a1" + integrity sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-merge-longhand@^5.1.7: + version "5.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz#24a1bdf402d9ef0e70f568f39bdc0344d568fb16" + integrity sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ== + dependencies: + postcss-value-parser "^4.2.0" + stylehacks "^5.1.1" + +postcss-merge-rules@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz#2f26fa5cacb75b1402e213789f6766ae5e40313c" + integrity sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + cssnano-utils "^3.1.0" + postcss-selector-parser "^6.0.5" + +postcss-minify-font-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz#f1df0014a726083d260d3bd85d7385fb89d1f01b" + integrity sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-minify-gradients@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz#f1fe1b4f498134a5068240c2f25d46fcd236ba2c" + integrity sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw== + dependencies: + colord "^2.9.1" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-params@^5.1.4: + version "5.1.4" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz#c06a6c787128b3208b38c9364cfc40c8aa5d7352" + integrity sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw== + dependencies: + browserslist "^4.21.4" + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-minify-selectors@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz#d4e7e6b46147b8117ea9325a915a801d5fe656c6" + integrity sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-modules-extract-imports@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" + integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== + +postcss-modules-local-by-default@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" + integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== + dependencies: + icss-utils "^5.0.0" + postcss-selector-parser "^6.0.2" + postcss-value-parser "^4.1.0" + +postcss-modules-scope@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz#9ef3151456d3bbfa120ca44898dfca6f2fa01f06" + integrity sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg== + dependencies: + postcss-selector-parser "^6.0.4" + +postcss-modules-values@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz#d7c5e7e68c3bb3c9b27cbf48ca0bb3ffb4602c9c" + integrity sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ== + dependencies: + icss-utils "^5.0.0" + +postcss-normalize-charset@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz#9302de0b29094b52c259e9b2cf8dc0879879f0ed" + integrity sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg== + +postcss-normalize-display-values@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz#72abbae58081960e9edd7200fcf21ab8325c3da8" + integrity sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-positions@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz#ef97279d894087b59325b45c47f1e863daefbb92" + integrity sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-repeat-style@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz#e9eb96805204f4766df66fd09ed2e13545420fb2" + integrity sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-string@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz#411961169e07308c82c1f8c55f3e8a337757e228" + integrity sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-timing-functions@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz#d5614410f8f0b2388e9f240aa6011ba6f52dafbb" + integrity sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-normalize-unicode@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz#f67297fca3fea7f17e0d2caa40769afc487aa030" + integrity sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA== + dependencies: + browserslist "^4.21.4" + postcss-value-parser "^4.2.0" + +postcss-normalize-url@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz#ed9d88ca82e21abef99f743457d3729a042adcdc" + integrity sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew== + dependencies: + normalize-url "^6.0.1" + postcss-value-parser "^4.2.0" + +postcss-normalize-whitespace@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz#08a1a0d1ffa17a7cc6efe1e6c9da969cc4493cfa" + integrity sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-ordered-values@^5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz#b6fd2bd10f937b23d86bc829c69e7732ce76ea38" + integrity sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ== + dependencies: + cssnano-utils "^3.1.0" + postcss-value-parser "^4.2.0" + +postcss-reduce-idents@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz#c89c11336c432ac4b28792f24778859a67dfba95" + integrity sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-reduce-initial@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz#798cd77b3e033eae7105c18c9d371d989e1382d6" + integrity sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg== + dependencies: + browserslist "^4.21.4" + caniuse-api "^3.0.0" + +postcss-reduce-transforms@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz#333b70e7758b802f3dd0ddfe98bb1ccfef96b6e9" + integrity sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ== + dependencies: + postcss-value-parser "^4.2.0" + +postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: + version "6.0.11" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" + integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + dependencies: + cssesc "^3.0.0" + util-deprecate "^1.0.2" + +postcss-sort-media-queries@^4.2.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz#f48a77d6ce379e86676fc3f140cf1b10a06f6051" + integrity sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg== + dependencies: + sort-css-media-queries "2.1.0" + +postcss-svgo@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz#0a317400ced789f233a28826e77523f15857d80d" + integrity sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA== + dependencies: + postcss-value-parser "^4.2.0" + svgo "^2.7.0" + +postcss-unique-selectors@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz#a9f273d1eacd09e9aa6088f4b0507b18b1b541b6" + integrity sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA== + dependencies: + postcss-selector-parser "^6.0.5" + +postcss-value-parser@^4.1.0, postcss-value-parser@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514" + integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ== + +postcss-zindex@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" + integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== + +postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.19: + version "8.4.21" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" + integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== + dependencies: + nanoid "^3.3.4" + picocolors "^1.0.0" + source-map-js "^1.0.2" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== + +prettier@^2.6.2: + version "2.8.7" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" + integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== + +pretty-error@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-4.0.0.tgz#90a703f46dd7234adb46d0f84823e9d1cb8f10d6" + integrity sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw== + dependencies: + lodash "^4.17.20" + renderkid "^3.0.0" + +pretty-quick@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-3.1.3.tgz#15281108c0ddf446675157ca40240099157b638e" + integrity sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA== + dependencies: + chalk "^3.0.0" + execa "^4.0.0" + find-up "^4.1.0" + ignore "^5.1.4" + mri "^1.1.5" + multimatch "^4.0.0" + +pretty-time@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pretty-time/-/pretty-time-1.1.0.tgz#ffb7429afabb8535c346a34e41873adf3d74dd0e" + integrity sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA== + +prism-react-renderer@^1.2.1, prism-react-renderer@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz#786bb69aa6f73c32ba1ee813fbe17a0115435085" + integrity sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg== + +prismjs@^1.28.0: + version "1.29.0" + resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.29.0.tgz#f113555a8fa9b57c35e637bba27509dcf802dd12" + integrity sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +prop-types@^15.6.2, prop-types@^15.7.2: + version "15.8.1" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" + integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== + dependencies: + loose-envify "^1.4.0" + object-assign "^4.1.1" + react-is "^16.13.1" + +property-information@^5.0.0, property-information@^5.3.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-5.6.0.tgz#61675545fb23002f245c6540ec46077d4da3ed69" + integrity sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA== + dependencies: + xtend "^4.0.0" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^1.3.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ== + +punycode@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" + integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== + +pupa@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" + integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== + dependencies: + escape-goat "^2.0.0" + +pure-color@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" + integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.11.0: + version "6.11.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" + integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== + dependencies: + side-channel "^1.0.4" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +queue@6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/queue/-/queue-6.0.2.tgz#b91525283e2315c7553d2efa18d83e76432fed65" + integrity sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA== + dependencies: + inherits "~2.0.3" + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +range-parser@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A== + +range-parser@^1.2.1, range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@1.2.8, rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-base16-styling@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/react-base16-styling/-/react-base16-styling-0.6.0.tgz#ef2156d66cf4139695c8a167886cb69ea660792c" + integrity sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ== + dependencies: + base16 "^1.0.0" + lodash.curry "^4.0.1" + lodash.flow "^3.3.0" + pure-color "^1.2.0" + +react-countup@^6.4.0: + version "6.4.2" + resolved "https://registry.yarnpkg.com/react-countup/-/react-countup-6.4.2.tgz#cf8564c9381958a36c7c25f7c0769f7a472e4c99" + integrity sha512-wdDrNb2lPFGbLb+i0FTgswPbWziubS6KZRII8NRpXmUCoZsi15PFbIHgBz60Dyxd4KPuRvwsK5aawIU4OPP3jA== + dependencies: + "@rollup/plugin-babel" "^6.0.3" + countup.js "^2.5.0" + +react-dev-utils@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-12.0.1.tgz#ba92edb4a1f379bd46ccd6bcd4e7bc398df33e73" + integrity sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ== + dependencies: + "@babel/code-frame" "^7.16.0" + address "^1.1.2" + browserslist "^4.18.1" + chalk "^4.1.2" + cross-spawn "^7.0.3" + detect-port-alt "^1.1.6" + escape-string-regexp "^4.0.0" + filesize "^8.0.6" + find-up "^5.0.0" + fork-ts-checker-webpack-plugin "^6.5.0" + global-modules "^2.0.0" + globby "^11.0.4" + gzip-size "^6.0.0" + immer "^9.0.7" + is-root "^2.1.0" + loader-utils "^3.2.0" + open "^8.4.0" + pkg-up "^3.1.0" + prompts "^2.4.2" + react-error-overlay "^6.0.11" + recursive-readdir "^2.2.2" + shell-quote "^1.7.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +react-dom@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" + integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + scheduler "^0.20.2" + +react-error-overlay@^6.0.11: + version "6.0.11" + resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.11.tgz#92835de5841c5cf08ba00ddd2d677b6d17ff9adb" + integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== + +react-fast-compare@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.1.tgz#53933d9e14f364281d6cba24bfed7a4afb808b5f" + integrity sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg== + +react-helmet-async@*, react-helmet-async@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/react-helmet-async/-/react-helmet-async-1.3.0.tgz#7bd5bf8c5c69ea9f02f6083f14ce33ef545c222e" + integrity sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg== + dependencies: + "@babel/runtime" "^7.12.5" + invariant "^2.2.4" + prop-types "^15.7.2" + react-fast-compare "^3.2.0" + shallowequal "^1.1.0" + +react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + +react-json-view@^1.21.3: + version "1.21.3" + resolved "https://registry.yarnpkg.com/react-json-view/-/react-json-view-1.21.3.tgz#f184209ee8f1bf374fb0c41b0813cff54549c475" + integrity sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw== + dependencies: + flux "^4.0.1" + react-base16-styling "^0.6.0" + react-lifecycles-compat "^3.0.4" + react-textarea-autosize "^8.3.2" + +react-lifecycles-compat@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" + integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== + +react-loadable-ssr-addon-v5-slorber@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz#2cdc91e8a744ffdf9e3556caabeb6e4278689883" + integrity sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A== + dependencies: + "@babel/runtime" "^7.10.3" + +react-router-config@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/react-router-config/-/react-router-config-5.1.1.tgz#0f4263d1a80c6b2dc7b9c1902c9526478194a988" + integrity sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg== + dependencies: + "@babel/runtime" "^7.1.2" + +react-router-dom@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router-dom/-/react-router-dom-5.3.4.tgz#2ed62ffd88cae6db134445f4a0c0ae8b91d2e5e6" + integrity sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + loose-envify "^1.3.1" + prop-types "^15.6.2" + react-router "5.3.4" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-router@5.3.4, react-router@^5.3.3: + version "5.3.4" + resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.3.4.tgz#8ca252d70fcc37841e31473c7a151cf777887bb5" + integrity sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA== + dependencies: + "@babel/runtime" "^7.12.13" + history "^4.9.0" + hoist-non-react-statics "^3.1.0" + loose-envify "^1.3.1" + path-to-regexp "^1.7.0" + prop-types "^15.6.2" + react-is "^16.6.0" + tiny-invariant "^1.0.2" + tiny-warning "^1.0.0" + +react-textarea-autosize@^8.3.2: + version "8.4.1" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz#bcfc5462727014b808b14ee916c01e275e8a8335" + integrity sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q== + dependencies: + "@babel/runtime" "^7.20.13" + use-composed-ref "^1.3.0" + use-latest "^1.2.1" + +react@^17.0.1: + version "17.0.2" + resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" + integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +readable-stream@^2.0.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^3.0.6: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +reading-time@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/reading-time/-/reading-time-1.5.0.tgz#d2a7f1b6057cb2e169beaf87113cc3411b5bc5bb" + integrity sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg== + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +regenerate-unicode-properties@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz#7c3192cab6dd24e21cb4461e5ddd7dd24fa8374c" + integrity sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regenerator-runtime@^0.13.11: + version "0.13.11" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" + integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== + +regenerator-transform@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" + integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== + dependencies: + "@babel/runtime" "^7.8.4" + +regexp.prototype.flags@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + +regexpu-core@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" + integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== + dependencies: + "@babel/regjsgen" "^0.8.0" + regenerate "^1.4.2" + regenerate-unicode-properties "^10.1.0" + regjsparser "^0.9.1" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +registry-auth-token@^4.0.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.2.tgz#f02d49c3668884612ca031419491a13539e21fac" + integrity sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg== + dependencies: + rc "1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsparser@^0.9.1: + version "0.9.1" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" + integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== + dependencies: + jsesc "~0.5.0" + +relateurl@^0.2.7: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== + +remark-emoji@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/remark-emoji/-/remark-emoji-2.2.0.tgz#1c702090a1525da5b80e15a8f963ef2c8236cac7" + integrity sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w== + dependencies: + emoticon "^3.2.0" + node-emoji "^1.10.0" + unist-util-visit "^2.0.3" + +remark-footnotes@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/remark-footnotes/-/remark-footnotes-2.0.0.tgz#9001c4c2ffebba55695d2dd80ffb8b82f7e6303f" + integrity sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ== + +remark-mdx@1.6.22: + version "1.6.22" + resolved "https://registry.yarnpkg.com/remark-mdx/-/remark-mdx-1.6.22.tgz#06a8dab07dcfdd57f3373af7f86bd0e992108bbd" + integrity sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ== + dependencies: + "@babel/core" "7.12.9" + "@babel/helper-plugin-utils" "7.10.4" + "@babel/plugin-proposal-object-rest-spread" "7.12.1" + "@babel/plugin-syntax-jsx" "7.12.1" + "@mdx-js/util" "1.6.22" + is-alphabetical "1.0.4" + remark-parse "8.0.3" + unified "9.2.0" + +remark-parse@8.0.3: + version "8.0.3" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-8.0.3.tgz#9c62aa3b35b79a486454c690472906075f40c7e1" + integrity sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q== + dependencies: + ccount "^1.0.0" + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^2.0.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^2.0.0" + vfile-location "^3.0.0" + xtend "^4.0.1" + +remark-squeeze-paragraphs@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz#76eb0e085295131c84748c8e43810159c5653ead" + integrity sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw== + dependencies: + mdast-squeeze-paragraphs "^4.0.0" + +renderkid@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-3.0.0.tgz#5fd823e4d6951d37358ecc9a58b1f06836b6268a" + integrity sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg== + dependencies: + css-select "^4.1.3" + dom-converter "^0.2.0" + htmlparser2 "^6.1.0" + lodash "^4.17.21" + strip-ansi "^6.0.1" + +repeat-string@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +"require-like@>= 0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/require-like/-/require-like-0.1.2.tgz#ad6f30c13becd797010c468afa775c0c0a6b47fa" + integrity sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-pathname@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-pathname/-/resolve-pathname-3.0.0.tgz#99d02224d3cf263689becbb393bc560313025dcd" + integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== + +resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: + version "1.22.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + dependencies: + is-core-module "^2.9.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ== + dependencies: + lowercase-keys "^1.0.0" + +retry@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.13.1.tgz#185b1587acf67919d63b357349e03537b2484658" + integrity sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg== + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +robust-predicates@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" + integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== + +rtl-detect@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/rtl-detect/-/rtl-detect-1.0.4.tgz#40ae0ea7302a150b96bc75af7d749607392ecac6" + integrity sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ== + +rtlcss@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/rtlcss/-/rtlcss-3.5.0.tgz#c9eb91269827a102bac7ae3115dd5d049de636c3" + integrity sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A== + dependencies: + find-up "^5.0.0" + picocolors "^1.0.0" + postcss "^8.3.11" + strip-json-comments "^3.1.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +rw@1: + version "1.3.3" + resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== + +rxjs@^7.5.4: + version "7.8.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" + integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + dependencies: + tslib "^2.1.0" + +safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-regex-test@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" + integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.3" + is-regex "^1.1.4" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@^1.2.4, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +scheduler@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + +schema-utils@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== + dependencies: + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" + ajv-keywords "^3.4.1" + +schema-utils@^2.6.5: + version "2.7.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" + integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== + dependencies: + "@types/json-schema" "^7.0.5" + ajv "^6.12.4" + ajv-keywords "^3.5.2" + +schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" + integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== + dependencies: + "@types/json-schema" "^7.0.8" + ajv "^6.12.5" + ajv-keywords "^3.5.2" + +schema-utils@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" + integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + dependencies: + "@types/json-schema" "^7.0.9" + ajv "^8.8.0" + ajv-formats "^2.1.1" + ajv-keywords "^5.0.0" + +section-matter@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/section-matter/-/section-matter-1.0.0.tgz#e9041953506780ec01d59f292a19c7b850b84167" + integrity sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA== + dependencies: + extend-shallow "^2.0.1" + kind-of "^6.0.0" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + integrity sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg== + +selfsigned@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-2.1.1.tgz#18a7613d714c0cd3385c48af0075abf3f266af61" + integrity sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ== + dependencies: + node-forge "^1" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver@^5.4.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: + version "7.3.8" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" + integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + dependencies: + lru-cache "^6.0.0" + +send@0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serialize-javascript@^6.0.0, serialize-javascript@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" + integrity sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w== + dependencies: + randombytes "^2.1.0" + +serve-handler@^6.1.3: + version "6.1.5" + resolved "https://registry.yarnpkg.com/serve-handler/-/serve-handler-6.1.5.tgz#a4a0964f5c55c7e37a02a633232b6f0d6f068375" + integrity sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg== + dependencies: + bytes "3.0.0" + content-disposition "0.5.2" + fast-url-parser "1.1.3" + mime-types "2.1.18" + minimatch "3.1.2" + path-is-inside "1.0.2" + path-to-regexp "2.2.1" + range-parser "1.2.0" + +serve-index@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw== + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.15.0: + version "1.15.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.18.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shallow-clone@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" + integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== + dependencies: + kind-of "^6.0.2" + +shallowequal@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" + integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +shell-quote@^1.7.3: + version "1.8.0" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" + integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== + +shelljs@^0.8.5: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== + dependencies: + call-bind "^1.0.0" + get-intrinsic "^1.0.2" + object-inspect "^1.9.0" + +signal-exit@^3.0.2, signal-exit@^3.0.3: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +sirv@^1.0.7: + version "1.0.19" + resolved "https://registry.yarnpkg.com/sirv/-/sirv-1.0.19.tgz#1d73979b38c7fe91fcba49c85280daa9c2363b49" + integrity sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ== + dependencies: + "@polka/url" "^1.0.0-next.20" + mrmime "^1.0.0" + totalist "^1.0.0" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +sitemap@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sitemap/-/sitemap-7.1.1.tgz#eeed9ad6d95499161a3eadc60f8c6dce4bea2bef" + integrity sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg== + dependencies: + "@types/node" "^17.0.5" + "@types/sax" "^1.2.1" + arg "^5.0.0" + sax "^1.2.4" + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slash@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7" + integrity sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew== + +sockjs@^0.3.24: + version "0.3.24" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.24.tgz#c9bc8995f33a111bea0395ec30aa3206bdb5ccce" + integrity sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ== + dependencies: + faye-websocket "^0.11.3" + uuid "^8.3.2" + websocket-driver "^0.7.4" + +sort-css-media-queries@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" + integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== + +source-map-js@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" + integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== + +source-map-support@~0.5.20: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.5.0: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +space-separated-tokens@^1.0.0: + version "1.1.5" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" + integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== + +spdy-transport@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" + integrity sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw== + dependencies: + debug "^4.1.0" + detect-node "^2.0.4" + hpack.js "^2.1.6" + obuf "^1.1.2" + readable-stream "^3.0.6" + wbuf "^1.7.3" + +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== + dependencies: + debug "^4.1.0" + handle-thing "^2.0.0" + http-deceiver "^1.2.7" + select-hose "^2.0.0" + spdy-transport "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stable@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + +state-toggle@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" + integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +"statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +std-env@^3.0.1: + version "3.3.2" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.2.tgz#af27343b001616015534292178327b202b9ee955" + integrity sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA== + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" + integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== + dependencies: + eastasianwidth "^0.2.0" + emoji-regex "^9.2.2" + strip-ansi "^7.0.1" + +string.prototype.trim@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" + integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimend@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" + integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string.prototype.trimstart@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" + integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.4" + es-abstract "^1.20.4" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +stringify-object@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" + integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== + dependencies: + get-own-enumerable-property-symbols "^3.0.0" + is-obj "^1.0.1" + is-regexp "^1.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + dependencies: + ansi-regex "^6.0.1" + +strip-bom-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +style-to-object@0.3.0, style-to-object@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/style-to-object/-/style-to-object-0.3.0.tgz#b1b790d205991cc783801967214979ee19a76e46" + integrity sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA== + dependencies: + inline-style-parser "0.1.1" + +stylehacks@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-5.1.1.tgz#7934a34eb59d7152149fa69d6e9e56f2fc34bcc9" + integrity sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw== + dependencies: + browserslist "^4.21.4" + postcss-selector-parser "^6.0.4" + +stylis@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" + integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +svg-parser@^2.0.2, svg-parser@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" + integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== + +svgo@^1.2.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" + integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== + dependencies: + chalk "^2.4.1" + coa "^2.0.2" + css-select "^2.0.0" + css-select-base-adapter "^0.1.1" + css-tree "1.0.0-alpha.37" + csso "^4.0.2" + js-yaml "^3.13.1" + mkdirp "~0.5.1" + object.values "^1.1.0" + sax "~1.2.4" + stable "^0.1.8" + unquote "~1.1.1" + util.promisify "~1.0.0" + +svgo@^2.7.0, svgo@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" + integrity sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^4.1.3" + css-tree "^1.1.3" + csso "^4.2.0" + picocolors "^1.0.0" + stable "^0.1.8" + +tapable@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" + integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== + +tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" + integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== + +terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: + version "5.3.7" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" + integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.17" + jest-worker "^27.4.5" + schema-utils "^3.1.1" + serialize-javascript "^6.0.1" + terser "^5.16.5" + +terser@^5.10.0, terser@^5.16.5: + version "5.16.8" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.8.tgz#ccde583dabe71df3f4ed02b65eb6532e0fae15d5" + integrity sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA== + dependencies: + "@jridgewell/source-map" "^0.3.2" + acorn "^8.5.0" + commander "^2.20.0" + source-map-support "~0.5.20" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thunky@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" + integrity sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA== + +tiny-invariant@^1.0.2: + version "1.3.1" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.3.1.tgz#8560808c916ef02ecfd55e66090df23a4b7aa642" + integrity sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw== + +tiny-warning@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +totalist@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/totalist/-/totalist-1.1.0.tgz#a4d65a3e546517701e3e5c37a47a70ac97fe56df" + integrity sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g== + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-trailing-lines@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" + integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== + +trough@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" + integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== + +ts-dedent@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ts-dedent/-/ts-dedent-2.2.0.tgz#39e4bd297cd036292ae2394eb3412be63f563bb5" + integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== + +tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" + integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^2.5.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-2.19.0.tgz#88068015bb33036a598b952e55e9311a60fd3a9b" + integrity sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typed-array-length@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" + integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== + dependencies: + call-bind "^1.0.2" + for-each "^0.3.3" + is-typed-array "^1.1.9" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +ua-parser-js@^0.7.30: + version "0.7.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" + integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== + +unbox-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" + integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== + dependencies: + call-bind "^1.0.2" + has-bigints "^1.0.2" + has-symbols "^1.0.3" + which-boxed-primitive "^1.0.2" + +unherit@^1.0.4: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" + integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== + dependencies: + inherits "^2.0.0" + xtend "^4.0.0" + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" + integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" + integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +unified@9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.0.tgz#67a62c627c40589edebbf60f53edfd4d822027f8" + integrity sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unified@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/unified/-/unified-9.2.2.tgz#67649a1abfc3ab85d2969502902775eb03146975" + integrity sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-buffer "^2.0.0" + is-plain-obj "^2.0.0" + trough "^1.0.0" + vfile "^4.0.0" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +unist-builder@2.0.3, unist-builder@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-2.0.3.tgz#77648711b5d86af0942f334397a33c5e91516436" + integrity sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw== + +unist-util-generated@^1.0.0: + version "1.1.6" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.6.tgz#5ab51f689e2992a472beb1b35f2ce7ff2f324d4b" + integrity sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg== + +unist-util-is@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-4.1.0.tgz#976e5f462a7a5de73d94b706bac1b90671b57797" + integrity sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg== + +unist-util-position@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" + integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== + +unist-util-remove-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz#5d19ca79fdba712301999b2b73553ca8f3b352cc" + integrity sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA== + dependencies: + unist-util-visit "^2.0.0" + +unist-util-remove@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unist-util-remove/-/unist-util-remove-2.1.0.tgz#b0b4738aa7ee445c402fda9328d604a02d010588" + integrity sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q== + dependencies: + unist-util-is "^4.0.0" + +unist-util-stringify-position@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" + integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" + integrity sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + +unist-util-visit@2.0.3, unist-util-visit@^2.0.0, unist-util-visit@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-2.0.3.tgz#c3703893146df47203bb8a9795af47d7b971208c" + integrity sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q== + dependencies: + "@types/unist" "^2.0.0" + unist-util-is "^4.0.0" + unist-util-visit-parents "^3.0.0" + +universalify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" + integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +unquote@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" + integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== + +update-browserslist-db@^1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" + integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== + dependencies: + escalade "^3.1.1" + picocolors "^1.0.0" + +update-notifier@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-5.1.0.tgz#4ab0d7c7f36a231dd7316cf7729313f0214d9ad9" + integrity sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw== + dependencies: + boxen "^5.0.0" + chalk "^4.1.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.4.0" + is-npm "^5.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.1.0" + pupa "^2.1.1" + semver "^7.3.4" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-loader@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.1.tgz#28505e905cae158cf07c92ca622d7f237e70a4e2" + integrity sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA== + dependencies: + loader-utils "^2.0.0" + mime-types "^2.1.27" + schema-utils "^3.0.0" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ== + dependencies: + prepend-http "^2.0.0" + +use-composed-ref@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/use-composed-ref/-/use-composed-ref-1.3.0.tgz#3d8104db34b7b264030a9d916c5e94fbe280dbda" + integrity sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ== + +use-isomorphic-layout-effect@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz#497cefb13d863d687b08477d9e5a164ad8c1a6fb" + integrity sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA== + +use-latest@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/use-latest/-/use-latest-1.2.1.tgz#d13dfb4b08c28e3e33991546a2cee53e14038cf2" + integrity sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw== + dependencies: + use-isomorphic-layout-effect "^1.1.1" + +use-sync-external-store@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util.promisify@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" + integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.2" + has-symbols "^1.0.1" + object.getownpropertydescriptors "^2.1.0" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA== + +utility-types@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/utility-types/-/utility-types-3.10.0.tgz#ea4148f9a741015f05ed74fd615e1d20e6bed82b" + integrity sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +uuid@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" + integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== + +value-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" + integrity sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw== + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +vfile-location@^3.0.0, vfile-location@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-3.2.0.tgz#d8e41fbcbd406063669ebf6c33d56ae8721d0f3c" + integrity sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA== + +vfile-message@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.4.tgz#5b43b88171d409eae58477d13f23dd41d52c371a" + integrity sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ== + dependencies: + "@types/unist" "^2.0.0" + unist-util-stringify-position "^2.0.0" + +vfile@^4.0.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.2.1.tgz#03f1dce28fc625c625bc6514350fbdb00fa9e624" + integrity sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +wait-on@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/wait-on/-/wait-on-6.0.1.tgz#16bbc4d1e4ebdd41c5b4e63a2e16dbd1f4e5601e" + integrity sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw== + dependencies: + axios "^0.25.0" + joi "^17.6.0" + lodash "^4.17.21" + minimist "^1.2.5" + rxjs "^7.5.4" + +watchpack@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.4.0.tgz#fa33032374962c78113f93c7f2fb4c54c9862a5d" + integrity sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + +wbuf@^1.1.0, wbuf@^1.7.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + integrity sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA== + dependencies: + minimalistic-assert "^1.0.0" + +web-namespaces@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.4.tgz#bc98a3de60dadd7faefc403d1076d529f5e030ec" + integrity sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw== + +web-worker@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/web-worker/-/web-worker-1.2.0.tgz#5d85a04a7fbc1e7db58f66595d7a3ac7c9c180da" + integrity sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA== + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webpack-bundle-analyzer@^4.5.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" + integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== + dependencies: + "@discoveryjs/json-ext" "0.5.7" + acorn "^8.0.4" + acorn-walk "^8.0.0" + chalk "^4.1.0" + commander "^7.2.0" + gzip-size "^6.0.0" + lodash "^4.17.20" + opener "^1.5.2" + sirv "^1.0.7" + ws "^7.3.1" + +webpack-dev-middleware@^5.3.1: + version "5.3.3" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz#efae67c2793908e7311f1d9b06f2a08dcc97e51f" + integrity sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA== + dependencies: + colorette "^2.0.10" + memfs "^3.4.3" + mime-types "^2.1.31" + range-parser "^1.2.1" + schema-utils "^4.0.0" + +webpack-dev-server@^4.9.3: + version "4.13.2" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz#d97445481d78691efe6d9a3b230833d802fc31f9" + integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== + dependencies: + "@types/bonjour" "^3.5.9" + "@types/connect-history-api-fallback" "^1.3.5" + "@types/express" "^4.17.13" + "@types/serve-index" "^1.9.1" + "@types/serve-static" "^1.13.10" + "@types/sockjs" "^0.3.33" + "@types/ws" "^8.5.1" + ansi-html-community "^0.0.8" + bonjour-service "^1.0.11" + chokidar "^3.5.3" + colorette "^2.0.10" + compression "^1.7.4" + connect-history-api-fallback "^2.0.0" + default-gateway "^6.0.3" + express "^4.17.3" + graceful-fs "^4.2.6" + html-entities "^2.3.2" + http-proxy-middleware "^2.0.3" + ipaddr.js "^2.0.1" + launch-editor "^2.6.0" + open "^8.0.9" + p-retry "^4.5.0" + rimraf "^3.0.2" + schema-utils "^4.0.0" + selfsigned "^2.1.1" + serve-index "^1.9.1" + sockjs "^0.3.24" + spdy "^4.0.2" + webpack-dev-middleware "^5.3.1" + ws "^8.13.0" + +webpack-merge@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" + integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + dependencies: + clone-deep "^4.0.1" + wildcard "^2.0.0" + +webpack-sources@^3.2.2, webpack-sources@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.2.3.tgz#2d4daab8451fd4b240cc27055ff6a0c2ccea0cde" + integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== + +webpack@^5.73.0: + version "5.77.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.77.0.tgz#dea3ad16d7ea6b84aa55fa42f4eac9f30e7eb9b4" + integrity sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q== + dependencies: + "@types/eslint-scope" "^3.7.3" + "@types/estree" "^0.0.51" + "@webassemblyjs/ast" "1.11.1" + "@webassemblyjs/wasm-edit" "1.11.1" + "@webassemblyjs/wasm-parser" "1.11.1" + acorn "^8.7.1" + acorn-import-assertions "^1.7.6" + browserslist "^4.14.5" + chrome-trace-event "^1.0.2" + enhanced-resolve "^5.10.0" + es-module-lexer "^0.9.0" + eslint-scope "5.1.1" + events "^3.2.0" + glob-to-regexp "^0.4.1" + graceful-fs "^4.2.9" + json-parse-even-better-errors "^2.3.1" + loader-runner "^4.2.0" + mime-types "^2.1.27" + neo-async "^2.6.2" + schema-utils "^3.1.0" + tapable "^2.1.1" + terser-webpack-plugin "^5.1.3" + watchpack "^2.4.0" + webpack-sources "^3.2.3" + +webpackbar@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/webpackbar/-/webpackbar-5.0.2.tgz#d3dd466211c73852741dfc842b7556dcbc2b0570" + integrity sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ== + dependencies: + chalk "^4.1.0" + consola "^2.15.3" + pretty-time "^1.1.0" + std-env "^3.0.1" + +websocket-driver@>=0.5.1, websocket-driver@^0.7.4: + version "0.7.4" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.4.tgz#89ad5295bbf64b480abcba31e4953aca706f5760" + integrity sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg== + dependencies: + http-parser-js ">=0.5.1" + safe-buffer ">=5.1.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz#7f8473bc839dfd87608adb95d7eb075211578a42" + integrity sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + +which-typed-array@^1.1.9: + version "1.1.9" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" + integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== + dependencies: + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + for-each "^0.3.3" + gopd "^1.0.1" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.10" + +which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +widest-line@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-4.0.1.tgz#a0fc673aaba1ea6f0a0d35b3c2795c9a9cc2ebf2" + integrity sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig== + dependencies: + string-width "^5.0.1" + +wildcard@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" + integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^8.0.1: + version "8.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" + integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== + dependencies: + ansi-styles "^6.1.0" + string-width "^5.0.1" + strip-ansi "^7.0.1" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@^7.3.1: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +ws@^8.13.0: + version "8.13.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.13.0.tgz#9a9fb92f93cf41512a0735c8f4dd09b8a1211cd0" + integrity sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA== + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml-js@^1.6.11: + version "1.6.11" + resolved "https://registry.yarnpkg.com/xml-js/-/xml-js-1.6.11.tgz#927d2f6947f7f1c19a316dd8eea3614e8b18f8e9" + integrity sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g== + dependencies: + sax "^1.2.4" + +xtend@^4.0.0, xtend@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.10.0, yaml@^1.10.2, yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zwitch@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.5.tgz#d11d7381ffed16b742f6af7b3f223d5cd9fe9920" + integrity sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw== From 002f166c65b9ad45f9ec174670e762f720925739 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 15:42:56 +0200 Subject: [PATCH 228/665] update dependencies --- package.json | 8 +- yarn.lock | 803 ++++++++++++--------------------------------------- 2 files changed, 187 insertions(+), 624 deletions(-) diff --git a/package.json b/package.json index c12422a7f1e..12bb4c8a297 100644 --- a/package.json +++ b/package.json @@ -17,17 +17,17 @@ "@docusaurus/core": "^2.2.0", "@docusaurus/preset-classic": "^2.2.0", "@mdx-js/react": "^1.6.21", - "@svgr/webpack": "^5.5.0", + "@svgr/webpack": "^7.0.0", "clsx": "^1.1.1", "file-loader": "^6.2.0", "mdx-mermaid": "^1.2.3", - "mermaid": "^9.1.3", + "mermaid": "^10.1.0", "prettier": "^2.6.2", "pretty-quick": "^3.1.3", "prism-react-renderer": "^1.2.1", - "react": "^17.0.1", + "react": "^18.2.0", "react-countup": "^6.4.0", - "react-dom": "^17.0.1", + "react-dom": "^18.2.0", "url-loader": "^4.1.1" }, "browserslist": { diff --git a/yarn.lock b/yarn.lock index c6f06f36c54..6452807f7eb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -172,7 +172,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.12.3", "@babel/core@^7.18.6", "@babel/core@^7.19.6": +"@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.21.3": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== @@ -891,7 +891,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.18.12": +"@babel/plugin-transform-react-constant-elements@^7.18.12", "@babel/plugin-transform-react-constant-elements@^7.21.3": version "7.21.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== @@ -1019,7 +1019,7 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4": +"@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.20.2": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== @@ -1111,7 +1111,7 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.18.6": +"@babel/preset-react@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== @@ -1123,7 +1123,7 @@ "@babel/plugin-transform-react-jsx-development" "^7.18.6" "@babel/plugin-transform-react-pure-annotations" "^7.18.6" -"@babel/preset-typescript@^7.18.6": +"@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.21.0": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529" integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A== @@ -1179,7 +1179,7 @@ debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.6", "@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.4", "@babel/types@^7.4.4": +"@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.3", "@babel/types@^7.21.4", "@babel/types@^7.4.4": version "7.21.4" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== @@ -1708,6 +1708,13 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@khanacademy/simple-markdown@^0.8.6": + version "0.8.6" + resolved "https://registry.yarnpkg.com/@khanacademy/simple-markdown/-/simple-markdown-0.8.6.tgz#9c9aef1f5ce2ce60292d13849165965a57c26f25" + integrity sha512-mAUlR9lchzfqunR89pFvNI51jQKsMpJeWYsYWw0DQcUXczn/T/V6510utgvm7X0N3zN87j1SvuKk8cMbl9IAFw== + dependencies: + "@types/react" ">=16.0.0" + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -1827,99 +1834,75 @@ p-map "^4.0.0" webpack-sources "^3.2.2" -"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" - integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== - "@svgr/babel-plugin-add-jsx-attribute@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz#74a5d648bd0347bda99d82409d87b8ca80b9a1ba" integrity sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ== -"@svgr/babel-plugin-remove-jsx-attribute@*": +"@svgr/babel-plugin-add-jsx-attribute@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz#80856c1b7a3b7422d232f6e079f0beb90c4a13e9" + integrity sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q== + +"@svgr/babel-plugin-remove-jsx-attribute@*", "@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== -"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" - integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== - -"@svgr/babel-plugin-remove-jsx-empty-expression@*": +"@svgr/babel-plugin-remove-jsx-empty-expression@*", "@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== -"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" - integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== - -"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" - integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== - "@svgr/babel-plugin-replace-jsx-attribute-value@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz#fb9d22ea26d2bc5e0a44b763d4c46d5d3f596c60" integrity sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg== -"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" - integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== +"@svgr/babel-plugin-replace-jsx-attribute-value@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-7.0.0.tgz#7e72f44ee57fdbcb02fb0d4a7629466c5242725e" + integrity sha512-i6MaAqIZXDOJeikJuzocByBf8zO+meLwfQ/qMHIjCcvpnfvWf82PFvredEZElErB5glQFJa2KVKk8N2xV6tRRA== "@svgr/babel-plugin-svg-dynamic-title@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz#01b2024a2b53ffaa5efceaa0bf3e1d5a4c520ce4" integrity sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw== -"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" - integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== +"@svgr/babel-plugin-svg-dynamic-title@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-7.0.0.tgz#8caf0449c678ea29be756b89960b2b16c9f33f00" + integrity sha512-BoVSh6ge3SLLpKC0pmmN9DFlqgFy4NxNgdZNLPNJWBUU7TQpDWeBuyVuDW88iXydb5Cv0ReC+ffa5h3VrKfk1w== "@svgr/babel-plugin-svg-em-dimensions@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz#dd3fa9f5b24eb4f93bcf121c3d40ff5facecb217" integrity sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA== -"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" - integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== +"@svgr/babel-plugin-svg-em-dimensions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-7.0.0.tgz#4db6b5af6d29e93db236b1a013fa953754071d41" + integrity sha512-tNDcBa+hYn0gO+GkP/AuNKdVtMufVhU9fdzu+vUQsR18RIJ9RWe7h/pSBY338RO08wArntwbDk5WhQBmhf2PaA== "@svgr/babel-plugin-transform-react-native-svg@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz#1d8e945a03df65b601551097d8f5e34351d3d305" integrity sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg== -"@svgr/babel-plugin-transform-svg-component@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" - integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== +"@svgr/babel-plugin-transform-react-native-svg@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-7.0.0.tgz#236995e58b5e36ff06365d5310509ce5391aeec9" + integrity sha512-qw54u8ljCJYL2KtBOjI5z7Nzg8LnSvQOP5hPKj77H4VQL4+HdKbAT5pnkkZLmHKYwzsIHSYKXxHouD8zZamCFQ== "@svgr/babel-plugin-transform-svg-component@^6.5.1": version "6.5.1" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz#48620b9e590e25ff95a80f811544218d27f8a250" integrity sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ== -"@svgr/babel-preset@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" - integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== - dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" - "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" - "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" - "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" - "@svgr/babel-plugin-transform-svg-component" "^5.5.0" +"@svgr/babel-plugin-transform-svg-component@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-7.0.0.tgz#a9b62730acf10d22a2aa57e0f701c0ecbc270430" + integrity sha512-CcFECkDj98daOg9jE3Bh3uyD9kzevCAnZ+UtzG6+BQG/jOQ2OA3jHnX6iG4G1MCJkUQFnUvEv33NvQfqrb/F3A== "@svgr/babel-preset@^6.5.1": version "6.5.1" @@ -1935,14 +1918,19 @@ "@svgr/babel-plugin-transform-react-native-svg" "^6.5.1" "@svgr/babel-plugin-transform-svg-component" "^6.5.1" -"@svgr/core@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" - integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== - dependencies: - "@svgr/plugin-jsx" "^5.5.0" - camelcase "^6.2.0" - cosmiconfig "^7.0.0" +"@svgr/babel-preset@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-7.0.0.tgz#55aaca4cec2ff6515a571715b6b6fa98675b66d9" + integrity sha512-EX/NHeFa30j5UjldQGVQikuuQNHUdGmbh9kEpBKofGUtF0GUPJ4T4rhoYiqDAOmBOxojyot36JIFiDUHUK1ilQ== + dependencies: + "@svgr/babel-plugin-add-jsx-attribute" "^7.0.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^7.0.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^7.0.0" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^7.0.0" + "@svgr/babel-plugin-svg-dynamic-title" "^7.0.0" + "@svgr/babel-plugin-svg-em-dimensions" "^7.0.0" + "@svgr/babel-plugin-transform-react-native-svg" "^7.0.0" + "@svgr/babel-plugin-transform-svg-component" "^7.0.0" "@svgr/core@^6.5.1": version "6.5.1" @@ -1955,12 +1943,15 @@ camelcase "^6.2.0" cosmiconfig "^7.0.1" -"@svgr/hast-util-to-babel-ast@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" - integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== +"@svgr/core@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-7.0.0.tgz#def863d2670c682615583c80b408e83c095c2233" + integrity sha512-ztAoxkaKhRVloa3XydohgQQCb0/8x9T63yXovpmHzKMkHO6pkjdsIAWKOS4bE95P/2quVh1NtjSKlMRNzSBffw== dependencies: - "@babel/types" "^7.12.6" + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "^7.0.0" + camelcase "^6.2.0" + cosmiconfig "^8.1.3" "@svgr/hast-util-to-babel-ast@^6.5.1": version "6.5.1" @@ -1970,15 +1961,13 @@ "@babel/types" "^7.20.0" entities "^4.4.0" -"@svgr/plugin-jsx@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" - integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== +"@svgr/hast-util-to-babel-ast@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-7.0.0.tgz#d457dfbe74ebc1e5a6daf97ded49e9576a3a00cf" + integrity sha512-42Ej9sDDEmsJKjrfQ1PHmiDiHagh/u9AHO9QWbeNx4KmD9yS5d1XHmXUNINfUcykAU+4431Cn+k6Vn5mWBYimQ== dependencies: - "@babel/core" "^7.12.3" - "@svgr/babel-preset" "^5.5.0" - "@svgr/hast-util-to-babel-ast" "^5.5.0" - svg-parser "^2.0.2" + "@babel/types" "^7.21.3" + entities "^4.4.0" "@svgr/plugin-jsx@^6.5.1": version "6.5.1" @@ -1990,14 +1979,15 @@ "@svgr/hast-util-to-babel-ast" "^6.5.1" svg-parser "^2.0.4" -"@svgr/plugin-svgo@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" - integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== +"@svgr/plugin-jsx@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-7.0.0.tgz#b9e0c7d05bc890d70163ac0490ba8c41f1afab90" + integrity sha512-SWlTpPQmBUtLKxXWgpv8syzqIU8XgFRvyhfkam2So8b3BE0OS0HPe5UfmlJ2KIC+a7dpuuYovPR2WAQuSyMoPw== dependencies: - cosmiconfig "^7.0.0" - deepmerge "^4.2.2" - svgo "^1.2.2" + "@babel/core" "^7.21.3" + "@svgr/babel-preset" "^7.0.0" + "@svgr/hast-util-to-babel-ast" "^7.0.0" + svg-parser "^2.0.4" "@svgr/plugin-svgo@^6.5.1": version "6.5.1" @@ -2008,19 +1998,14 @@ deepmerge "^4.2.2" svgo "^2.8.0" -"@svgr/webpack@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" - integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== - dependencies: - "@babel/core" "^7.12.3" - "@babel/plugin-transform-react-constant-elements" "^7.12.1" - "@babel/preset-env" "^7.12.1" - "@babel/preset-react" "^7.12.5" - "@svgr/core" "^5.5.0" - "@svgr/plugin-jsx" "^5.5.0" - "@svgr/plugin-svgo" "^5.5.0" - loader-utils "^2.0.0" +"@svgr/plugin-svgo@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-7.0.0.tgz#325e87cede7bf7106a8099ceaeaa5906176c4bca" + integrity sha512-263znzlu3qTKj71/ot5G9l2vpL4CW+pr2IexBFIwwB+fRAXE9Xnw2rUFgE6P4+37N9siOuC4lKkgBfUCOLFRKQ== + dependencies: + cosmiconfig "^8.1.3" + deepmerge "^4.3.1" + svgo "^3.0.2" "@svgr/webpack@^6.2.1": version "6.5.1" @@ -2036,6 +2021,20 @@ "@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1" +"@svgr/webpack@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-7.0.0.tgz#609ba724a380fd121bb0bc4667b7f213f4021ea9" + integrity sha512-XWzIhLTr5WYns/cNFXpXrmFy+LFf2xp60VnNUBZCpM1CGTx47FCDuUj2DQjxirMf2L6CP2jTRELK8ef01TecFQ== + dependencies: + "@babel/core" "^7.21.3" + "@babel/plugin-transform-react-constant-elements" "^7.21.3" + "@babel/preset-env" "^7.20.2" + "@babel/preset-react" "^7.18.6" + "@babel/preset-typescript" "^7.21.0" + "@svgr/core" "^7.0.0" + "@svgr/plugin-jsx" "^7.0.0" + "@svgr/plugin-svgo" "^7.0.0" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -2213,11 +2212,6 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== -"@types/q@^1.5.1": - version "1.5.5" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" - integrity sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ== - "@types/qs@*": version "6.9.7" resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" @@ -2254,7 +2248,7 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*": +"@types/react@*", "@types/react@>=16.0.0": version "18.0.33" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.33.tgz#a1575160cb4376787c2f5fe0312302f824baa61e" integrity sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA== @@ -2625,14 +2619,6 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - array-differ@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" @@ -2653,17 +2639,6 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.reduce@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz#6b20b0daa9d9734dd6bc7ea66b5bbce395471eac" - integrity sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - es-array-method-boxes-properly "^1.0.0" - is-string "^1.0.7" - arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" @@ -2691,11 +2666,6 @@ autoprefixer@^10.4.12, autoprefixer@^10.4.7: picocolors "^1.0.0" postcss-value-parser "^4.2.0" -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - axios@^0.25.0: version "0.25.0" resolved "https://registry.yarnpkg.com/axios/-/axios-0.25.0.tgz#349cfbb31331a9b4453190791760a8d35b093e0a" @@ -2817,7 +2787,7 @@ bonjour-service@^1.0.11: fast-deep-equal "^3.1.3" multicast-dns "^7.2.5" -boolbase@^1.0.0, boolbase@~1.0.0: +boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww== @@ -2954,7 +2924,7 @@ ccount@^1.0.0: resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== -chalk@^2.0.0, chalk@^2.4.1: +chalk@^2.0.0: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3101,15 +3071,6 @@ clsx@^1.1.1, clsx@^1.2.1: resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.2.1.tgz#0ddc4a20a549b59c93a4116bb26f5294ca17dc12" integrity sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg== -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - collapse-white-space@^1.0.2: version "1.0.6" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" @@ -3332,7 +3293,7 @@ cosmiconfig@^6.0.0: path-type "^4.0.0" yaml "^1.7.2" -cosmiconfig@^7.0.0, cosmiconfig@^7.0.1: +cosmiconfig@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz#1443b9afa596b670082ea46cbd8f6a62b84635f6" integrity sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA== @@ -3410,21 +3371,6 @@ css-minimizer-webpack-plugin@^4.0.0: serialize-javascript "^6.0.0" source-map "^0.6.1" -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - css-select@^4.1.3: version "4.3.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.3.0.tgz#db7129b2846662fd8628cfc496abb2b59e41529b" @@ -3447,14 +3393,6 @@ css-select@^5.1.0: domutils "^3.0.1" nth-check "^2.0.1" -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - css-tree@^1.1.2, css-tree@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.1.3.tgz#eb4870fb6fd7707327ec95c2ff2ab09b5e8db91d" @@ -3463,10 +3401,21 @@ css-tree@^1.1.2, css-tree@^1.1.3: mdn-data "2.0.14" source-map "^0.6.1" -css-what@^3.2.1: - version "3.4.2" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.4.2.tgz#ea7026fcb01777edbde52124e21f327e7ae950e4" - integrity sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ== +css-tree@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20" + integrity sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw== + dependencies: + mdn-data "2.0.30" + source-map-js "^1.0.1" + +css-tree@~2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032" + integrity sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA== + dependencies: + mdn-data "2.0.28" + source-map-js "^1.0.1" css-what@^6.0.1, css-what@^6.1.0: version "6.1.0" @@ -3539,13 +3488,20 @@ cssnano@^5.1.12, cssnano@^5.1.8: lilconfig "^2.0.3" yaml "^1.10.2" -csso@^4.0.2, csso@^4.2.0: +csso@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/csso/-/csso-4.2.0.tgz#ea3a561346e8dc9f546d6febedd50187cf389529" integrity sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA== dependencies: css-tree "^1.1.2" +csso@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6" + integrity sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ== + dependencies: + css-tree "~2.2.0" + csstype@^3.0.2: version "3.1.2" resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.1.2.tgz#1d4bf9d572f11c14031f0436e1c10bc1f571f50b" @@ -3817,10 +3773,10 @@ d3@^7.4.0, d3@^7.8.2: d3-transition "3" d3-zoom "3" -dagre-d3-es@7.0.9: - version "7.0.9" - resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.9.tgz#aca12fccd9d09955a4430029ba72ee6934542a8d" - integrity sha512-rYR4QfVmy+sR44IBDvVtcAmOReGBvRCWDpO2QjYwqgh9yijw6eSHBqaPG/LIOEy7aBsniLvtMW6pg19qJhq60w== +dagre-d3-es@7.0.10: + version "7.0.10" + resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.10.tgz#19800d4be674379a3cd8c86a8216a2ac6827cadc" + integrity sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A== dependencies: d3 "^7.8.2" lodash-es "^4.17.21" @@ -3856,7 +3812,7 @@ deep-extend@^0.6.0: resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -deepmerge@^4.2.2: +deepmerge@^4.2.2, deepmerge@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== @@ -3878,7 +3834,7 @@ define-lazy-prop@^2.0.0: resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== -define-properties@^1.1.3, define-properties@^1.1.4: +define-properties@^1.1.4: version "1.2.0" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5" integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA== @@ -3976,14 +3932,6 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" @@ -4002,11 +3950,6 @@ dom-serializer@^2.0.0: domhandler "^5.0.2" entities "^4.2.0" -domelementtype@1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - domelementtype@^2.0.1, domelementtype@^2.2.0, domelementtype@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d" @@ -4026,18 +3969,10 @@ domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -dompurify@2.4.3: - version "2.4.3" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.3.tgz#f4133af0e6a50297fc8874e2eaedc13a3c308c03" - integrity sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ== - -domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" +dompurify@2.4.5: + version "2.4.5" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.5.tgz#0e89a27601f0bad978f9a924e7a05d5d2cccdd87" + integrity sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA== domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" @@ -4159,74 +4094,11 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.2, es-abstract@^1.19.0, es-abstract@^1.20.4: - version "1.21.2" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.21.2.tgz#a56b9695322c8a185dc25975aa3b8ec31d0e7eff" - integrity sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg== - dependencies: - array-buffer-byte-length "^1.0.0" - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.5" - get-intrinsic "^1.2.0" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has "^1.0.3" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.10" - is-weakref "^1.0.2" - object-inspect "^1.12.3" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.4.3" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.7" - string.prototype.trimend "^1.0.6" - string.prototype.trimstart "^1.0.6" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.9" - -es-array-method-boxes-properly@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" - integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== - es-module-lexer@^0.9.0: version "0.9.3" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== -es-set-tostringtag@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8" - integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg== - dependencies: - get-intrinsic "^1.1.3" - has "^1.0.3" - has-tostringtag "^1.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - escalade@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" @@ -4551,13 +4423,6 @@ follow-redirects@^1.0.0, follow-redirects@^1.14.7: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.2.tgz#b460864144ba63f2681096f274c4e57026da2c13" integrity sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - fork-ts-checker-webpack-plugin@^6.5.0: version "6.5.3" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz#eda2eff6e22476a2688d10661688c47f611b37f3" @@ -4631,27 +4496,12 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -function.prototype.name@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621" - integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - es-abstract "^1.19.0" - functions-have-names "^1.2.2" - -functions-have-names@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== @@ -4684,14 +4534,6 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - github-slugger@^1.4.0: version "1.5.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.5.0.tgz#17891bbc73232051474d68bd867a34625c955f7d" @@ -4756,13 +4598,6 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -4786,13 +4621,6 @@ globby@^13.1.1: merge2 "^1.4.1" slash "^4.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - got@^9.6.0: version "9.6.0" resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" @@ -4837,11 +4665,6 @@ handle-thing@^2.0.0: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.1.tgz#857f79ce359580c340d43081cc648970d0bb234e" integrity sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4859,23 +4682,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.1, has-symbols@^1.0.2, has-symbols@^1.0.3: +has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - has-yarn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" @@ -5217,15 +5028,6 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/inline-style-parser/-/inline-style-parser-0.1.1.tgz#ec8a3b429274e9c0a1f1c4ffa9453a7fef72cea1" integrity sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q== -internal-slot@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" - integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== - dependencies: - get-intrinsic "^1.2.0" - has "^1.0.3" - side-channel "^1.0.4" - "internmap@1 - 2": version "2.0.3" resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" @@ -5266,27 +5068,11 @@ is-alphanumerical@^1.0.0: is-alphabetical "^1.0.0" is-decimal "^1.0.0" -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - is-binary-path@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" @@ -5294,24 +5080,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-buffer@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -5326,13 +5099,6 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - is-decimal@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" @@ -5378,23 +5144,11 @@ is-installed-globally@^0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - is-npm@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8" integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA== -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" @@ -5437,14 +5191,6 @@ is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -5455,55 +5201,16 @@ is-root@^2.1.0: resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.1.0.tgz#809e18129cf1129644302a4f8544035d51984a9c" integrity sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg== -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.9: - version "1.1.10" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.10.tgz#36a5b5cb4189b575d1a3e4b08536bfb485801e3f" - integrity sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typedarray@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - is-whitespace-character@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" @@ -5883,10 +5590,15 @@ mdn-data@2.0.14: resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" integrity sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow== -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== +mdn-data@2.0.28: + version "2.0.28" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba" + integrity sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g== + +mdn-data@2.0.30: + version "2.0.30" + resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc" + integrity sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA== mdurl@^1.0.0: version "1.0.1" @@ -5925,19 +5637,20 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -mermaid@^9.1.3: - version "9.4.3" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-9.4.3.tgz#62cf210c246b74972ea98c19837519b6f03427f2" - integrity sha512-TLkQEtqhRSuEHSE34lh5bCa94KATCyluAXmFnNI2PRZwOpXFeqiJWwZl+d2CcemE1RS6QbbueSSq9QIg8Uxcyw== +mermaid@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.1.0.tgz#6e40d5250174f4750ca6548e4ee00f6ae210855a" + integrity sha512-LYekSMNJygI1VnMizAPUddY95hZxOjwZxr7pODczILInO0dhQKuhXeu4sargtnuTwCilSuLS7Uiq/Qn7HTVrmA== dependencies: "@braintree/sanitize-url" "^6.0.0" + "@khanacademy/simple-markdown" "^0.8.6" cytoscape "^3.23.0" cytoscape-cose-bilkent "^4.1.0" cytoscape-fcose "^2.1.0" d3 "^7.4.0" - dagre-d3-es "7.0.9" + dagre-d3-es "7.0.10" dayjs "^1.11.7" - dompurify "2.4.3" + dompurify "2.4.5" elkjs "^0.8.2" khroma "^2.0.0" lodash-es "^4.17.21" @@ -6018,18 +5731,11 @@ minimatch@3.1.2, minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mkdirp@~0.5.1: - version "0.5.6" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" - integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== - dependencies: - minimist "^1.2.6" - mri@^1.1.5: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" @@ -6158,13 +5864,6 @@ nprogress@^0.2.0: resolved "https://registry.yarnpkg.com/nprogress/-/nprogress-0.2.0.tgz#cb8f34c53213d895723fcbab907e9422adbcafb1" integrity sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA== -nth-check@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - nth-check@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d" @@ -6177,7 +5876,7 @@ object-assign@^4.1.0, object-assign@^4.1.1: resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -object-inspect@^1.12.3, object-inspect@^1.9.0: +object-inspect@^1.9.0: version "1.12.3" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== @@ -6187,7 +5886,7 @@ object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.0, object.assign@^4.1.4: +object.assign@^4.1.0: version "4.1.4" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f" integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ== @@ -6197,25 +5896,6 @@ object.assign@^4.1.0, object.assign@^4.1.4: has-symbols "^1.0.3" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.1.0: - version "2.1.5" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz#db5a9002489b64eef903df81d6623c07e5b4b4d3" - integrity sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw== - dependencies: - array.prototype.reduce "^1.0.5" - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -object.values@^1.1.0: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.6.tgz#4abbaa71eba47d63589d402856f908243eea9b1d" - integrity sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -6892,11 +6572,6 @@ pure-color@^1.2.0: resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e" integrity sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA== -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== - qs@6.11.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -7001,14 +6676,13 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== +react-dom@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" + integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" + scheduler "^0.23.0" react-error-overlay@^6.0.11: version "6.0.11" @@ -7102,13 +6776,12 @@ react-textarea-autosize@^8.3.2: use-composed-ref "^1.3.0" use-latest "^1.2.1" -react@^17.0.1: - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== +react@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" + integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" readable-stream@^2.0.1: version "2.3.8" @@ -7182,15 +6855,6 @@ regenerator-transform@^0.15.1: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.4.3: - version "1.4.3" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" - integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.3" - functions-have-names "^1.2.2" - regexpu-core@^5.3.1: version "5.3.2" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" @@ -7409,32 +7073,22 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sax@^1.2.4, sax@~1.2.4: +sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== +scheduler@^0.23.0: + version "0.23.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" + integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" schema-utils@2.7.0: version "2.7.0" @@ -7695,7 +7349,7 @@ sort-css-media-queries@2.1.0: resolved "https://registry.yarnpkg.com/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz#7c85e06f79826baabb232f5560e9745d7a78c4ce" integrity sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA== -source-map-js@^1.0.2: +source-map-js@^1.0.1, source-map-js@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== @@ -7794,33 +7448,6 @@ string-width@^5.0.1: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string.prototype.trim@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533" - integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimend@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533" - integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - -string.prototype.trimstart@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4" - integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.1.4" - es-abstract "^1.20.4" - string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" @@ -7924,30 +7551,11 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -svg-parser@^2.0.2, svg-parser@^2.0.4: +svg-parser@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== -svgo@^1.2.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - svgo@^2.7.0, svgo@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/svgo/-/svgo-2.8.0.tgz#4ff80cce6710dc2795f0c7c74101e6764cfccd24" @@ -7961,6 +7569,18 @@ svgo@^2.7.0, svgo@^2.8.0: picocolors "^1.0.0" stable "^0.1.8" +svgo@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a" + integrity sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ== + dependencies: + "@trysound/sax" "0.2.0" + commander "^7.2.0" + css-select "^5.1.0" + css-tree "^2.2.1" + csso "^5.0.5" + picocolors "^1.0.0" + tapable@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" @@ -8087,15 +7707,6 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -8108,16 +7719,6 @@ ua-parser-js@^0.7.30: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - unherit@^1.0.4: version "1.1.3" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" @@ -8248,11 +7849,6 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg== - update-browserslist-db@^1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" @@ -8331,16 +7927,6 @@ util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" @@ -8578,29 +8164,6 @@ whatwg-url@^5.0.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.9: - version "1.1.9" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.9.tgz#307cf898025848cf995e795e8423c7f337efbde6" - integrity sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - is-typed-array "^1.1.10" - which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" From 262440454d4de4dec225659e899a76373b900ec6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 5 Apr 2023 15:44:21 +0200 Subject: [PATCH 229/665] ink! Playground RFP (#1654) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Initial draft * Update docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * Update ink! smart contract ide rfp * remove link * update rfps doc * Update docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md Co-authored-by: Sebastian Müller --------- Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: Sebastian Müller --- .../RFPs/Open/IDE_for_ink!_Smart_Contracts.md | 22 +++++++++++++++++++ docs/rfps.md | 1 + 2 files changed, 23 insertions(+) create mode 100644 docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md diff --git a/docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md b/docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md new file mode 100644 index 00000000000..273c0449f22 --- /dev/null +++ b/docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md @@ -0,0 +1,22 @@ +# Browser based IDE for ink! Smart Contracts + +* **Status:** Open +* **Proposer:** [David Hawig](https://github.com/Noc2) + +## Project Description :page_facing_up: + +[ink!](https://github.com/paritytech/ink) is a domain-specific language for writing smart contracts in Rust and compiles to Wasm code. You can deploy ink! contracts on parachains that support the contracts pallet, as well as on stand-alone blockchains built with Substrate. + +The goal of this RFP is to find teams that would like to develop or maintain a browser-based playground for editing, compiling & sharing ink! smart contracts. The [ink! Playground](https://ink-playground.substrate.io/), previously maintained by Parity, utilizes Typescript, React, Docker, and [Monaco Editor](https://microsoft.github.io/monaco-editor/). Teams could continue to work on the [ink! Playground](https://github.com/paritytech/ink-playground), or choose to build something new if desired. For example, it might be possible to leverage GitHub Codespaces in combination with GitHub Actions or the previously developed [ink! Remix plugin](https://github.com/blockchain-it-hr/ink-remix-plugin). + +**Useful resources:** +- [ink!](https://use.ink/) +- [ink-playground](https://ink-playground.substrate.io) +- [GitHub ink-playground](https://github.com/paritytech/ink-playground) +- [GitHub: ink! Remix plugin](https://github.com/blockchain-it-hr/ink-remix-plugin) + +## Deliverables + +The structure of the grant and the milestones depends highly on the project itself. It’s therefore up to the applying team to come up with a milestone and delivery structure. + + diff --git a/docs/rfps.md b/docs/rfps.md index fbe7b431d58..857aa1885f4 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -43,6 +43,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | | [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟡 | 16.03.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | +| [IDE_for_ink!_Smart_Contracts.md](RFPs/Open/IDE_for_ink!_Smart_Contracts.md) | 🟢 | 05.04.2023 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | | [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 🔴 | 20.07.2021 | From 26b7868b921492dcca18cc22c1f8c9b5a9008a14 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 15:51:47 +0200 Subject: [PATCH 230/665] fix link --- ...r_ink!_Smart_Contracts.md => IDE_for_ink_Smart_Contracts.md} | 0 docs/rfps.md | 2 +- yarn.lock | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/Open/{IDE_for_ink!_Smart_Contracts.md => IDE_for_ink_Smart_Contracts.md} (100%) diff --git a/docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md similarity index 100% rename from docs/RFPs/Open/IDE_for_ink!_Smart_Contracts.md rename to docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md diff --git a/docs/rfps.md b/docs/rfps.md index 857aa1885f4..80c6cd57997 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -43,7 +43,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | | [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟡 | 16.03.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | -| [IDE_for_ink!_Smart_Contracts.md](RFPs/Open/IDE_for_ink!_Smart_Contracts.md) | 🟢 | 05.04.2023 | +| [IDE_for_ink_Smart_Contracts.md](RFPs/Open/IDE_for_ink_Smart_Contracts.md) | 🟢 | 05.04.2023 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | | [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 🔴 | 20.07.2021 | diff --git a/yarn.lock b/yarn.lock index 6452807f7eb..08630702670 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1745,7 +1745,7 @@ unist-builder "2.0.3" unist-util-visit "2.0.3" -"@mdx-js/react@^1.6.21", "@mdx-js/react@^1.6.22": +"@mdx-js/react@^1.6.22": version "1.6.22" resolved "https://registry.yarnpkg.com/@mdx-js/react/-/react-1.6.22.tgz#ae09b4744fddc74714ee9f9d6f17a66e77c43573" integrity sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg== From 9c24c28c589aeef2fe908d7773eebcf048eed308 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 15:55:05 +0200 Subject: [PATCH 231/665] @mdx-js/react": "^1.6.22" --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 12bb4c8a297..19562c32556 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "dependencies": { "@docusaurus/core": "^2.2.0", "@docusaurus/preset-classic": "^2.2.0", - "@mdx-js/react": "^1.6.21", + "@mdx-js/react": "^1.6.22", "@svgr/webpack": "^7.0.0", "clsx": "^1.1.1", "file-loader": "^6.2.0", From 90fad5889685f5387ab29596119cffb9c501d34e Mon Sep 17 00:00:00 2001 From: Jean-Luc Leleu Date: Wed, 5 Apr 2023 16:35:14 +0200 Subject: [PATCH 232/665] Interstellar - Wallet Phase 2 (follow-up) (#1543) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Follow up (#4) * Create Interstellar-network2.md * Update applications/Interstellar-network2.md Co-authored-by: Sebastian Müller * Update Interstellar-network2.md * update * update * update * update * update * update * focus miletsones on circuit and garbling pallet PoC * payment address and level updated * Fiat timestamp updated --------- Co-authored-by: Sebastian Müller --- applications/Interstellar-network2.md | 201 ++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 applications/Interstellar-network2.md diff --git a/applications/Interstellar-network2.md b/applications/Interstellar-network2.md new file mode 100644 index 00000000000..2235d0572c5 --- /dev/null +++ b/applications/Interstellar-network2.md @@ -0,0 +1,201 @@ +# Interstellar - Wallet Phase 2 + + +- **Team Name:** Interstellar +- **Payment Address:** Fiat 04.04.2023, 22:42 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: + +**Follow-up of Interstellar- Wallet Phase 1**: Link to the application pull request: [w3f/Grants-Program#734](https://github.com/w3f/Grants-Program/pull/734). Amendment: [w3f/Grants-Program#1354](https://github.com/w3f/Grants-Program/pull/1354) + +### Overview + +**The FTX collapse highlights the importance of self-custody for the Web3 ecosystem**. + +Currently, there are only two categories of self-custodial wallets available: Hot Wallets and Cold Wallets. Both options come with significant trade-offs and are not well-suited for providing blockchain access to the general public. + +To address the most crucial issues faced by current wallet options - User Experience and Security - a new type of wallet is required. + +Typically, when we think about accessing the blockchain through a cold wallet, we expect a complicated user experience. +Interstellar aims to change this perception through a new approach and technology. + +We strongly believe that securely linking and registering access device security components with a blockchain-based autonomous system is an extremely powerful concept. It can provide a future-proof solution for addressing the current security, usability, and privacy issues associated with current **centralized** non-custodial wallet software. + +In terms of security, this approach utilizes the current and future mobile device security capabilities by implementing a secure distributed protocol. It addresses the current lack of third-party protection and management while also adding the necessary decentralized backend services to enhance security against evolving cyber threats. + +Regarding usability, this approach simplifies the user experience by adding transparent services like Instant Onboarding. + +Privacy can also be addressed using methods such as stealth addresses and other private schemes. + +Additionally, implementing this approach increases the overall system's auditability, potentially enabling the management of a guarantee fund to aid users in case of issues. + +Furthermore, this approach can enable new types of recovery schemes that would be impossible without a secure decentralized autonomous system backend. + + +A **highly secure and convenient wallet system** is necessary to combat cyber threats and ensures larger adoption. + +Our solution transforms mobile devices into cold wallets, with private keys protected at the hardware level: + +- Secure Element on mobile for proxy private keys associated with transaction requests and confirmations. +- Trusted Execution Environment (TEE) on nodes for private keys associated with assets. + +This hardware security, combined with a Trusted Transaction Validation Protocol, offers robust protection against state-of-the-art malware, including banking Trojans, and prepares for future targeted attacks. + +Interstellar is more than a wallet, we have designed **a novel secure access layer for web3** managed with a blockchain that register mobile hardware/secure elements/TEEs to protect transaction with a strong multifactor authentication (based on hardware and software computation privacy scheme i.e. garbled circuit). + +Using a blockchain for the management of multi-chain transactions offers extra security and auditability features and dramatically increase convenience for the user: + +- **Instant Access to Web3 services**, without any wallet set-up. +- **Trusted beneficiaries/contacts**, with destination public keys stored only on the blockchain nodes. +- **Adaptive Security**, allowing users to personalize the security level based on theirs need i.e. transaction amount to trigger validation, chose number of recovery options, etc. +- **Transaction auditability**, extra auditability security layer. +- **Social Recovery** ideally based on Polkadot pallet. + +In the medium/long term (see future plan for more details): + +- **A novel hardware-based recovery (through NFC/BLE) to further enhance security and convenience**, i.e. just a tap on your mobile with your NFC device to trigger the recovery process. + +- **ML real-time Malware detection model** based on proof of legitimate software execution protection that increases the model accuracy (potential research project to address targeted attacks) +- **User inputs verification** based on behavioral biometric model (proven with 99% accuracy) that can be correlated with ML detection model. + + +This approach achieves a **highly secure level for newcomers to easily onboard web3**, and serves as an **alternative to hardware wallets for crypto veterans**. + +Our technology has the potential to disrupt the hardware wallet, smart contract wallet, and even hot wallet markets. + + +### Project Details + + +A short video on the Interstellar solution (click on the following image) + +[](https://clipchamp.com/watch/nwzybRger1x "Interstellar Video: 55") +- Designs of UI components +https://book.interstellar.gg/Mobile_App.html + +- Documentation of core components +https://book.interstellar.gg/ + +#### Architecture Overview +![Architecture overview](https://book.interstellar.gg/fig/Architecture-mobile-L1-L2-Signers.svg "architecture L1 L2 signer") +#### TTVP Detailed +![TTVP Detailed](https://book.interstellar.gg/fig/Transaction_Validation_Module.svg "TTVP detailed") + + +#### Technology stack + +- VHDL +- C/C++ +- Java/Kotlin/Jetpack Compose/Swift/Swift UI +- gRPC +- Rust/Substrate +- IPFS + + +### Ecosystem Fit + +At parisDOT.comm we had a fantastic opportunity to present our project to the leading teams in the Polkadot Parachain community. And the feedback we received was nothing short of extraordinary. Our solution, which aims to provide both hardware security and user-friendliness in a wallet solution, struck a chord with the teams. + +Their positive response is a testament to the importance of a solution that addresses this critical need in the Polkadot ecosystem and beyond. The teams were not only impressed with our solution, but they were also eager to put it to the test as soon as it becomes available. + +This is a major market fit milestone for us, and we're thrilled to have the support of such influential players in the Polkadot community. We're dedicated to delivering a solution that meets their expectations and contributes to the continued growth and success of the Polkadot ecosystem. + +We are in active conversations with some of the teams we met there, and continuously have new discussions with new teams also beyond the Polkadot ecosystem. So far, everyone is impressed and enthusiastic about the solution. + + +## Team :busts_in_silhouette: + + +### Team members +- Name of team leader: +- Jean-Luc Leleu +- Names of team members: +- Nathan Prat +- Eliot Leleu + +- Philippe Salats (advisor) + +### Contact + +- **Contact Name:** Jean-Luc Leleu +- **Contact Email:** jll@interstellar.gg +- **Website:** + + +### Legal Structure + +- **Registered Address:** 61 rue de Lyon, Paris, France +- **Registered Legal Entity:** Interstellar SAS + +### Team's experience +We are now multiple security and fintech entrepreneurs, security researchers, patents fillers who turned open-source developers and blockchain enthusiasts. + + +### Team Code Repos + +- + +- + +### Team LinkedIn Profiles (if available) + +- Jean-Luc Leleu + +- Nathan Part + +- Eliot Leleu + + +- Philippe Salats (advisor) + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 2.5 +- **Total Costs:** 30,000 USD + +### Milestone 1 — New Garbling scheme + +- **Estimated duration:** 4 weeks +- **FTE:** 2.5 +- **Costs:** 15,000 USD + + +| Number | Deliverable | Specification | +| ------: | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | APACHE 2 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up our stack and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | | | +| 1. | Garble Circuit pallet update | We will rewrite the garbled circuit evaluation scheme to target at least **60 fps** through parralelization, caching and likely with an efficient [1.permutation-based garbling scheme: see 4.5](https://www.cs.fsu.edu/~tvhoang/thesis.pdf) optimized for performance or a [2.new garbling scheme](https://www.esat.kuleuven.be/cosic/publications/article-3351.pdf) that could potentially require lower computation cost per gate| + + + + +### Milestone 2 — Circuit design optimization and light security screen + +- **Estimated duration:** 4 weeks +- **FTE:** 2.5 +- **Costs:** 15,000 USD + + +| Number | Deliverable | Specification | +| ------: | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | APACHE 2 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up our stack and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | | | +| 1. | Display Circuit update | We will modify the current display circuit to enable a more comfortable user experience by decreasing the cognitive load needed for the user to read the screen. - likely by adding specific sub-circuits to manage a set of probabilities of displaying segments for each frame, then fine tuned segments ON/OFF per frame to improve readbility +| 2. | Light security screen | We will provide a less secure but very comfortable to read secure screen version using fading with less blinking (link) - this non-screenshot proof version will be used later with our adaptive security framework | + + + + + + + From b1464e08fb5c661eb814c73257ecbe4756e5c82c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 5 Apr 2023 16:37:32 +0200 Subject: [PATCH 233/665] Update index.md Add Interstellar - Wallet Phase 2 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 4898be027fa..90527be513e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -27,7 +27,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | - +| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | ### 🏄‍♀️ Wave 17 - First Quarter 2023 From c113368f9e642dc01f1f4e5f392d5858b5775a8e Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 16:44:26 +0200 Subject: [PATCH 234/665] website fix --- applications/Interstellar-network2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Interstellar-network2.md b/applications/Interstellar-network2.md index 2235d0572c5..fb4363d91e2 100644 --- a/applications/Interstellar-network2.md +++ b/applications/Interstellar-network2.md @@ -71,7 +71,7 @@ Our technology has the potential to disrupt the hardware wallet, smart contract A short video on the Interstellar solution (click on the following image) -[](https://clipchamp.com/watch/nwzybRger1x "Interstellar Video: 55") +[](https://clipchamp.com/watch/nwzybRger1x "Interstellar Video: 55") - Designs of UI components https://book.interstellar.gg/Mobile_App.html From 112c919325f05cd1190d3107dd18d7e7aea40ad8 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 5 Apr 2023 17:11:47 +0200 Subject: [PATCH 235/665] update numbers --- src/components/HomepageFeatures.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js index c5823289807..ba9a776a5fb 100644 --- a/src/components/HomepageFeatures.js +++ b/src/components/HomepageFeatures.js @@ -6,14 +6,14 @@ import CountUp from 'react-countup'; const FeatureList = [ { - title: 1100, + title: 1300, description: ( <>applications ), }, { - title: 450, + title: 500, description: ( <>projects funded From 434fd9a14848c277897d4b5841dfc639d42b2a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 6 Apr 2023 11:33:05 +0200 Subject: [PATCH 236/665] Improve grants list navigation --- applications/index.md | 121 ++++++++++++++++++++---------------------- 1 file changed, 59 insertions(+), 62 deletions(-) diff --git a/applications/index.md b/applications/index.md index 90527be513e..aa3667960fe 100644 --- a/applications/index.md +++ b/applications/index.md @@ -11,27 +11,41 @@ Use this page for an overview of all public grants and their status. Use the sid > > Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). -## Menu -- [2023](#2023): [18](#%EF%B8%8F-wave-18---second-quarter-2023), [17](#%EF%B8%8F-wave-17---first-quarter-2023) -- [2022](#2022): [16](#%EF%B8%8F-wave-16---fourth-quarter-2022), [15](#%EF%B8%8F-wave-15---third-quarter-2022), [14](#%EF%B8%8F-wave-14---second-quarter-2022), [13](#%EF%B8%8F-wave-13---first-quarter-2022) -- [2021](#2021): [12](#%EF%B8%8F-wave-12---fourth-quarter-2021), [11](#%EF%B8%8F-wave-11---third-quarter-2021), [10](#%EF%B8%8F-wave-10---second-quarter-2021), [9](#%EF%B8%8F-wave-9---first-quarter-2021) -- [2020](#2020): [8](#%EF%B8%8F-wave-8---fourth-quarter-2020), [7](#%EF%B8%8F-wave-7---third-quarter-2020), [6](#%EF%B8%8F-wave-6---second-quarter-2020), [5](#%EF%B8%8F-wave-5---first-quarter-2020) -- [2019](#2019): [4](#%EF%B8%8F-wave-4---fourth-quarter-2019), [3](#%EF%B8%8F-wave-3---third-quarter-2019), [2](#%EF%B8%8F-wave-2---second-quarter-2019), [1](#%EF%B8%8F-wave-1---first-quarter-2019) +- [2023](#2023) + - [🏄‍♀️ Wave 18 - Q2 2023](#️-wave-18---q2-2023) + - [🏄‍♀️ Wave 17 - Q1 2023](#️-wave-17---q1-2023) +- [2022](#2022) + - [🏄‍♀️ Wave 16 - Q4 2022](#️-wave-16---q4-2022) + - [🏄‍♀️ Wave 15 - Q3 2022](#️-wave-15---q3-2022) + - [🏄‍♀️ Wave 14 - Q2 2022](#️-wave-14---q2-2022) + - [🏄‍♀️ Wave 13 - Q1 2022](#️-wave-13---q1-2022) +- [2021](#2021) + - [🏄‍♀️ Wave 12 - Q4 2021](#️-wave-12---q4-2021) + - [🏄‍♀️ Wave 11 - Q3 2021](#️-wave-11---q3-2021) + - [🏄‍♀️ Wave 10 - Q2 2021](#️-wave-10---q2-2021) + - [🏄‍♀️ Wave 9 - Q1 2021](#️-wave-9---q1-2021) +- [2020](#2020) + - [🏄‍♀️ Wave 8 - Q4 2020](#️-wave-8---q4-2020) + - [🏄‍♀️ Wave 7 - Q3 2020](#️-wave-7---q3-2020) + - [🏄‍♀️ Wave 6 - Q2 2020](#️-wave-6---q2-2020) + - [🏄‍♀️ Wave 5 - Q1 2020](#️-wave-5---q1-2020) +- [2019](#2019) + - [🏄‍♀️ Wave 4 - Q4 2019](#️-wave-4---q4-2019) + - [🏄‍♀️ Wave 3 - Q3 2019](#️-wave-3---q3-2019) + - [🏄‍♀️ Wave 2 - Q2 2019](#️-wave-2---q2-2019) + - [🏄‍♀️ Wave 1 - Q1 2019](#️-wave-1---q1-2019) ## 2023 -### 🏄‍♀️ Wave 18 - Second Quarter 2023 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 18 - Q2 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | +[🔝](#menu) -### 🏄‍♀️ Wave 17 - First Quarter 2023 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 17 - Q1 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | @@ -81,13 +95,11 @@ Use this page for an overview of all public grants and their status. Use the sid | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☐ | ☐ | - + [🔝](#menu) ## 2022 -### 🏄‍♀️ Wave 16 - Fourth Quarter 2022 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 16 - Q4 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -130,10 +142,9 @@ Use this page for an overview of all public grants and their status. Use the sid | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | + [🔝](#menu) -### 🏄‍♀️ Wave 15 - Third Quarter 2022 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 15 - Q3 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -176,10 +187,9 @@ Use this page for an overview of all public grants and their status. Use the sid | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 14 - Second Quarter 2022 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 14 - Q2 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -219,10 +229,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | | [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☒ | | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 13 - First Quarter 2022 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 13 - Q1 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------- | :-------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -258,12 +267,11 @@ Use this page for an overview of all public grants and their status. Use the sid | [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | + [🔝](#menu) ## 2021 -### 🏄‍♀️ Wave 12 - Fourth Quarter 2021 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 12 - Q4 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -288,10 +296,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | | [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | + [🔝](#menu) -### 🏄‍♀️ Wave 11 - Third Quarter 2021 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 11 - Q3 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | @@ -321,10 +328,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [UNI-ARTS](https://app.uniarts.network/) | [Ruby Substate Client](./rb_substrate_client.md) | [GitHub](https://github.com/uni-arts-chain/sr25519) | ☐ | ☒ | ☐ | | [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | | [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 10 - Second Quarter 2021 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 10 - Q2 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -357,10 +363,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | | [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | | [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 9 - First Quarter 2021 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 9 - Q1 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -412,12 +417,11 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bit.Country](http://bit.country/) | [A decentralized world - Phase 2](./bit_country_m2.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | | [Vera](https://veraprotocol.org/) | [NFT Lending + Exchange](./vera_defi.md) | [GitHub](https://github.com/veraprotocol) | ☐ | ☒ | ☒ | | [Parallel Finance](https://parallel.fi/#/) | [Decentralized lending/borrowing and staking protocol](./Parallel.md) | [GitHub](https://github.com/parallel-finance/parallel) | ☐ | ☒ | ☒ | + [🔝](#menu) ## 2020 -### 🏄‍♀️ Wave 8 - Fourth Quarter 2020 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 8 - Q4 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -464,10 +468,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Evanesco](https://evanesco.org/) | [Private network protocol](./evanesco_networks.md) | [GitHub](https://github.com/Evanesco-Labs) | ☐ | ☒ | ☒ | | [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | | [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | + [🔝](#menu) -### 🏄‍♀️ Wave 7 - Third Quarter 2020 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 7 - Q3 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -502,10 +505,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit Phase 2 | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | | [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | | [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 6 - Second Quarter 2020 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 6 - Q2 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -542,10 +544,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [FlexDapps](https://flexdapps.com/) | Gantree Phase 4 | [GitHub](https://github.com/flex-dapps) | ☐ | ☐ | ☐ | | [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | | [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | + [🔝](#menu) -### 🏄‍♀️ Wave 5 - First Quarter 2020 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 5 - Q1 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -586,12 +587,11 @@ Use this page for an overview of all public grants and their status. Use the sid | [SelfKey](https://selfkey.org/) | SelfKey DIDs & Claims as Ink! Smart Contracts | [GitHub](https://github.com/SelfKeyFoundation) | ☐ | ☐ | ☐ | | [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | | [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | + [🔝](#menu) ## 2019 -### 🏄‍♀️ Wave 4 - Fourth Quarter 2019 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 4 - Q4 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -620,11 +620,10 @@ Use this page for an overview of all public grants and their status. Use the sid | [HashQuark](https://www.hashquark.io/) | Validator Dashboard | [GitHub](https://github.com/hashquark-io) | ☐ | ☒ | ☒ | | [Stacktical](https://stacktical.com/) | [Performance Management Runtime Modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/predictive_performance_management_runtime_module.md) | [GitHub](https://github.com/Stacktical) | ☐ | ☒ | ☐ | | [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | -| [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | - -### 🏄‍♀️ Wave 3 - Third Quarter 2019 +| [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | +[🔝](#menu) -[Menu🔝](#menu) +### 🏄‍♀️ Wave 3 - Q3 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -642,10 +641,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [DappForce](http://dappforce.io) | [SubSocial - Substrate module and web UI for decentralized communities](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | | [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | | [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | +[🔝](#menu) -### 🏄‍♀️ Wave 2 - Second Quarter 2019 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 2 - Q2 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :--------- | :------------: | :-------: | @@ -661,10 +659,9 @@ Use this page for an overview of all public grants and their status. Use the sid | [HOPR](https://hopr.network/) | [Substrate integration with this P2P messaging protocol](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/messaging.md) | [GitHub](https://github.com/validitylabs/HOPR-PL-Substrate) | ☐ | ☒ | ☒ | | [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | | [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | +[🔝](#menu) -### 🏄‍♀️ Wave 1 - First Quarter 2019 - -[Menu🔝](#menu) +### 🏄‍♀️ Wave 1 - Q1 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- | :--------- | :------------: | :-------: | From effe9a575c43615af00878434d3e5bdcf70ac493 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 6 Apr 2023 15:24:04 +0200 Subject: [PATCH 237/665] Update index.md added missing link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index aa3667960fe..98bdca49e21 100644 --- a/applications/index.md +++ b/applications/index.md @@ -85,7 +85,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | -| Taiwan Research-based Biopharmaceutical Manufacturers Association | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | +| [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | From 197a6f5d1d5153f348de5d51a9aa283452a60863 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 6 Apr 2023 15:24:51 +0200 Subject: [PATCH 238/665] Update index.md added missing link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 98bdca49e21..d77f983caee 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,7 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | -| EightFish | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | +| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | From 003771d686932f0bb652a9dbd52380e32e06bbe3 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 6 Apr 2023 15:30:41 +0200 Subject: [PATCH 239/665] Update index.md add missing link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d77f983caee..2602637dfe0 100644 --- a/applications/index.md +++ b/applications/index.md @@ -80,7 +80,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | -| Jonathan Brown | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | +| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | From d8f89e50cb1492776f4cb74ecb26741d81456538 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 6 Apr 2023 15:35:00 +0200 Subject: [PATCH 240/665] Update index.md add missing link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2602637dfe0..a3a94e962b9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| Off-Narrative Labs | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | +| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | From aba5d98554ca7951f88364678ff733bd6d51722a Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Tue, 11 Apr 2023 15:34:13 +0700 Subject: [PATCH 241/665] Amend accepted grant application Hybrid Block Explorer. (#1668) * Create hybrid.md * Add technical details to the milestone tables. * Mention IPFS hosting. * Mention more block explorers. * Update hybrid.md * Update hybrid.md * Update hybrid.md * Update hybrid.md --- applications/hybrid.md | 46 ++++++++++++++++++++++++++++++------------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/applications/hybrid.md b/applications/hybrid.md index fdaaa6dd72e..e2b5732d82e 100644 --- a/applications/hybrid.md +++ b/applications/hybrid.md @@ -47,22 +47,35 @@ The Hybrid indexer will be written in Rust. It can be configured to connect to a It will read events in all blocks using [subxt](https://github.com/paritytech/subxt) and index these events in a Key-value database using the [sled](http://sled.rs/) library. This is considerably more efficient than storing the index in an SQL database. +subxt currently has an [issue](https://github.com/paritytech/subxt/issues/793#issuecomment-1386902010) where it is not possible to query blocks prior to V14 metadata (block #7,229,126 on Polkadot). Resolving this issue is not within the scope of the grant. Once this grant is completed a further grant application will be made that includes resolving this issue. + +When decoding events, subxt needs to have the correct metadata. The metadata changes whenever a chain performs a runtime upgrade. Hybrid Indexer handles this in a very elegant way. When indexing begins it downloads the metadata for the starting block. When it encounters a decoding error it downloads the metadata for the current block and retries decoding. This means that the indexer does not have to be built with the metadata and block number of every runtime upgrade. + +To index an event, it needs to be converted into a Rust type that matches the metadata. Sometimes the metadata for an event will change during a runtime upgrade. To handle this the indexer will have Rust types for current and historic versions of all events. When an event fails to be converted into a Rust type the previous type will be tried. + All events in all pallets that have identifying parameters will be indexed. For example the Transfer event in the Balances pallet is identifiable by the `AccountId` of both `from` and `to`. Other examples of identifying event parameters are `assetId` in the Assets pallet, `code_hash` in the contracts pallet, `CollectionId` and `ItemId` in the NFTs pallet, and `MultiLocation` in the XCM pallet. -Reading blocks and writing indexes will occur in separate threads with a queue from the read thread to the write thread. Enabling reading and writing simultaneously will maximize indexing throughput. +Additionally, all events are indexed by event variant. + +To download a block, a query first has to be made to determine the hash for a given block number. In order to ensure throughput is as high as possible, multiple queries to the full node will be active at the same time to avoid round-trip delay. Block processing will be in a separate thread. + +In the same manner that each Substrate chain is a separate Rust build that uses Substrate crates, each chain will need a separate Hybrid Indexer build that is configured to index the correct pallets. + +When a chain is going to potentially perform a runtime upgrade, the Hybrid Indexer for the chain will need a new release with any updated events. If an instance of the indexer is not updated before the runtime upgrade occurs, it can be restarted with the new version at the correct block number. WSS queries will be handled via the highly scalable [tokio_tungstenite](https://github.com/snapview/tokio-tungstenite) Rust library. In addition to the identifier being searched for, queries will be able to include start block, offset, and limit to control which events are returned. -Consumers will be able to subscribe for new events that match a query. This will be handles by sled's powerful [watch_prefix](https://docs.rs/sled/latest/sled/struct.Tree.html#method.watch_prefix) functionality. +Consumers will be able to subscribe for new events that match a query. The database keys will be constructed in such a way so that events can be found using iterators starting at a specific block number. For example, for for the AccountId keyspace: `AccountId/BlockNumber/EventIndex` +Database entries will be key-only. No value will be stored. The blocknumber and event index are all that need to be returned for each event found. This reduces the size of the index database and increases decentralization. The frontend can query the chain in a decentralized manner to retrieve the event. #### Dapp @@ -155,32 +168,32 @@ Development has not started on the project, however the codebase will largely fo ### Overview -- **Total Estimated Duration:** 8 weeks +- **Total Estimated Duration:** 12 weeks - **Full-Time Equivalent (FTE):** 1 - **Total Costs:** 10,000 USD ### Milestone 1 — Event Indexing component -- **Estimated duration:** 4 weeks +- **Estimated duration:** 6 weeks - **FTE:** 1 - **Costs:** 5,000 USD | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | Apache 2.0 | -| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can index a Substrate node and query events. | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can index a Polkadot node and query events. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 1. | Connect to Substrate chains | The indexer will be written in Rust and configurable to connect to any Substrate chain using the subxt library. | -| 2. | Block syncing | As new blocks are produced, the indexer reads all events. Additionally, it will read events from existing blocks, starting at block 0. | -| 3. | Index writing | All identifying parameters in events will be indexed in the database using the sled library. | +| 1. | Connect to Substrate chains | The indexer will be written in Rust and configurable to connect to the Polkadot chain using the subxt library. | +| 2. | Block syncing | As new blocks are produced, the indexer reads all events. Additionally, it will read events from archived blocks. Indexing will be quite slow because communication with the full node will not be asynchronous. Only the Polkadot chain will be supported. | +| 3. | Index writing | The following identifying parameters in events will be indexed in the database using the sled library: AccountId, AccountIndex, AuctionIndex, BountyIndex, CandidateHash, MessageId, ParaId, PoolId, ProposalHash, ProposalIndex, RefIndex, RegistrarIndex, TipHash. Not all events will be indexed. | | 4. | Status querying | It will be possible to query the current status of the indexer via WSS. This will include information about which chain is being indexed, indexing progress and last know block. Queries will be handled via tokio_tungstenite. | -| 5. | Index querying | It will be possible to search via WSS for events with an identifier. | +| 5. | Index querying | It will be possible to search via WSS for events with an identifier. Basic event parameters details will be provided for most events. | | 6. | Dapp | A rudimentary web interface will be developed to expose this functionality. This will be built using pnpm, vite, vue, vuetify & polkdadot.js .| ### Milestone 2 — Event Subscribing -- **Estimated duration:** 2 weeks +- **Estimated duration:** 3 weeks - **FTE:** 1 - **Costs:** 2,500 USD @@ -192,27 +205,34 @@ Development has not started on the project, however the codebase will largely fo | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 1. | Event subscription API | The indexer will be updated to service subscription requests via WSS. | | 2. | Live dapp | The dapp will be updated so that pages displaying results from event queries will be updated as soon as a new event appears on the chain. | +| 3. | Full Substrate & Polkadot support | All substrate & polkadot pallets & events supported | +| 4. | Variant index | Additional event index by pallet, variant | +| 5. | Increased decentralization | Don't store event in db - load events in front end from chain | +| 6. | Asynchrous block downloading | Blocks will be downloaded as fast as possible for improved indexing speed. | ### Milestone 3 — Decentralized Component -- **Estimated Duration:** 2 weeks +- **Estimated Duration:** 3 weeks - **FTE:** 1 - **Costs:** 2,500 USD | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | Apache 2.0 | -| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the rudimentary explorer dapp. | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can build a chain-specific Hybrid Indexer and use the rudimentary explorer dapp. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Video | We will publish a video that explains and demonstrates all aspects of the explorer. | | 1. | Dapp | The dapp will be extended to query block and state via either the Substrate Connect light client, or via direct connect to a full node via WSS. | | 2. | Cross-chain UI | When a Tx includes a XCM, it will be easy and intuitive to open the relevant block from the other chain(s). | - +| 3. | Support event schema changes | It will be possible to index old events that have changed their Rust type in a runtime upgrade. | +| 4. | Per-chain build | Indexer needs to be built for the chain, e.g. hybrid-indexer-polkadot - custom pallets can be indexed. | ## Future Plans +- indexing block prior to V14 metadata (block #7,229,126 on Polkadot). See [issue](https://github.com/paritytech/subxt/issues/793#issuecomment-1386902010). + - hosting - The project needs to host indexes for all major Substrate chains. The frontend can be hosted as a traditional website and on IPFS. - improve dapp - explore how the event index can be used to better display the richness of the Polkadot ecosystem. From 83f1deedd70075b3fdca0b0de694cac375a38924 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 12 Apr 2023 07:49:32 -0400 Subject: [PATCH 242/665] Update index.md (#1669) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a3a94e962b9..b653a9b6242 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,7 +67,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | -| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | From ced46a917154388130192c4216bd2d01e0d3df73 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 13 Apr 2023 03:53:23 -0300 Subject: [PATCH 243/665] Update index.md (#1670) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b653a9b6242..c2efc587bd8 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☐ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☐ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | From f85c4091024cd977321dff4280595d318d9a469c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 13 Apr 2023 11:12:23 +0200 Subject: [PATCH 244/665] Update index.md Update Hybrid node research grant --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index c2efc587bd8..d53d9e5de48 100644 --- a/applications/index.md +++ b/applications/index.md @@ -127,7 +127,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ | | [TwinP](https://github.com/herou) | [Decentralized Invoice](decentralized_invoice.md) | [GitHub](https://github.com/herou) | ☐ | ☒ | ☒ | -| [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☐ | ☐ | +| [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | From 655e709312b8a16fac8d7995c757789ee9b3c0e7 Mon Sep 17 00:00:00 2001 From: Sourabh Niyogi Date: Fri, 14 Apr 2023 01:06:59 -0700 Subject: [PATCH 245/665] Terminate Application (#1664) We are not working on this in favor of a more fruitful project that we believe can benefit the ecosystem better: substrate-etl. --- applications/Zombienet-Explorer.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Zombienet-Explorer.md b/applications/Zombienet-Explorer.md index e36e4cb279b..effbba480b8 100644 --- a/applications/Zombienet-Explorer.md +++ b/applications/Zombienet-Explorer.md @@ -1,7 +1,7 @@ # Zombienet Explorer: Multi-Chain Substrate Block Explorer (based on Polkaholic.io) - **Team Name:** Colorful Notion -- **Payment Address:** Polkadot 5D58imQFuMXDTknQS2D14gDU2duiUC18MGxDnTKajjJS9F3g [USDT] +- **Status:** Terminated - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From 202a8bb29c5584f7e40bf0487c2abb0362a1a622 Mon Sep 17 00:00:00 2001 From: Rafael Date: Fri, 14 Apr 2023 15:53:09 +0200 Subject: [PATCH 246/665] DINFRA Application (#1622) * DINFRA Application DINFRA, decentralized infrastructure, is substrate orchestrated infrastructure, a decentralized alternative to public clouds. * Additional Technical Detail Added specific technologies to deliverables in the plan. * Time estimation in more detail/context As discussed, we are estimating 4-6 months in total. The development of the milestones will be forward by pitching ecosystem players and helping test and prof-concept DINFRA with their own infrastructure. We are assuming that there may be some kind of iteration of the deliverables along the process. * Update DINFRA.md --- applications/DINFRA.md | 214 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 applications/DINFRA.md diff --git a/applications/DINFRA.md b/applications/DINFRA.md new file mode 100644 index 00000000000..0db0bc1af29 --- /dev/null +++ b/applications/DINFRA.md @@ -0,0 +1,214 @@ +# DINFRA + +- **Team Name:** Valletech AB +- **Payment Address:** bc1q9rw6km4h7fjgwxv5vwdxhzsnl8s9c8ryfhsu4a (BTC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + + +### Overview + +DINFRA, decentralized infrastructure, is substrate orchestrated infrastructure, a decentralized alternative to public clouds. + +Substrate allows us to create a specialized blockchain, which we see as the perfect blending between Custom Functionality, Decentralized Governance and Value/State tracking. + +Modern data-center technology is now software defined, API driven and hyper-convergent with capability to virtualize Compute, Storage and Networking. Specialized network equipment is being replaced by virtualized services. There is also great availability of Open Source technologies covering all aspects of the modern data center. + +DINFRA aims to create a Substrate blockchain to orchestrate hyperconvergence infrastructure in a democratic, decentralized, open/neutral and non technically opinionated way. + +Realizing DINFRA vision requires a viable strategy. This project represents the first phase of a three phase strategy in which an Open Source Minimum Viable Product is delivered for the purpose of developing, testing, generating awareness and gaining community support. + +After delivering [Polkawatch](https://blog.polkawatch.app/introducing-polkawatch/), our analytic engine to measure decentralization of the substrate validation process, DINFRA is the natural next step for us to take in the Substrate Ecosystem. We have a track record contributing to Cloud automation stacks, we created [Privazio](https://www.privaz.io/) for small organizations to be able to fully automate their infrastructure and have used it to deliver Polkawatch for Polkadot and Kusama. We would like to start contributing to effective substrate infrastructure decentralization next. + +For a complete presentation of DINFRA vision and strategy see this [Video Presentation](https://vimeo.com/800524188). + +### Project Details + +**Design Constraints** + +We gave been part of the Dotsama community and that has allowed us to gain a better understanding of how it operates. Consequently, some key decisions have been taken that impact our choices of design and architecture: + +* DINFRA must be open and non technically opinionated. Infrastructure providers must be able to offer their solutions via DINFRA without being forced into specific technologies or opinionated solutions. Furthermore, they should be able to offer their current infrastructure via DINFRA provided they have industry standard automation capabilities, which typically they do, with minimal effort. +* DINFRA must be decentralized and democratic adopting and following the practices that we see on Kusama and Polkadot for governance. +* DINFRA must focus on the needs of our ecosystem first. + +We consider these points a prerequisite for community acceptance and adoption. + +**Design Interfaces and Data Modeling** + +DINFRA main responsibility will be to mediate between consumers and providers awarding "deployment descriptors" to "infrastructure providers" by means of consensus, collect balances accordingly, etc. + +From the previous constraints we deduce that we need lose typing of deployments descriptors, and DINFRA being able to distribute descriptors as opaque entities which don't need to be fully understood. + +Infrastructure Providers should be able to self register on DINFRA with information about which types of descriptors they can serve, even register new types of Deployment Descriptors for their flavored solutions if they happen to have some differential in-house capability. + +Deployment Descriptors will be able to represent things as diverse as a Helm Chart, Docker Compose, Cloud-Init user data, Subquery Project descriptor or IPFS cluster member profile. As long as each Provider registers their deployment capabilities properly, DINFRA must be able to route deployment requests to them. + +Deployment descriptors will be specified in JSON with its type defined as a JSON Schema. This provides loose typing and flexibility to accommodate any deployment descriptor possible, besides the fact that JSON/YAML is a widely used already by most infrastructure platforms and solutions. + +Note that Deployment descriptors won't be stored on chain but preimaged and backed on IPFS, as they are required during deployment. Secrets, whenever possible should be deduced from on-chain data preferably in the form of public keys. + +**High Level Architecture** + +DINFRA Architectural stack resembles pretty much a substrate stack under an infrastructure automation stack, like this: + +![DinfraHLArch](https://user-images.githubusercontent.com/412837/225624664-f7cf0074-5fbd-4078-bd30-374b5e89ea42.png) + + +We make the active choice of not connecting infrastructure platform / automation stack directly to the blockchain, for example via its Offchain Worker Interface, but we introduce an intermediate component called "Chain Reactor." + +The Chain Reactor is responsible for orchestrating infrastructure according to decisions taken on chain. The most prominent actions would be to deploy infrastructure as a descriptor is awarded or tear down infrastructure as a deployment reaches its termination. + +In order to fulfill the constraints above, Chain Reactors must be easy to implement using any infrastructure automation stack on any suitable language, and it must be simple to do so. Whether Python/Ansible, Java/Cloustack, Go/Terraform, Go/Helm, Python/Juju, etc. Chain Reactors must rely on programming language-agnostic API specifications/tooling such as OpenAPI/swagger for generating stubs in any language that can be used as base for implementation. + +**Technology Stack Used** + +In line with the strategy decided above, this project will focus on a minimal viable product while honoring the constraints and architecture above. + +The components generated must also serve as "Reference Implementation" to community members willing to generate similar implementations for other infrastructure platforms or solutions. + +The Stack for the current MVP will be made of: + +- Apache CloudStack: As Infrastructure Platform +- Ansible / Python: As tooling for implementing a Chain Reactor. +- Substrate: For DINFRA Parachain +- Gitlab CD/CI: For Reference Implementation of Automated Testing and CI/CD. +- Docker Compose: For rapid development setup. +- Gitlab CD/CI: for End to end Itegration testing, to avoid regression when new Apache CloudStack versions are released. + + +**Scope** + +Lots of the features that we pitch in our DINFRA [video presentation](https://vimeo.com/800524188) are left out of the scope of this phase. DINFRA opens a lot of exciting possibilities but it is important to remain in focus and deliver a MVP useful for development and bringing community awareness now. + +**What DINFRA is not** + +DINFRA is not an Infrastructure Provider for the Dotsama ecosystem, but rather a parachain designed to arrange deployments between infrastructure consumers an infrastructure providers in a decentralized way. + +DINFRA may provide concrete infrastructure automation modules, but they will be open-source and infrastructure providers will be able to use them, modify them or utilize as reference implementation for their own. + +DINFRA is not meant to deliver a company or venture but rather a decentralized community that follows Polkadot's governance model and serve our ecosystem first. + +DINFRA will not become a way to just "open" infrastructure to the whole world. Blockchain features may be used for consumers to pick specific providers, providers to accept specific consumers even for consumers to manage their own infrastructure in a private way. Completely public infrastructure remains a valid use case but would benefit from on-chain features such as reputation, arbitrage, deposits, offenses, etc for it to be practically viable. + +### Ecosystem Fit + +As we can see with [Polkawatch](https://blog.polkawatch.app/introducing-polkawatch/), our infrastucture plays an important role in the level of effective decentralization of Substrate Validation process. + +Our treasuries invest significant funds on infrastructure, for which our ecosystem counts with fantastic providers. However, it is becoming clear that our ecosystem needs strategic actions at infrastructure level. Some projects have already been started by our treasuries, a good example being the [Infrastructure Builders Program](https://ibp.network/). + +DINFRA intents to provide an strategic approach to managing our ecosystem infrastructure using our biggest asset: Substrate itself. + +On the other hand our ecosystem is investing significant effort on Decentralized Finance. A successful DINFRA parachain, used to arrange delivery of our own infrastructure, would channel significant resources becoming effectively a Web3 commodity: a currency that everybody in our community needs and uses, backed by real, tangible, infrastructure services. This would provide health to our DEFI community as DEFI is often criticized for baking tokens with tokens non of which are backed by "real" assets. Commodities play an important role in traditional economies and the same could apply to our ecosystem. + +The target audience of DINFRA is therefore our Governance bodies, infrastructure providers, infrastructure consumers (Parachains, DAPPs, etc), and on the other hand substrate, UI and infrastructure engineers willing to contribute. + +Regarding similar projects, on top of strategic programs launched by our treasuries there is also [ThreeFold](https://www.threefold.io). An impressive decentralized infrastructure venture which utilities substrate technology while not being formally part of our ecosystem. We had the pleasure to meet their friendly team during the last Sub0 conference in Portugal and their experience was instrumental in realizing that DINFRA is far from a technological-only challenge and needed key design constraints for it to be acceptable to our ecosystem: inclusive to current infrastructure providers, non technically opinionated, community governed, strategically designed to serve our community first, etc. + +At a different level DINFRA is an attempt to orchestrate a set of independent providers that will appear to the consumer as a single entity. Effectively DINFRA could become a decentralized alternative to Public Clouds in the long term. Lessons learned from DINFRA could apply to other industries too. Any industry with an existing level of automation and many independent players could be orchestrated similarly + +## Team :busts_in_silhouette: + +### Team members + +- Rafael del Valle López +- René Moser + +### Contact + +- **Contact Name:** Rafael del Valle Lopez +- **Contact Email:** rvalle@valletech.eu +- **Website:** https://valletech.eu + +### Legal Structure + +- **Registered Address:** Blåmesv. 26, 186-47 Vallentuna, Sweden +- **Registered Legal Entity:** Valletech AB, Org. Num: 5590673694 + +### Team's experience + + +Rafael lives with his family in Sweden and has over 20 years experience creating Software Product, Services and Ventures. In the last years has started to contribute to Open Source projects in the Infrastructure field. A significant contribution to Open Nebula was the [Python Bindings](https://opennebula.io/pyone-python-bindings-for-open-nebula/), now part of the official distribution. More recently the [Privaz.io](https://privaz.io) project was created with the goal to facilitate the adoption of Private Clouds by small projects. Privazio is currently in use to deploy [Polkawatch](https://blog.polkawatch.app/introducing-polkawatch/), a Web3 Foundation project currently in production and backed both by Polkadot and Kusama treasuries. + +René Moser lives with his family in Switzerland and have been a software and systems engineer for over 20 years. René is co-author of [O'Reilly's "Ansible: Up & Running"](https://www.oreilly.com/library/view/ansible-up-and/9781098109141/) and longtime open source software developer and author of many Ansible Cloud Provider Automation integrations, such as Vultr, CloudStack, Exoscale, cloudscale.ch, Hetzner and became member of the Ansible Core Contributors Team. Furthermore, René is Apache Foundation CloudStack Project Management Committee member since 2015 and founded my own company [moser-systems.com](https://www.moser-systems.com/) with focus on "Cloud Automation, Scaling and Integration." currently delivering its flagship project [ngine.io](https://www.ngine.io/), a platform for cloud-agnostic services including autoscaling which has been released as open source software "[scalr](https://ngine-io.github.io/scalr/)". + + +René and Rafael met during an open source collaboration to deliver new Apache CloudStack automation features. + +### Team Code Repos + +- https://gitlab.com/polkawatch/polkawatch +- https://github.com/ngine-io/scalr +- https://github.com/ngine-io/ansible-collection-cloudstack +- https://gitlab.privaz.io/privazio + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/rvallel/ +- https://www.linkedin.com/in/resmo/ + + +## Development Status :open_book: + +The project has not started formal implementation yet. However we have performed a viability check of required deliverables. + +Most infrastructure deliverables belong to our domain of expertise per contributions made in the past to other open source projects, therefore is easy for us to ensure its viability. Intermediate interfaces don't have technical risk, they have important technical requirements when considering our project constraints but they are straight forward to deliver. + +Substrate deliverables are newer to us and imply a learning curve, however the amazing resources put together by the community at [substrate.io](https://substrate.io/): the tutorials, test frameworks, etc have allowed us to verify their viability. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3.5 months +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 47.000 USD + +### Milestone 1 — Infrastructure Provider SDK + +- **Estimated duration:** 1.5 month +- **FTE:** 1 +- **Costs:** 20.000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can test functionality, implement a Chain Reactor, etc. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Chain Reactor API | We will create the API for Chain Reactors using API technologies (OpenAPI or similar) that facilitate language-agnostic implementations. | +| 2. | Chain Reactor RI | We will implement a Chain Reactor Reference Implementation based on Apache CloudStack that can run against the Apache CloudStack Simulator to facilitate further development. The RI will be written in Python as programming language and Ansible as automation stack| +| 3. | Chain Reactor RI Test Suite | We will release a comprehensive set of Chain Reactor RI Unit tests that should serve as guideline for TDD of other implementations, implmented with Python. | +| 4. | CD/CI Chain Reactor RI | Gitlab Pipelines will be created for Chain Reactor Reference Implementation that must serve as guideline to other implementations | +| 5. | SSH Key Derivation | A viability study and implementation of converter of Substrate Account Keys into SSH Keys based on ed25519. Implemented with NodeJS| +| 6. | Substrate Deployment Descriptors | Documented Examples of Deployment Descriptors for the Chain Reactor RI will be provided that would spawn Substrate Nodes under DINFRA.| + + +### Milestone 2 — Substrate Parachain + +- **Estimated duration:** 2 month +- **FTE:** 1 +- **Costs:** 27,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can run, test and contribute to the DINFRA parachain. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | DINFRA Provider Pallet | It will allow for Accounts to register as providers, Providers to declare supported Deployment types and avilable capacity. Will Assign Deployments to Providers by simple means such as Round Robin, Random or Capacity Based. Implemented with Substrate/Rust.| +| 2. | DINFRA Subscription Pallet | It will represent a simple Subscription to pay for a deployment. Cost will be fixed per block. Deployments will be teared down when allocated Balance is consumed. Consumers will be able to cancel Subscriptions and any time, tearing down the deployment. Implemented with Substrate/Rust. | +| 3. | Chain Reactor Interface | A Substrate Interface will be created with Providers Chain Reactors so that Deployment Contracts can be Deployed and Teared Down. The interface will be based on standard Substrate interfaces OCW, RPC and/or sidecar service / REST | + + +## Future Plans + +We intend to continue to our second phase in the plan as described in our video presentation. We will use the deliverables from this release to: + +- Setup a DINFRA Test Network +- Generate awareness in our community +- Allow the community to test the system +- Pitch and demo: Treasuries, Infrastructure Providers, Developers +- Seek launching DINFRA with specific Dotsama use cases. + From 8a0cc8250f3006fffc1952edb1e830b20a8e3f21 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 14 Apr 2023 15:59:37 +0200 Subject: [PATCH 247/665] Update index.md Add DINFRA --- applications/index.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/applications/index.md b/applications/index.md index d53d9e5de48..a57fa1dc6c4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -43,6 +43,9 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | +| [Valletech AB](https://valletech.eu/) | [Polkawatch](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | + + [🔝](#menu) ### 🏄‍♀️ Wave 17 - Q1 2023 From 6e2e98e0f0f3ad7e10521c6269b1f4471c848ff8 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 14 Apr 2023 15:59:56 +0200 Subject: [PATCH 248/665] Update index.md Fix DINFRA name --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a57fa1dc6c4..08e853de818 100644 --- a/applications/index.md +++ b/applications/index.md @@ -43,7 +43,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | -| [Valletech AB](https://valletech.eu/) | [Polkawatch](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | +| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | [🔝](#menu) From 980f8a5491d54ac4e3cd552fb6004c4b619284a4 Mon Sep 17 00:00:00 2001 From: sixTheDave <92546294+sixTheDave@users.noreply.github.com> Date: Sat, 15 Apr 2023 23:35:09 +0200 Subject: [PATCH 249/665] Actualize QRUCIAL DAO status, final date for Milestone 2 and team/legal state updates. (#1662 - Final deadline for Milestone 2: 2023 June. - Team update: adding kmildi as frontent developer, removing those who are not part of the team anymore. - Developer legal entity update: Crypto CTF OU (CCTF) takes care from the project from this point. QRUCIAL's company entity will be either disbanded or sold in the next month due to the bear market and that the CEO left. The DAO runs without a company and on it's own. - Contact and address update. --- applications/QRUCIAL_DAO.md | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/applications/QRUCIAL_DAO.md b/applications/QRUCIAL_DAO.md index e6d26ef3e45..73d872b832d 100644 --- a/applications/QRUCIAL_DAO.md +++ b/applications/QRUCIAL_DAO.md @@ -4,8 +4,8 @@ > > See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. -- **Team Name:** QRUCIAL OÜ -- **Payment Address:** BTC - bc1qwr7awq55z2udjvxj0ar7qfeasf70fasee8fxf2 +- **Team Name:** QRUCIAL DAO +- **Payment Address:** BTC - 32V2Qmk2xNVddNNvwxGPDhdsofLJr6Gcsa - **Level:** 2 > ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* @@ -84,25 +84,23 @@ CCTF provides a proven track record of hackers solving challenges and based on t ### Team members - Web3 Architect: six / David Pethes - CTO of QRUCIAL, Founder of CCTF, Polkadot Head Ambassador of Eastern Europe -- Business Architect: ra33it0 / Sebastian Kraus - CEO of QRUCIAL, EFF member - Runtime Developer: Wigy / - Senior Rust developer, Ex-Parity substrate core developer -- Full-stack Developer: Silur / Ábrahám Endre - Researcher at Hungarian Academy of Sciences (MTA), Ex-Ethereum Foundation developer -- DevOps Engineer: knockoff / Nico Selby - R&D team manager at QRUCIAL +- Frontend Developer: kmildi / Ildiko Keleti - Senior Web3 Frontend developer ### Contact - **Contact Name:** six / David Pethes -- **Contact Email:** hello@qrucial.io +- **Contact Email:** six@cryptoctf.org - **Website:** qrucial.io ### Legal Structure - **Registered Address:** Harju maakond, Tallinn, Kesklinna linnaosa, Narva mnt 7-652, 10117 -- **Registered Legal Entity:** QRUCIAL OÜ, Registration number: 16357543 +- **Registered Legal Entity:** Crypto CTF OÜ, Registration number: 16156552 ### Team's experience -QRUCIAL OÜ is a web3 security company. +QRUCIAL is a web3 security DAO. This is the first time we apply for a grant. @@ -170,7 +168,7 @@ The PoC is working, and we want to move forward in developing a live testnet ver ### Milestone 2 — Implement Exogenous tooling and hardened node system -- **Estimated duration:** 2 months +- **Estimated duration:** 2 months (final delivery in 2023 June) - **FTE:** 0.7 FTE - **Costs:** 20,000 USD @@ -188,9 +186,8 @@ The PoC is working, and we want to move forward in developing a live testnet ver ## Future Plans -- In the short term, we'd like to have the grant, so development goes faster. QRUCIAL as a company will keep funding the project until it becomes self-sustaining (meaning, the governance system keeps the DAO running on its own). +- In the short term, we'd like to have the grant, so development goes faster. QRUCIAL DAO keeps funding the project on its own. - CCTF (cryptoctf.org) is already a partner, helping to bring the best web3 hackers to the system. -- Elfz'n'Trollz is a marketing partner, so we don't just develop a DAO, but also make it usable and visually acceptable to all audiences. - After final milestone, we will start building a larger community for QRUCIAL DAO and improve our partnership with CCTF. ## Additional Information :heavy_plus_sign: From fd1e32c3b1868783337f22e1ce15119f5a1fa4b6 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Sat, 15 Apr 2023 18:35:38 -0300 Subject: [PATCH 250/665] Update index.md to check Eightfish first delivery (#1673) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 08e853de818..fdc88994f58 100644 --- a/applications/index.md +++ b/applications/index.md @@ -54,7 +54,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | -| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☐ | ☐ | +| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | From 344bada719fd40c4bc7c37324f15510a9e540d9a Mon Sep 17 00:00:00 2001 From: yyd106 Date: Mon, 17 Apr 2023 14:20:07 +0800 Subject: [PATCH 251/665] Create dauth_network.md (#1655) --- applications/dauth_network.md | 176 ++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 applications/dauth_network.md diff --git a/applications/dauth_network.md b/applications/dauth_network.md new file mode 100644 index 00000000000..d9837e6654a --- /dev/null +++ b/applications/dauth_network.md @@ -0,0 +1,176 @@ +# DAuth Network + +- **Team Name:** DAuth +- **Payment Address:** 0x09C08f46d523822cC9D18A077e2e3BDE5BC07a0b (Ethereum (USDC)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +This grant is for the RFP [Social Recovery Wallet](https://github.com/w3f/Grants-Program/blob/master/rfps/social-recovery-wallet.md) + +### Overview + +#### Background + +As the [RFP](https://github.com/w3f/Grants-Program/blob/master/rfps/social-recovery-wallet.md) mentioned: "managing private keys is a difficult task." The next billion users who will enter Web3 will have a hard time entering without the empowerment of social accounts. The Web3 ecosystem needs Web2 functionality that keeps the underlying system decentralized. + +Most of the current authentication is based on the centralized OAuth and SMTP protocol framework. These protocol frameworks will make the authentication service providers becoming centralized collectors of user Web2-Web3 information (although this is not their intention). This massive collection of user data poses a significant risk of exposing the user's identity and assets, ultimately compromising the security and privacy of Web3. + +#### Description + +DAuth is an improved and adapted version of OAuth for the Web3 ecosystem, providing native privacy and trustless social account access for Wallets, Decentralized Identifiers (DIDs), and Decentralized Applications (DApps). + +#### Our solutions + +In contrast to OAuth, SMS, and SMTP protocols, which rely on centralized servers and third-party services to verify user identities and send messages, DAuth uses blockchain and ZK technologies to provide a trustless authentication and verifiable profile aggregation that enhances trust, privacy, and security on the Web3. This means that users can authenticate their social accounts without revealing their identities. Moreover, DApps can send Emails and SMS messages to their subscribed users while keeping the user's email addresses and phone numbers private at the same time, giving the users greater control over their personal data and enhancing their privacy. + +##### Decentralized OAuth + +The DAuth adapts the mainstream OAuth service providers such as Google, Github, and Twitter for users to be able to pass the authentication of their social accounts without disclosing any information about it. This is because the whole authentication information is managed by the TEE and then a ZK proof is generated and passed onto the DApp proving that the user has authenticated. + +![doauth](https://1856926917-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZQcs7KxlVGgyCzI42uny%2Fuploads%2Fq04aO4bPez5YK61OqgRI%2Fimage.png?alt=media&token=e1ab8870-a552-4c22-8011-212c1bbd9e99) + +##### Decentralized Email + +This anonymous mechanism is based on the reconstruction of the SMTP protocol. SMTP allows proxy servers to send emails to a given email address. When the DAuth node gets an email request, the enclave will translate the web3 address to the user's email accordingly, and the enclave will establish an SMTP channel with the email service provider. The key point is that the channel will be encrypted with a TLS handshake between the DAuth Enclave and the email service provider, which will keep the user's email address invisible to the DAuth node. + +![dmail](https://1856926917-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FZQcs7KxlVGgyCzI42uny%2Fuploads%2FMixRhVaMs0CnRHaN7ueB%2Fimage.png?alt=media&token=809e0d06-b309-4e5a-bd2e-5099f35366b2) + +### Project Details + +#### Documentations + +- Project overview PPT [here](.com/view/fem479hkgc9hc5ck) +- Project Docs [here](https://dauth.gitbook.io/dauth-docs/dauth-network/introduction) + +#### POC + +We have completed a proof-of-concept to verify the feasibility of our solutions [here](https://demo.dauth.network/auth). + +#### Technology Stack + +* DAuth Node: A DAuth Node is the basic unit of DAuth Network. DAuth Network will consist of nodes from several institutions in its early stage. In the future, the number of nodes will gradually expand with the increase in the security and stability of the DAuth Network. +* Secure Enclave: DAuth Enclave uses Trusted Execution Environment (TEE) technology to handle social account authentication in a anonymous way. That is also the part the ZK technology can't do for now. TEE is hardware technology that is leveraged on each DAuth node. The TEE protects the core data of the users from being tampered with by the DAuth nodes. +* Zero Knowledge Authentication: Zero-Knowledge Proofs are the best way to handle authentication problems since it keeps information private. DAuth uses zero-knowledge as an identity credential generation for users. However, the current ZK technology can not make social account authentication anonymous so we use TEE technology as an add-on module for anonymity protection and use ZK for credential generation. + +#### Scope + +There are a lot of tasks involved to get all of these into a product-ready state which is what we are always aiming for, but it'd be too extensive to fit all of the tasks into this one single open grant. Therefore, we have carved out a scope specifically for this grant, followed by the details of the future tasks. + +**Grant scope** + +- Develop TEE module(written in Rust) that supports basic Google OAuth. +- Develop TEE module(written in Rust) that supports basic Email auth flow. +- Develop TEE module that generates proofs for user authentication. +- Develop off-chain node program(written in Rust) that coordinating with TEE module. +- Develop on-chain protocol (written in ink! smart contract) that organizes all TEE nodes into a functioning network. +- Contribute SDKs for dApps and wallets in Polkadot ecosystem, such as Clover and zCloak, so that users in Polkaodt ecosystem can have a trustless and private social login to their Web3 accounts. + +**Future development** + +- Implement more functions in TEE, such as ZK proof. +- Accept nodes endorsed by more organizations. +- Support more authentication methods such as Twitter and Discord. + +### Ecosystem Fit + +- Generally, their are many wallets in Polkadot ecosystem that planning to provide social login functions in the trend of Account Abstraction and MPC wallet. DAuth will make all the wallets trustless, verifiable, private, and fully decentralized. + +## Team :busts_in_silhouette: + +### Team members + +- Name of team leader: Dean Yan +- Names of team members: Michael A. Hanono, Scott Zhang + +### Contact + +- **Contact Name:** Dean Yan +- **Contact Email:** yyd106@gmail.com +- **Website:** https://www.linkedin.com/in/dean-yan-717784100/ + +### Legal Structure + +- No legal entity yet + +### Team's experience + +- Dean is the author of technical whitepaper of [Crust Network](https://crust.network/) + +### Team Code Repos + +- https://github.com/DAuth-Network/dauth-demos + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/orgs/DAuth-Network/people/yyd106 +- https://github.com/orgs/DAuth-Network/people//mike-hanono +- https://github.com/orgs/DAuth-Network/people/scott0927 + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/dean-yan-717784100/ +- https://www.linkedin.com/in/michael-hanono/ + +## Development Status :open_book: + +We completed a [prototype system](https://demo.dauth.network/auth/) to verify technical feasibility. +The relevant [RFP is here](https://github.com/w3f/Grants-Program/blob/master/rfps/social-recovery-wallet.md) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 8 months +- **Full-Time Equivalent (FTE):** 3 +- **Total Costs:** $27,000 (payable in Ethereum-USDC) + +### Milestone 1 — Implement On-chain Modules + +- **Estimated duration:** 6 month +- **FTE:** 3 +- **Costs:** 15,000USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use DAuth. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Core Protocol | Implements the `nodeRegister` `userRegister` `userAuthentication` and `keyRecovery` functions for Node program written in Rust. | +| 2. | TEE Implementation | Implements the `nodeRegister` `userRegister` `userAuthentication` and `keyRecovery` functions for TEE part written in C++. | +| 3. | Smart Contract | Implements and test for the !ink smart contracts used for `nodeRegister` and `userRegister`. | +| 4. | Web Server | Provide meta-data management service for DAuth users written in Rust, users can manage keys and authentication methods | +| 5. | Polkadot.js | Add in encryption/decryption functionality to `@polkadot/keyring` and `@polkadot/extension` so that the protocol can run without the needs to read the private key of users. | + +- **Estimated duration:** 2 month +- **FTE:** 3 +- **Costs:** 12,000USD + +| Number | Deliverable | Specification | +| -----: | ------------------- | ------------------------------------------------------------ | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a project can integrate the DAuth Protocol into their project. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | SDK | Cooperation with multiple wallet providers, they will integrate DAuth in their authentication flow | +| 3. | Support mainstream authentication methods | Provide multiple authentication methods such as Google, Email, Github and other authentication methods. | + +## Future Plans + +- Accept nodes endorsed by more organizations. +- Support more authentication methods such as Twitter and Discord sign-in. +- Open DAuth network to public, espacially to Authentication solution providers. + +As a long-term business model, we have following plans to make DAuth powerful and secure: + +- Implement more functions in TEE, such as ZK proof on the authentication result. +- We will support more TEE implementations, such as Trusted Zone of ARM, SEV of AMD; + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Announcement by another team + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +Dean's Crust Network and Mingshi's Astart Network are both projects of Web3 Grants. From fb0b386520f27775db709d232d221043ce6629a6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 17 Apr 2023 08:22:59 +0200 Subject: [PATCH 252/665] Update index.md Add DAuth --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index fdc88994f58..a549b0bed0c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -44,6 +44,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | +| [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | [🔝](#menu) From f67893b2571a9879f56a9c3159a69f16baa66a58 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 18 Apr 2023 02:43:43 -0400 Subject: [PATCH 253/665] Update new-order.md (#1677) --- applications/new-order.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/new-order.md b/applications/new-order.md index 35105c1dab2..fa1ad95b0c9 100644 --- a/applications/new-order.md +++ b/applications/new-order.md @@ -3,7 +3,7 @@ * **Team Name:** Standard Protocol * **USDC Payment Address:** 0xd2234E506862991ADA75f930c6D79B4236e3E265 * **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - +* **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1160#issuecomment-1481821012) ## Project Overview :page_facing_up: ### Overview From 253be04f6c998be5a9224ed5064ec1d98fb6308a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 18 Apr 2023 04:08:26 -0400 Subject: [PATCH 254/665] Terminate helixstreet.md (#1676) --- applications/helixstreet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/helixstreet.md b/applications/helixstreet.md index 7d619d02ce5..fc485941d79 100644 --- a/applications/helixstreet.md +++ b/applications/helixstreet.md @@ -3,7 +3,7 @@ - **Team Name:** helixstreet - **Payment Address:** bc1qvu2mjjm602rqshwkspy2v7a6wke529uzkucnej - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/820#issuecomment-1442461748) ## Project Overview :page_facing_up: From 7cbdefbc77d2ab39e5ff467d4edce46d449102df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 18 Apr 2023 10:13:28 +0200 Subject: [PATCH 255/665] Update index.md Mark Helixstreet as terminated --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a549b0bed0c..a790ef172af 100644 --- a/applications/index.md +++ b/applications/index.md @@ -257,7 +257,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Hamster](https://github.com/orgs/hamster-shared) | [Hamster - A decentralized computing network](./hamster.md) | [GitHub](https://github.com/orgs/hamster-shared) | ☐ | ☒ | ☒ | | [Papers GmbH](https://papers.ch/en/) | Zaturn - A Generic Attestable Oracle parachain Phase 1 | [GitHub](https://github.com/airgap-it) | ☐ | ☒ | ☒ | | [Slonigiraf](https://www.slonigiraf.org/) | [SLON - a recommendation letter system](./slonigiraf.md) | [GitHub](https://github.com/slonigiraf) | ☐ | ☒ | ☒ | -| [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☐ | ☐ | ☐ | +| [Helixstreet](https://helixstreet.io/) | [Helixstreet Module](./helixstreet.md) | [GitHub](https://github.com/helixstreet) | ☒ | ☐ | ☐ | | [Cryptoviet](https://team.cryptoviet.com/) | [Gafi Network - The Network of Game Finance](./Gafi.md) | [GitHub](https://github.com/cryptoviet/gafi) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Metaverse for next generation gaming](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☐ | ☒ | ☒ | | [CESS LAB](https://www.cess.cloud/) | [Data Store Pallet](./ces_data_store.md) | [GitHub](https://github.com/CESSProject/cess) | ☐ | ☒ | ☒ | From f9ad818f84949e256206a751c848272516bb6f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 18 Apr 2023 10:17:47 +0200 Subject: [PATCH 256/665] Update index.md Mark New Order as terminated --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a790ef172af..6b677a53ea5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -189,7 +189,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CESS LAB](https://www.cess.cloud/) | [Substats (The framework of lightweight block explorer)](./substats.md) | [GitHub](https://github.com/CESSProject) | ☐ | ☒ | ☒ | | [Polket](https://toearn.fun) | [ToEarnFun](./polket_toearnfun.md) | [GitHub](https://github.com/polketio/polket-node) | ☐ | ☒ | ☒ | | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☒ | ☐ | -| [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☐ | ☐ | ☐ | +| [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☒ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | [🔝](#menu) From f405fdd0e7a731d88eff0cb37ca1891e772914b9 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 18 Apr 2023 04:21:20 -0400 Subject: [PATCH 257/665] Terminate keysafe_network.md (#1678) --- applications/keysafe_network.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/keysafe_network.md b/applications/keysafe_network.md index 475c04339c5..da1d7e5b31e 100644 --- a/applications/keysafe_network.md +++ b/applications/keysafe_network.md @@ -3,7 +3,7 @@ - **Team Name:** Keysafe - **Payment Address:** 0x09C08f46d523822cC9D18A077e2e3BDE5BC07a0b (Ethereum (USDC)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 - +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/947#issuecomment-1512008998) ## Project Overview :page_facing_up: This grant is for the RFP [Social Recovery Wallet](https://github.com/w3f/Grants-Program/blob/master/rfps/social-recovery-wallet.md) From c33df23a59f71f002b2f64aa5f1f22aa6ef39e28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 18 Apr 2023 10:23:55 +0200 Subject: [PATCH 258/665] Update index.md Mark Keysafe as terminated --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 6b677a53ea5..e3cd87e796f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -214,7 +214,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | | [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | | [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | -| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☐ | ☒ | ☐ | +| [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☒ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | | [Relationlabs](https://relationlabs.ai/#/home) | [Relation Graph](./Relation-Graph.md) | [GitHub](https://github.com/relationlabs) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig](./pallet_supersig.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | From 9dc4a58a2bd7f0bf05f9084b105741dbae318f8d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 18 Apr 2023 14:43:05 +0200 Subject: [PATCH 259/665] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 7f0dca4ee3b..01c367d75fa 100644 --- a/README.md +++ b/README.md @@ -319,6 +319,7 @@ The best way to find out about upcoming hackathons is by following Polkadot on t Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) +- [Aleph Zero Funding Program](https://alephzero.org/ecosystem-funding-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) - [Crust Grants Program](https://github.com/crustio/Crust-Grants-Program) - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) From 522f2c23556592e728cbbaebe29b5306685632c0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 18 Apr 2023 14:43:57 +0200 Subject: [PATCH 260/665] Update funding.md Add Aleph Zero Funding Program --- docs/funding.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/funding.md b/docs/funding.md index 77cdfa95bcf..15bfbc9d6df 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -25,6 +25,7 @@ The best way to find out about upcoming hackathons is by following Polkadot on t Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) +- [Aleph Zero Funding Program](https://alephzero.org/ecosystem-funding-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) - [Crust Grants Program](https://github.com/crustio/Crust-Grants-Program) - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) From 6a5f9b0014bc57dc8c7f6f74a4c9671d1307c9d0 Mon Sep 17 00:00:00 2001 From: Igor Berlenko Date: Wed, 19 Apr 2023 14:08:50 +0800 Subject: [PATCH 261/665] galaxy.md revision 3 (#1642) --- applications/galaxy.md | 211 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 applications/galaxy.md diff --git a/applications/galaxy.md b/applications/galaxy.md new file mode 100644 index 00000000000..4a1bd81231b --- /dev/null +++ b/applications/galaxy.md @@ -0,0 +1,211 @@ +# Galaxy: Three-dimensional Web for Polkadot Users + +- **Team Name:** Galaxy.Do +- **Payment Address:** 0xF1dcdA1C9E76BBf32791da01e464A3F55bd7000c (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +![image](https://user-images.githubusercontent.com/4569866/228949639-f89bb602-59c5-4b30-917e-8a8b3cdebc20.png) + +Web has revolutionized the way we organize and explore knowledge. + +Although web pages digitalized physical documents, they also inherited some of limitations. + +That's the reason most web pages are vertically scrollable, in one dimension only, imitating physical predecessor. + +Whiteboards expanding it's space into second dimension leverage human ability of spatial awareness to enhance the understanding. + +As hyper text links navigate user in between of web site pages, same way whiteboards can be also inter-linked to expand information into a third dimension. + +Then multiple related whiteboards can be rendered as layers on the same canvas with seamless transition in between the layers, thus expanding the knowledge into a third dimension. + +That's the quintessence of Stretch Text concept, which makes it possible to express interconnectedness of all knowledge (intertwingularity) + +**Current grant is offering to develop canvas-based browser which allows polkadot users to create, organize, and share knowledge leveraging three-dimensional Stretch Text space.** + +### Project Details + +#### 1. Frontend - Excalidraw + +![image](https://user-images.githubusercontent.com/4569866/228949713-8de6ff8c-fdde-41ab-8ae9-d895ab3e7b02.png) + +The scene is represented as an object; it contains UI State, list of elements, and files cache. + +Whenever the elements on the scene updated, it triggers rendering of the canvas. + +Each element is represented as an object too: text, images, shapes. + +If given element object has a text field, then each line of the text passed to fillText canvas method. + +If given element is an image though, it's content is fetched from files cache, and then passed to drawImage canvas method. +Files cache is simply a mapping from image content hash to the blob content. + +UI implemented in React rendering on top of the canvas allows to seamlessly create and manipulate the elements on the canvas. + +Selected elements can be joined into groups, and then selected groups can be serialized and saved as a separate layers. + +As user navigates across an infinite canvas, the layers outside of viewport can be unloaded and relevant layers appear. + +#### 2. Networking - Polkadot + +![image](https://user-images.githubusercontent.com/4569866/228949758-62d6cc1e-ed11-493e-800d-846857aaebcb.png) + +Each layer can be serialized into JSON file and then saved to IPFS. + +User who created the layer, then makes a transaction to claim ownership of it. + +In the transaction, user is passing IPFS link and chosen Layer Name. + +The smart contract deployed on the pallete, maintains the mapping from Layer Link to IPFS Link. + +Layer Link is represented as deep link in format of `galaxy://`. + +#### 3. Backend - Chisel + +![image](https://user-images.githubusercontent.com/4569866/228949811-b22de278-3e80-4cf1-8b45-c1e8dcb31879.png) + +Galaxy Browser consist of frontend app, backend server, and database. + +REST API implemented in Rust is running a Deno runtime to handle the network requests in between frontend and database. + +When user opens a deep link, layer loading will be handled by backend endpoint which returns the scene object in response to frontend request. + +Same endpoint will first resolve Layer Link to IPFS link through polkadot as described above, then fetch content of IPFS link, +perform validation of deserialized content to ensure it corresponds scene schema, then save every element as a separate object +in the database, then fetch images and save them to database as well, and then consturct a scene object. + +*The proposed architecture also allows to implement more advanced features: search across different layers, tagging and versioning, recommendations, parallel tranclusion, and microtransactions.* + +### Ecosystem Fit + +Here open for suggestions. Specifically to consider partnerships with: wallets, storage solutions, content sharing platforms and social networks, copyright and microtransaction services. + +## Team :busts_in_silhouette: + +### Team members + +### Contact + +- **Contact Name:** Igor Berlenko +- **Contact Email:** igorberlenko7@gmail.com +- **Website:** https://galaxy.do + +### Legal Structure + +Opensource Code. Governance with DHO (Hypha DAO). + +https://github.com/hypha-dao/hypha-substrate + +### Team's experience + +My profile: + +- https://github.com/7flash + +Relevant repositories I have contributed to: + +- https://github.com/excalidraw/excalidraw +- https://github.com/chiselstrike/chiselstrike +- https://github.com/zsviczian/obsidian-excalidraw-plugin +- https://github.com/JoinSeeds/seeds_light_wallet +- https://github.com/ColdStack-Network/blockchain + +## Development Status :open_book: + +The Galaxy Browser is all inspired by Xanadu Spaces, and particularly the architecture described above solves the problem of "Browser Law" articulated by Ted Nelson in following video: + +https://www.youtube.com/watch?v=kV_vYkSmkxk + +In the next video I showed a short demo of Galaxy Browser with additional features such as layers transitions, command palletes, contextual GPT, and StableDiffusion-bookmarks. + +https://www.youtube.com/watch?v=8Y7_gvmMyKY + +The demo implementation is made possible because of Zsolt work on his Obsidian plugin excalibrain. + +These might be relevant discussions in Excalidraw: + +Layers: https://github.com/excalidraw/excalidraw/issues/6266#issuecomment-1439488787 + +Pinned Anchors: https://github.com/excalidraw/excalidraw/issues/3276#issuecomment-1246985074 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 USD + +### Milestone 1 — Proof of Concept + +- **Estimated duration:** 1 week +- **Costs:** 2,500 USD +- **First Milestone is PoC implements following scenario:** + +User opens Galaxy Web App, connects Polkadot Wallet, draws some elements, clicks button to save layer to IPFS and shares a link. +Another user opens the app, choose to load layer from IPFS, inserts the received link, and can see the elements created by first user appear on his canvas. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Frontend: Galaxy Web App | A new repository which integrates Excalidraw whiteboard with Polkadot wallet and IPFS storage | + +### Milestone 2 — Minimal Valuable Product + +- **Estimated Duration:** 3 weeks +- **Costs:** 7,500 USD +- **Second Milestone is MVP implements following scenario:** + +User installs desktop Galaxy App, opens "galaxy://" deep link which is resolved to IPFS, scene is rendered on canvas. User adds other elements on the scene and saves them into a new layer. User closes and reopens the app. He can see both layers with images loaded from database instantly. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** and **video** that explains how to setup and use the Galaxy Browser. | +| 1. | Galaxy Browser | Complete App to organize, share and explore knowledge | +| 2. | Smart contract | It will allow users to claim ownership over layers and resolve Layer Links into IPFS Links | + +### Next Milestones + +**Transclusion scenario** might be beyond the scope of testing promised deliverables but still might be implemented within a timeline: + +User is loading two layers from different wallets into his scene, then saves the whole scene into a new layer with tranclusion of two non-changed layers. +Creators of original two layers receives notification of forked version. +Creator of first layer opens the forked version, only second layer is loaded. It happens because first layer already exist in his database. +Creator of second layer makes changes in some elements which is reflected in combined layer without any actions from creator of combined layer. +It works because during tranclusion, the elements are not copied, and because Layer Link of the original layer remains the same whilst referencing to a different IPFS link. + +**Microtransactions scenarios** will be implemented later. Though worth mentioning here as the most exciting future/feature: + +Different artists publishing their paintings, each painting as a separate Galaxy Layer. +Another user creates a gallery layer with automated script taking the highest ranked paintings into it. +Viewers have to subscribe into the gallery layer to view it. +The subscription payments are distributed in between all of the authors included in the gallery, as well with gallery curators. +Even though viewers can have direct view access to each individual paintings for free, but there is a reason which makes the gallery worth to pay for. That's important to notice, how rearrangement of images on the whiteboard, brings in additional value. +Also notice, how curators managing the gallery are being rewarded along with actual painting authors. +The same mechanics can be applied to any other type of information: news, expert opinions, financial forecasts, etc. +Content Explorers, who rearrange and recommend the most relevant pieces of information in the Web, will be financially incentivized along with actual content creators. + +## Future Plans + +I believe in opensource community to drive the long term development of the project, and of course can see myself leading it as long as needed. + +## Referral Program (optional) :moneybag: + +- **Referrer:** github.com/n13 +- **Payment Address:** bc1q7axtazzhsdttextp0qspueaagv4pgfm5l9ne64 (BTC) + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** personal recommendation + +- Previous grants you may have applied for: https://pomelo.io/grants/galaxy From 9f67519908527ebdcc92f8d8bb40069b2937ca2e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 19 Apr 2023 08:12:13 +0200 Subject: [PATCH 262/665] Update index.md Add Galaxy --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index e3cd87e796f..c7b7d621f8e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -45,6 +45,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | +| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | [🔝](#menu) From 5f1c1106f17033c31b50462fc082ffdc91f13e1e Mon Sep 17 00:00:00 2001 From: cor Date: Wed, 19 Apr 2023 14:09:29 +0200 Subject: [PATCH 263/665] fix: remove incorrect previous jobs (#1675) These descriptions have been submitted without our reviews and are incorrect --- applications/CosmWasmVM-CoreProduct.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/CosmWasmVM-CoreProduct.md b/applications/CosmWasmVM-CoreProduct.md index 98a4cdd579f..ee82ff985e8 100644 --- a/applications/CosmWasmVM-CoreProduct.md +++ b/applications/CosmWasmVM-CoreProduct.md @@ -105,9 +105,9 @@ We are the only team in the Substrate/Polkadot/Kusama ecosystem implementing Cos ### Team's experience -- Hussein Ait Lahcen: Principal Blockchain engineer at Composable Finance, previously Core Rust developer at Parity -- Abdullah Eryuzlu: Substrate Rust engineer at Composable Finance, previously Substrate engineer at Webb.tools -- Cor Pruijs: Software engineer at Composable Finance, previously Software engineer at ConsenSys +- Hussein Ait Lahcen: Principal Blockchain engineer at Composable Finance +- Abdullah Eryuzlu: Substrate Rust engineer at Composable Finance +- Cor Pruijs: Software engineer at Composable Finance ### Team Code Repos From 8062520f8f23ca12331eea876454739025731359 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 19 Apr 2023 15:23:30 +0200 Subject: [PATCH 264/665] Update README.md Add Polkadot Pioneers Prize --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 01c367d75fa..b840448699c 100644 --- a/README.md +++ b/README.md @@ -332,6 +332,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) +- [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) ## :information_source: License From ee38f36541a98b57d4686ad951750c8295fcb2d8 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 19 Apr 2023 15:24:34 +0200 Subject: [PATCH 265/665] Update funding.md Add Polkadot Pioneers Prize --- docs/funding.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/funding.md b/docs/funding.md index 15bfbc9d6df..b4fb5013746 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -38,4 +38,5 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) - [Picasso / Composable Grants Program](https://grants.composable.finance) +- [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) From 5498b1a56d7f7698eb09497dd3e0b41d8bc897fd Mon Sep 17 00:00:00 2001 From: qstnus <81143441+qstnus@users.noreply.github.com> Date: Wed, 19 Apr 2023 12:17:05 -0400 Subject: [PATCH 266/665] Update QSTN.md (#1681) --- applications/QSTN.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/QSTN.md b/applications/QSTN.md index 17e89d5b4bb..4423b4b794b 100644 --- a/applications/QSTN.md +++ b/applications/QSTN.md @@ -187,14 +187,14 @@ Article 3: https://news.bloomberglaw.com/litigation/google-plus-7-5-million-priv ### Overview -- **Total Estimated Duration:** 6 months -- **Full-Time Equivalent (FTE):** 6 employees (2 developers, 3 designers, 1 blockchain architect [Orrin]) +- **Total Estimated Duration:** 12 months +- **Full-Time Equivalent (FTE):** 8 employees (4 developers, 3 designers, 1 blockchain architect [Orrin]) - **Total Costs:** 10,000 USD ### Milestone 1 Example — Implement Substrate Modules -- **Estimated duration:** 6 months -- **FTE:** 6 employees +- **Estimated duration:** 12 months +- **FTE:** 8 employees - **Costs:** 10,000 USD | Number | Deliverable | Specification | From 9b0e8a8321583bb4a95156fddf329951b99d5490 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 20 Apr 2023 02:48:35 -0400 Subject: [PATCH 267/665] Update index.md (#1683) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index c7b7d621f8e..f2860eeff96 100644 --- a/applications/index.md +++ b/applications/index.md @@ -135,7 +135,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | -| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☐ | ☐ | +| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☒ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☒ | ☒ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | From 8f48c8ae8aaf716c0e537af001547937a8d0bf4d Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 21 Apr 2023 02:05:41 -0400 Subject: [PATCH 268/665] Update index.md (#1685) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f2860eeff96..22747a04c5e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -94,7 +94,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☐ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | From b3da543ea11e31047b2782c93ab6d657fba5fa7b Mon Sep 17 00:00:00 2001 From: salaheldinsoliman <49910731+salaheldinsoliman@users.noreply.github.com> Date: Fri, 21 Apr 2023 19:30:46 +0200 Subject: [PATCH 269/665] change payment address (#1690) Signed-off-by: salaheldinsoliman --- applications/Solang_developer_experience_improvements.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/Solang_developer_experience_improvements.md b/applications/Solang_developer_experience_improvements.md index a35324d4ad1..60837b5c973 100644 --- a/applications/Solang_developer_experience_improvements.md +++ b/applications/Solang_developer_experience_improvements.md @@ -4,9 +4,9 @@ - **Contributor Name:** Salaheldin Soliman -- **Payment Details:** USDT (ERC20) +- **Payment Details:** DAI (ERC20) -- **Address**: 0xf19d225a4b7dc1fcc53fbdad5a3d87bce53af3c6 +- **Address**: 0x9036b20920ddf473e796d24afd0fe04d4dde0b68 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 From 96585cb43d18c6fbd1bdc38b548244139472340d Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Fri, 21 Apr 2023 13:57:31 -0400 Subject: [PATCH 270/665] Update index.md (#1689) IPFS Utilities delivered last (2nd) milestone --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 22747a04c5e..b22a4c7df9e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -119,7 +119,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | -| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☐ | +| [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☐ | From ed6d8065af122fdfa9001e96ea76b1e650fa8946 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 09:45:59 +0200 Subject: [PATCH 271/665] Update index.md MOBR M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b22a4c7df9e..8553d299465 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,7 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☐ | -| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | From 25dd54c9e2c868bbd554d27639e3058d49b874a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 10:10:23 +0200 Subject: [PATCH 272/665] Update index.md KMIR M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 8553d299465..1cbd93704ca 100644 --- a/applications/index.md +++ b/applications/index.md @@ -58,7 +58,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | -| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☐ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | | [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | From 6ec64c534ddf2ac10c44c9dbad4e7d903703cafa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 10:23:57 +0200 Subject: [PATCH 273/665] Update index.md Protofire Contract Wizard M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1cbd93704ca..7b336148b0e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -57,7 +57,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | -| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☐ | ☐ | +| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☐ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | From 05cbafc2ae6a7a91adb96ca39127064af3e0690d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 10:29:08 +0200 Subject: [PATCH 274/665] Update index.md Tesseract mobile dapp connection concluded --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7b336148b0e..b919cea7f2a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -323,7 +323,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [LimeChain](https://limechain.tech) | [Subsembly - Support for GRANDPA](./assemblyscript-scale-codec.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☐ | ☐ | | [OpenSquare](https://www.opensquare.network) | [Off-chain voting platform](./OpenSquare_paid_qa_protocol.md) | [GitHub](https://github.com/opensquare-network/) | ☐ | ☒ | ☒ | | [Health Hero](https://www.gohealthhero.com/) | [NFT Product Analytics Suite](./nft_product_analytics_suite.md) | | ☐ | ☐ | ☐ | -| [Tesseract](https://tesseract.one/) | Mobile dApps/Wallet Connection | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☐ | +| [Tesseract](https://tesseract.one/) | Mobile dApps/Wallet Connection | [GitHub](https://github.com/tesseract-one) | ☐ | ☒ | ☒ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace](./dot_marketplace.md) | [GitHub](https://github.com/WowLabz) | ☐ | ☒ | ☒ | | [Perun Network](https://perun.network/) | [Perun Channels - Integration with go-perun](./perun_channels-integration.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | | [InvArchitects](https://www.invarch.io/) | [InvArch - IP Infrastructure for Substrate](./InvArch.md) | [GitHub](https://github.com/InvArch) | ☐ | ☒ | ☒ | From 1ec48b38bd7bbbdc4c616940041f599d324d84d8 Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Mon, 24 Apr 2023 19:50:29 +1000 Subject: [PATCH 275/665] Add payment address: Substrate Tokenomics Survey (#1692 --- applications/tokenomics-survey-2022.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index 6f8a5efdfaa..6423ece3a34 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -1,7 +1,7 @@ # Substrate Tokenomics - **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) -- **Payment Address:** To be provided (e.g. 0x8920... (USD)) +- **Payment Address:** 15WoVugRLfBAogS1FBmhzxVv8WZqZK1z4KKHALijTZfdVcCm (USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview :page_facing_up: From df00e99cf1296cfbbd0f72b913a8434c4e4f09d9 Mon Sep 17 00:00:00 2001 From: Conor Svensson Date: Mon, 24 Apr 2023 13:11:40 +0200 Subject: [PATCH 276/665] Sirato (formerly Epirus) Substrate phase 3 grant application (#1608 * add Sirato Substrate phase 3 * Add specific integration details for Frontier EVM * Update price and duration * Update to just focus on blocks and extrinsics support * Replace delivery with milestone * Update level to 2 --- applications/sirato_substrate_phase3.md | 129 ++++++++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 applications/sirato_substrate_phase3.md diff --git a/applications/sirato_substrate_phase3.md b/applications/sirato_substrate_phase3.md new file mode 100644 index 00000000000..4066c541717 --- /dev/null +++ b/applications/sirato_substrate_phase3.md @@ -0,0 +1,129 @@ +# Sirato (Epirus) Substrate Explorer - Phase III + +- **Project Name:** Sirato (Epirus) Substrate Explorer - Phase III +- **Team Name:** Web3 Labs Ltd +- **Payment Address:** 0xc905c448db9942c662fcb1680f3ecfcd0592409c +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview + +> We recently rebranded from Epirus to Sirato + +This is an application for a follow-up grant for the Epirus Substrate Explorer that has completed two grants previously: + +Phase I: +
+[Application](https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_explorer.md) +
+[Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/527) + +Phase II: +
+[Application](https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_phase_2.md) +
+[Milestone 1 Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/652) +
+[Milestone 2 Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/742) + +### Overview + +From our previous grants we have built: +- A [Wasm contracts explorer](https://substrate.sirato.xyz/) that supports smart contracts deployed on `pallet-contracts` +- A [verifier service](https://github.com/web3labs/ink-verifier-server) that verifies, through reproducible builds, the source code files for a specific on-chain code hash. + +In this grant, we intend to expand Sirato to support essential base data such as blocks, extrinsics and system events. + +### Project Details + +In our current architecture, there are several components: + +- Squid Archive (built on the Subsquid framework): the squid archive connects to the Substrate network node and indexes base data such as blocks and extrinsics, exposing a GraphQL API +- Squid Processor (built on Subsquid framework): the squid processor ingests data from the squid archive, filtering and transforming the relevant data to the data models for the Explorer. Currently, our squid processor is focused on Wasm contract data from `pallet-contracts`. The squid processor exposes a GraphQL API. +- Explorer UI: The explorer UI is made up of a set of composable components that consumes the API of the Squid processor and renders the web application. + +The below diagram illustrates the high-level architecture and how the components interact with each other: + +![Current Architecture](https://drive.google.com/uc?id=1BVgvcQPCwGa3BJyD__z-wXKgzyt9mBbG) + +In this grant, we will add data handlers and data models for the base data. Since the Squid Archive directly exposes the network base data of blocks and extrinsics, we will use the GraphQL API of the squid archive in the UI to retrieve this data. + +#### **Network Data Support** + +The Squid Archive already exposes blocks, extrinsics and events data through its GraphQL API. We will consume this API from the explorer UI and build the components to show: + +- Blocks list +- Extrinsics list +- Block page: contains block details and all extrinsics and events included in this block +- Extrinsics page: contains extrinsic details and all events emitted from the extrinsic + +#### Mock-ups + +Mock up of how an extrinsic page will look: + +![Extrinsic Page](https://drive.google.com/uc?id=112GANJWuaxcFJBbhS6-I9ubGMfi9pV-N) + +### Technology Stack + +We plan to build on top of our current explorer, so we will continue using the same technology stack: +- [Subsquid Framework](https://www.subsquid.io/), with Typescript, for data processing. +- React.js and Tailwindcss for the UI + +### Out of Scope + +Due to time and resource constraints, we will leave the following items for future development: +- Additional query endpoints for interrogating the contract registry +- The ability to interact directly with verified smart contracts + +### Ecosystem Fit + +There is currently a lack of high-quality open-source explorers for smart contract networks in the Substrate ecosystem. Polkadot.js is the de facto explorer and it is very modular and flexible. However, it was designed more for development and lacks the ability to filter, sort and search through data on the network. In the space of user-facing explorers, Subscan is currently the most popular solution and has the most comprehensive support for Substrate pallets. On the other hand, Subscan is mostly close-sourced and introduces an economic entry barrier for new networks. + +This dominance by Subscan is something that has been highlighted recently during an in-depth [discussion on the Polkadot Forum](https://forum.polkadot.network/t/subscan-ought-to-change-its-business-model-or-be-replaced/2357). + +While a number of open-source alternatives have emerged, none of them have support for smart contracts. In our previous grants, we have expanded the open-source explorer offerings to include WASM contracts on Substrate. At the same time, we also want to provide the essential base data like blocks and extrinsics so that smart contract networks can have a feature-complete explorer at their fingertips. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 25,000 EUR + +### Milestone 1 + +| Nº | Deliverable | Specification +| :-- | :-- | :-- +| 0a. | License | Apache 2.0 +| 0b. | Documentation | We will provide inline documentation of the code and documentation on how to set up an explorer instance. +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. We will describe how to run these tests in the guide. +| 0d. | Docker | We will provide a Dockerfile and Docker Compose file(s) to ease the deployment and execution of the system. +| 1. | Updated Explorer UI - Base data support | The Explorer UI will connect to the Squid archive GraphQL endpoint and display block, extrinsic and system event data. +| 2. | Public explorer instance | A publicly accessible instance of the Explorer connected to a development network with WASM smart contracts support, with additional display of blocks, extrinsics and events. + +## Team :busts_in_silhouette: + +### Contact + +- **Contact Name:** Conor Svensson +- **Contact Email:** [conor@web3labs.com](mailto:conor@web3labs.com) + +### Legal Structure + +- **Registered Address:** 7 Bell Yard, London, England, WC2A 2JR +- **Registered Legal Entity:** Web3 Labs Ltd, CRN 10783824 + +### Team Code Repos + +- https://github.com/web3labs + +## Future Plans + +We plan to add open-source support to other popular Substrate pallets in the future. Some interesting pallets we are considering are assets and XCM related pallets, to be able to track asset movements across the DotSama networks. + +The Frontier EVM and EVM+ pallet by Acala are also valuable addition to the ecosystem that we wish to support at some point. On top of that, we also plan to add some proprietary modules for the explorer to be able to sustain our growth long-term. Our goal is to provide a full-fledged open-core explorer with comprehensive data and intuitive UI that networks can customise to their needs. + +Besides the core explorer, we also want to expand the functionality of our ink! verifier service. Right now, it only supports the verification and metadata hosting of ink! smart contracts. + +Our goal is to support any WASM smart contracts and evolve the service to a multi-VM metadata registry that can scale up to cater for the entire Substrate and DotSama ecosystems. + From dc187cb430f21cc84056c075ba6ae318cb3305e0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 24 Apr 2023 13:56:06 +0200 Subject: [PATCH 277/665] Update index.md Add Sirato --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b919cea7f2a..0408c8d5b91 100644 --- a/applications/index.md +++ b/applications/index.md @@ -46,6 +46,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | [🔝](#menu) From 902b70760d0d052a2f917f84d18ed787797c36bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 24 Apr 2023 16:34:29 +0200 Subject: [PATCH 278/665] Update IDE_for_ink_Smart_Contracts.md (#1693) Focus on maintenance instead of rewrite. --- docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md index 273c0449f22..40939bf77dc 100644 --- a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md +++ b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md @@ -7,7 +7,7 @@ [ink!](https://github.com/paritytech/ink) is a domain-specific language for writing smart contracts in Rust and compiles to Wasm code. You can deploy ink! contracts on parachains that support the contracts pallet, as well as on stand-alone blockchains built with Substrate. -The goal of this RFP is to find teams that would like to develop or maintain a browser-based playground for editing, compiling & sharing ink! smart contracts. The [ink! Playground](https://ink-playground.substrate.io/), previously maintained by Parity, utilizes Typescript, React, Docker, and [Monaco Editor](https://microsoft.github.io/monaco-editor/). Teams could continue to work on the [ink! Playground](https://github.com/paritytech/ink-playground), or choose to build something new if desired. For example, it might be possible to leverage GitHub Codespaces in combination with GitHub Actions or the previously developed [ink! Remix plugin](https://github.com/blockchain-it-hr/ink-remix-plugin). +The goal of this RFP is to find teams that would like to maintain the browser-based ink! Playground for editing, compiling & sharing ink! smart contracts. [ink! Playground](https://ink-playground.substrate.io/), previously maintained by Parity, utilizes Typescript, React, Docker, and [Monaco Editor](https://microsoft.github.io/monaco-editor/). **Useful resources:** - [ink!](https://use.ink/) @@ -17,6 +17,6 @@ The goal of this RFP is to find teams that would like to develop or maintain a b ## Deliverables -The structure of the grant and the milestones depends highly on the project itself. It’s therefore up to the applying team to come up with a milestone and delivery structure. +We recommend applying for a [maintenance grant](https://w3f.github.io/Grants-Program/docs/maintenance), which allows a more flexible structure and roadmap. The list of issues and features to be covered by the grant should be discussed with the previous maintainers and the community, but it is generally up to the applying team to come up with a milestone and delivery structure. From 461b0b6051729a255dbafc6459da12f377bc5a91 Mon Sep 17 00:00:00 2001 From: Grzegorz Sieczkowski <59612552+gsieczkowski10clouds@users.noreply.github.com> Date: Mon, 24 Apr 2023 08:02:24 -0700 Subject: [PATCH 279/665] Crowdloan frontend template (#1686 * Grant application - Crowdloan Front End Template * During the development phase we decided to use Astro instead of Gatsbe as it suits better to this project and has a lower entry threshold for less experienced developers that may want to use our template. --- applications/crowdloan_frontend_template.md | 25 +++++++++++---------- 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/applications/crowdloan_frontend_template.md b/applications/crowdloan_frontend_template.md index b62eeb249bd..3ff476af941 100644 --- a/applications/crowdloan_frontend_template.md +++ b/applications/crowdloan_frontend_template.md @@ -97,7 +97,8 @@ We will also suggest a One Page or Single Page approach that, while still having ### SSG support (Jamstack only) -We aim to start with the support of Gatsby, a popular React-based choice for SSGs, with a vast community of its own. An initial survey of the Parity community should be done to see whether these assumptions match and should be revised. +We aim to start with the support of Astro, a popular React-based choice for SSGs, with a vast +community of its own. An initial survey of the Parity community should be done to see whether these assumptions match and should be revised. When it comes to other SSGs, the ports can either be motivated by further grants or left to the community of open source volunteers. As mentioned before, there is an intrinsic motivation of each SSG’s community to port popular templates. @@ -141,17 +142,17 @@ For parts of the community who are less comfortable with the Jamstack approach w - **FTE:** 2 (as above) - **Costs:** 30,000 USD -| Number | Deliverable | Specification | -| -----: | ----------- |--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| 0a. | License | MIT or TBD | -| 0b. | Documentation | For both approaches (Webflow & Jamstack) we provide how-to guides. Jamstack will be documented in the Github repo. | -| 0c. | Article | We will publish an article presenting the templates and how to use them. | -| 1a. | Benchmarking | Design research of existing Crowdloan pages and other one pages designs, like Github project pages templates.
This will allow us to synthesize viable options of the page designs | -| 1b. | Design Direction Prototype | Aiming to create as many medium to high-fidelity dd prototypes as possible that allows the Grants team and the community to have an input on the design direction
The aim is to have the prototypes at 25%-50% completeness, to see major components/features and the general design direction. This way we don't waste time on dismissed design directions.
The designs should follow good practices in general without requiring additional research | -| 1c. | Repo Setup | Repo setup incl. base libraries/frameworks, initial technical documentation. Undesigned base scaffold. Allows the implementation to be simplified by forking | -| 2. | Jamstack implementation in Gatsby | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | -| 3. | Webflow implementation | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | -| 4. | Figma Template Publishing | Allows to use it for other solutions | +| Number | Deliverable | Specification | +| -----: |----------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT or TBD | +| 0b. | Documentation | For both approaches (Webflow & Jamstack) we provide how-to guides. Jamstack will be documented in the Github repo. | +| 0c. | Article | We will publish an article presenting the templates and how to use them. | +| 1a. | Benchmarking | Design research of existing Crowdloan pages and other one pages designs, like Github project pages templates.
This will allow us to synthesize viable options of the page designs | +| 1b. | Design Direction Prototype | Aiming to create as many medium to high-fidelity dd prototypes as possible that allows the Grants team and the community to have an input on the design direction
The aim is to have the prototypes at 25%-50% completeness, to see major components/features and the general design direction. This way we don't waste time on dismissed design directions.
The designs should follow good practices in general without requiring additional research | +| 1c. | Repo Setup | Repo setup incl. base libraries/frameworks, initial technical documentation. Undesigned base scaffold. Allows the implementation to be simplified by forking | +| 2. | Jamstack implementation in Astro | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | +| 3. | Webflow implementation | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan
Out of the scope: integrate contribution flow and polkaskan table due to Webflow technical limitations (users of template may still try to implement that on their own way)

Implemented as One Page Design | +| 4. | Figma Template Publishing | Allows to use it for other solutions | From 7763f5393c72fa3e5f8fdab52795f5c471a63255 Mon Sep 17 00:00:00 2001 From: Alex Shkor Date: Tue, 25 Apr 2023 15:07:09 +0100 Subject: [PATCH 280/665] application: CILA - omnichain ifrastructure (#1679) * application: CILA - omnichain ifrastructure * requested changes * Update applications/CILA-omnichain-infrastructure.md Co-authored-by: S E R A Y A * Update applications/CILA-omnichain-infrastructure.md Co-authored-by: S E R A Y A * Update applications/CILA-omnichain-infrastructure.md Co-authored-by: S E R A Y A * Update applications/CILA-omnichain-infrastructure.md Co-authored-by: S E R A Y A * requested changes fix * add details to automated tests delivery * added NFT standard research delivery * added NFT standard research delivery fix --------- Co-authored-by: S E R A Y A --- applications/CILA-omnichain-infrastructure.md | 511 ++++++++++++++++++ 1 file changed, 511 insertions(+) create mode 100644 applications/CILA-omnichain-infrastructure.md diff --git a/applications/CILA-omnichain-infrastructure.md b/applications/CILA-omnichain-infrastructure.md new file mode 100644 index 00000000000..208632f1bad --- /dev/null +++ b/applications/CILA-omnichain-infrastructure.md @@ -0,0 +1,511 @@ +# CILA - Omnichain Infrastructure + +- **Team Name:** Collective Intelligence Labs +- **Payment Address:** bc1qff0kjc6pyjkneyt3pctm5nahjpd9f774avz55x (BTC) +- **Level:** 2 + +## Project Overview :page_facing_up: + +### Overview + +The goal of this project is to implement an omnichain smart contract infrastructure support for Substrate framework. 🌐🤖 This will include the implementation of CQRS + Event Sourcing execution environment plus an example smart-contract. The implementation will be done using WASM and/or native Rust Substrate implementation as a pallet. The implementation will include implementing Protobuf support on-chain, serialization/deserialization, aggregated repository, event store, command/operations dispatcher, and events emitter. 🛠️👨‍💻 + +### Introduction + +This project aims to add an omnichain smart contract infrastructure support for Substrate framework by implementing a CQRS + Event Sourcing execution environment. CQRS (Command Query Responsibility Segregation) is a design pattern that separates the command and query responsibilities of an application. Event Sourcing is a design pattern that represents the state of an application as a series of events that are stored in an event store. 🧬💻 + +### Implementation +The implementation of the omnichain smart contract infrastructure will be done using WASM and/or native Rust Substrate implementation as a pallet. The implementation will include the following components: + +#### Protobuf support on-chain +Protobuf is a language-agnostic binary serialization format that allows developers to define structured data schemas. The implementation will include support for Protobuf on-chain, which will enable developers to define smart contract interfaces using Protobuf. 🤖💾 + +#### Aggregate Repository +Aggregate Repository is a data storage module that manages the state and storage of aggregate objects. It provides methods for creating, reading, updating, and deleting aggregates. 📈📊 + +#### Event Store +An event store is a database that stores events in the order they occurred. The implementation will include an event store, which will store all the events generated by the smart contract. 🗂️📑 + +#### Command/operations Dispatcher +A command/operations dispatcher is a component that receives commands/operations and dispatches them to the appropriate handler. The implementation will include a command/operations dispatcher, which will enable developers to define command/operation handlers for the smart contract. 🚚👨‍✈️ + +#### Events Emitter +An events emitter is a component that emits events. The implementation will include an events emitter, which will enable developers to define event handlers for the smart contract. 📣🔊 + +## Conclusion +The completion of this project will provide a powerful infrastructure for developers to build customized omnichain smart contracts on the Substrate framework. 💪👨‍💼 + +![architecture](https://i.imgur.com/QsmzpZR.png) + +## 🚀 Technology Stack + +**Programming Language** - Rust 🦀 + +**Blockchain Framework** - Substrate ⛓️ + +**Virtual Machine** - WebAssembly (WASM) 🕸️ + +**Serialization** - Protocol Buffers (protobuf) 📜: a language-agnostic data serialization format that allows for efficient and interoperable communication between different services and systems. + +**Design Patterns**: +- Event Sourcing 📝: a pattern that captures all changes to an application state as a sequence of events, which can be used to reconstruct the state at any point in time. +- Command Query Responsibility Segregation (CQRS) 🧬: a pattern that separates the read and write concerns of an application, using separate models and interfaces for each. +- Saga pattern 🌟: a pattern for coordinating distributed transactions across multiple services, ensuring consistency and reliability. +- Domain-Driven Design (DDD) 🏰: a design approach that emphasizes the importance of the domain model in shaping the architecture of a software system. + +**Database** - MongoDB 🗄️: a NoSQL document database that provides scalability, flexibility, and high availability. + +**Testing Framework** - Rust Testing 🧪: Rust has an inbuilt testing framework that enables testing of units of code in isolation. + +**CI/CD** - GitHub Actions 🚀: a continuous integration and continuous deployment service that can automate the build and deployment processes. + +**Containerization** - Docker 🐳: a tool that allows for the creation, deployment, and running of applications in containers, providing a consistent runtime environment across different platforms. + + +# Documentation for Core Copmpontents + +# Dispatcher + +The `Dispatcher` is a component of the omnichain smart contract infrastructure that receives commands/operations and dispatches them to the appropriate handler. The `Dispatcher` class enables developers to define command/operation handlers for the smart contract. + +## Usage + +The `Dispatcher` can be used in the implementation of the CQRS + Event Sourcing execution environment for Substrate framework. It receives commands/operations from external sources, such as a client or a node, and routes them to the appropriate command/operation handler. + +To use the `Dispatcher`, developers first define a set of command/operation handlers for the smart contract. These handlers can be implemented as methods in a Rust struct. The `Dispatcher` class then instantiates this struct and routes commands/operations to the appropriate method based on the type of command/operation. + +## Benefits + +The `Dispatcher` provides a simple and flexible way to handle commands/operations in the smart contract. By defining a set of command/operation handlers, developers can easily add new functionality to the smart contract without having to modify the `Dispatcher` class itself. + +In addition, the `Dispatcher` enables developers to implement complex business logic in the smart contract by routing commands/operations to the appropriate handler. This allows for a more modular and maintainable codebase. + +## Conclusion + +The `Dispatcher` is a crucial component of the omnichain smart contract infrastructure. By enabling developers to define command/operation handlers for the smart contract, it provides a simple and flexible way to handle commands/operations. Its usage in the implementation of the CQRS + Event Sourcing execution environment for Substrate framework enables developers to implement complex business logic in a modular and maintainable codebase. + +# EventStore + +## Description + +The `EventStore` is a database that stores events in the order they occurred. It is a crucial component of the omnichain smart contract infrastructure support for Substrate framework. The `EventStore` class enables the storage of all events generated by the smart contract, allowing for a complete historical record of all transactions and changes to the smart contract's state. + +## Implementation + +The `EventStore` is implemented using an internal Substrate database. The `EventStore` stores events in the form of serialized binary data plus metadata, which can be easily deserialized for querying and analysis. + +## Features + +The `EventStore` includes the following features: + +- **Event storage:** The `EventStore` stores all events generated by the smart contract in the order they occurred, allowing for a complete historical record of all transactions and changes to the smart contract's state. + +- **Querying:** The `EventStore` allows for easy querying of events using various criteria, such as time range, event type, or specific parameters. + +- **Deserialization:** The `EventStore` can easily deserialize stored binary data for querying and analysis. + +- **Scalability:** The `EventStore` can handle large volumes of events and is designed for scalability. + +## Benefits + +The `EventStore` provides several benefits to developers building smart contracts on the Substrate framework, including: + +- **Transparency:** The `EventStore` provides a complete historical record of all transactions and changes to the smart contract's state, ensuring transparency and accountability. + +- **Auditability:** The `EventStore` allows for easy querying and analysis of events, enabling developers to audit the smart contract's behavior and ensure compliance with regulations and business rules. + +- **Flexibility:** The `EventStore` can handle a wide range of event types and is designed for scalability, providing flexibility for developers building smart contracts on the Substrate framework. + +## Conclusion + +The `EventStore` is a crucial component of the omnichain smart contract infrastructure support for Substrate framework. It provides event storage, querying, deserialization, and scalability features, enabling developers to build transparent, auditable, and flexible smart contracts on the Substrate framework. The completion of this project will provide a powerful infrastructure for developers to build customized smart contracts on the Substrate framework, with the `EventStore` serving as a key component of this infrastructure. + +# Snapshot Store + +## Overview +The `Snapshot Store` is a component of the omnichain smart contract infrastructure that provides a way to store and retrieve snapshots of the smart contract state. A snapshot is a read-only view of the smart contract state at a particular point in time. Snapshots are useful for optimizing the performance of the smart contract by reducing the amount of data that needs to be read from the event store. + +## Implementation +The implementation of the `Snapshot Store` includes the following components: + +- `Snapshot Store`: The Snapshot Store is the primary component. It provides an interface for storing and retrieving snapshots of the smart contract state. +- `Snapshot Index`: The Snapshot Index is a data structure that is used to index snapshots by their version. It allows for efficient retrieval of the latest snapshot. +- `Snapshot Writer`: The Snapshot Writer is a component that is used to write snapshots to the Snapshot Store. It receives the current state of the smart contract and writes it to the Snapshot Store as a snapshot. +- `Snapshot Reader`: The Snapshot Reader is a component that is used to read snapshots from the Snapshot Store. It receives a snapshot version and returns a read-only view of the smart contract state at that version. + +## Conclusion +The `Snapshot Store` provides a way to store and retrieve snapshots of the smart contract state, which can be used to optimize the performance of the smart contract. The implementation includes the `Snapshot Store`, `Snapshot Index`, `Snapshot Writer`, and `Snapshot Reader` components. The completion of this component will provide a pefrormance optmization for omnichain smart contracts on the Substrate framework. + +# Aggregate + +The `Aggregate` is a core component of the CQRS + Event Sourcing design pattern. It represents the current state of an entity and is responsible for handling commands and producing events. + +## Description + +An `Aggregate` is a stateful object that represents a single entity in the system. It maintains its state by applying events to its internal state. A new state can be generated by applying new events to the existing state. + +In the context of the Substrate framework, an `Aggregate` is implemented as a Rust struct that contains its internal state and a set of methods to apply events and handle commands. + +## Implementation + +The `Aggregate` is implemented using the following components: + +### Internal state + +The internal state of an `Aggregate` is represented as a Rust struct. The struct contains all the data necessary to represent the current state of the entity. + +### Command handling + +The `Aggregate` contains a set of methods to handle commands. These methods accept a command object as input and return a set of events that represent the result of executing the command. + +### Event sourcing + +The `Aggregate` implements event sourcing by maintaining a list of events that have been applied to the internal state. When a new command is received, the `Aggregate` applies the appropriate events to generate a new state. + +### Snapshotting + +The `Aggregate` implements snapshotting by periodically storing a snapshot of its internal state. When an `Aggregate` is retrieved from its event stream, it can be initialized with the latest snapshot and then apply only the events that occurred after the snapshot. + +## Conclusion + +The `Aggregate` is a core component of the CQRS + Event Sourcing design pattern. It represents the current state of an entity and is responsible for handling commands and producing events. The implementation of the `Aggregate` in the Substrate framework provides a powerful mechanism for building complex and scalable smart contracts. + + +# AggregateState + +The `AggregateState` represents the state of an aggregate object in the event sourcing pattern. It is responsible for maintaining the current state of the aggregate object by processing the events that have occurred in the past. + +### Properties + +- `id`: The unique identifier of the aggregate object. +- `version`: The version of the aggregate object. +- `events`: The list of events that have occurred in the past. + +### Methods + +- `apply_event(event)`: Applies the given event to the current state of the aggregate object. This method updates the state of the aggregate object based on the event that occurred. +- `get_version()`: Returns the version of the aggregate object. +- `get_events()`: Returns the list of events that have occurred in the past. + +### Usage + +To use the `AggregateState` , you must first create an instance of it and initialize it with the current state of the aggregate object. You can then apply events to the aggregate object by calling the `apply_event()` method. + +## Diagramm + +Architecture Overview Diagram +![Diagramm](https://i.imgur.com/nWGtuEc.png) + +Flow Diagramm + +![Diagramm](https://i.imgur.com/1jeLNo1.png) + +Command Processing Flow Diagramm + +```sql + +------------+ +------------+ +-----------------+ +-------------------+ +------------+ + | Application| | Router | | Execution Chain | | Event Relay Node | | Aggregation| + +------------+ +------------+ +-----------------+ +-------------------+ +------------+ + | | | | | + | Command Request | | | | + |------------------>| | | | + | | | | | + | Command Handler | | | | + |------------------>| | | | + | | Command Request | | | + | |------------------->| | | + | | | Execute Command (CQRS) | | + | | |--------------------------->| | + | | | | Store Event (ES) | + | | | |----------------------------->| + | | | | | + | | | | Broadcast Event to | + | | | | Other Chains | + | | | |--------------------------->| + | | | | | + | | | | Transmit Event to | + | | | | Aggregation Cluster | + | | | |----------------------------->| + | | | | | + | | | | Process Events and | + | | | | Produce Aggregated Data | + | | | |<-----------------------------| + | | | | | + | | | | Return Aggregated Data | + | | | |<-----------------------------| + | | | | | + +``` + +# API Documentation + +## Domain + +### Aggregate + +#### `AggregateState` + +##### Methods + +* `new() -> Self`: Creates a new instance of `AggregateState`. +* `apply_events(&mut self, events: Vec) -> Result<(), String>`: Applies a list of domain events to the aggregate state. +* `clear(&mut self)`: Clears the state of the aggregate. + +#### `DomainEvent` + +##### Methods + +* `new(evnt_type: DomainEventType, evnt_payload: Vec) -> Self`: Creates a new instance of `DomainEvent`. +* `serialize(&self) -> Result, String>`: Serializes the domain event to a byte array. + +#### `DomainEventType` + +##### Variants + +* `NFT_MINTED` +* `NFT_TRANSFERED` + +### Entities + +#### `NFT` + +##### Fields + +* `hash: [u8; 32]`: The unique hash of the NFT. +* `owner: Address`: The address of the owner of the NFT. + +##### Methods + +* `new(hash: [u8; 32], owner: Address) -> Self`: Creates a new instance of `NFT`. +* `get_hash(&self) -> [u8; 32]`: Returns the hash of the NFT. +* `get_owner(&self) -> Address`: Returns the owner of the NFT. +* `transfer(&mut self, new_owner: Address)`: Transfers the ownership of the NFT to a new owner. + +## Application + +### Command + +#### `Command` + +##### Fields + +* `cmd_type: CommandType` +* `cmd_payload: Vec` + +##### Methods + +* `new(cmd_type: CommandType, cmd_payload: Vec) -> Self`: Creates a new instance of `Command`. +* `serialize(&self) -> Result, String>`: Serializes the command to a byte array. + +#### `CommandType` + +##### Variants + +* `MINT_NFT` +* `TRANSFER_NFT` + +### Service + +#### `CommandDispatcher` + +##### Methods + +* `dispatch(command: Command) -> Result<(), String>`: Dispatches a command to the appropriate handler. + +#### `NFTService` + +##### Fields + +* `state: NFTsState` +* `event_store: Box` +* `dispatcher: Box` + +##### Methods + +* `new(state: NFTsState, event_store: Box, dispatcher: Box) -> Self`: Creates a new instance of `NFTService`. +* `handle_command(&mut self, command: Command) -> Result<(), String>`: Handles a command by dispatching it to the appropriate handler. +* `get_nft_owner(&self, hash: [u8; 32]) -> Option
`: Returns the owner of an NFT with the given hash. + +### Event + +#### `DomainEventType` + +##### Variants + +* `NFT_MINTED` +* `NFT_TRANSFERED` + +#### `DomainEvent` + +##### Fields + +* `evnt_type: DomainEventType` +* `evnt_payload: Vec` + +##### Methods + +* `new(evnt_type: DomainEventType, evnt_payload: Vec) -> Self`: Creates a new instance of `DomainEvent`. +* `serialize(&self) -> Result, String>`: Serializes the domain event to a byte array. + +### Store + +#### `AggregateRepository` + +##### Fields + +* `event_store: Box` + +##### Methods + +* `new(event_store: Box) -> Self`: Creates a new instance of `AggregateRepository + +🌟 **Ecosystem Fit:** 🌟 + +🔹 **Project's Fit:** CILA will provide an infrastructure for building efficient omnichain smart contracts that can be integrated into the Polkadot ecosystem, offering a unique solution in the Substrate/Polkadot/Kusama landscape. + +🔹 **Target Audience:** Developers interested in building omnichain smart contracts on Substrate, Polkadot, and Kusama, particularly those looking to develop cross-chain applications and interact with multiple blockchain networks. + +🔹 **Project's Purpose:** The infrastructure will enable developers to build more efficient and scalable omnichain smart contracts, making it easier to create cross-chain applications that interact with multiple blockchain networks. This will help solve the problem of siloed blockchains and allow developers to take advantage of the benefits of multiple chains. + +🔹 **Similar Projects:** We are not aware of any other projects similar to OmniChain in the Substrate/Polkadot/Kusama ecosystem, offering a unique solution for building omnichain smart contracts. + +## Team 🦾 + +### Team members + +- 👨‍💻 Alex Shkor - Architect, Developer, Team Lead +- 👨‍💻 Alexey Kulik - Architect, Developer +- 👩‍💼 Julia Shinkevich - Project Manager +- 🧑‍💼 Max Slyzkoukh - Product Manager +- 👨‍🔧 Yahor Tsaryk - Engineer + + +### Contact + +- **Contact Name:** Alex Shkor +- **Contact Email:** alex@cilabs.ai +- **Website:** https://collectiveintelligence.dev/ + +### Legal Structure + +- **Registered Address:** 16192 Coastal Highway, Lewes, DE 19958, United States. +- **Registered Legal Entity:** Collective Intelligence Labs Inc. + +### Team's experience + +Our team's extensive experience in blockchain development and past successful projects make us well-suited for this project. We have developed several blockchain-based platforms, including DeSci, which offers a decentralized scientific communication infrastructure, and IPledger, which registers intellectual property assets on the blockchain. We have also built a Proof of Share protocol for verification on a chain that specific files have been shared between parties, an on-chain grants distribution platform, a decentralized technology transfer platform, [F-NFT](https://github.com/DEIPworld/deip-node/tree/develop/pallets/deip_f_nft) and [Event Proxy](https://github.com/DEIPworld/deip-node/tree/develop/event-proxy) for Substrate, and other projects. + +Our team members have also contributed to open-source blockchain projects, demonstrating our commitment to the development of the blockchain ecosystem as a whole. + +Our Team Lead is distributed systems architect and has over 14 years of experience in this field, with one of our team members being the inventor of omnichain smart-contracts protocol, which is an important aspect of this project. Our Software Engineer has over 10 years of experience in distributed systems engineering and was the ex-CTO at DEIP and the creator of the Economy Protocol. Our Tech Lead has experience in distributed system and blockchain R&D and was the ex-Head of R&D at Paralect, while also having experience as an ex-CPO at DEIP. Our Head of Marketing has 9 years of experience in PR and communications, having worked with micromobility and web3 startups. Our Product Manager expert in digital transformation has 6 years of experience in the procurement of 50+ leading private and state Ukrainian enterprises. + +As a team, we have previously applied for a grant from the web3 foundation grants program for our DEIP project (DEIPWORLC Inc. legal entity). However, due to the constantly evolving market landscape and changing needs of the industry, we decided to pivot multiple times, and therefore did not deliver original proposal fully (only about 50% of it - onchain part). During the process we realized that on-chain IP management would not be possible without other infrastructure part. Therefore we decided to completely stop [previous project](https://github.com/DEIPworld), change our focus and start working on a diferent solution, the core solution that will make possible to implement DEIP and other our projects that rely on omni-chain infrastructure and onchain IP management - omni-chain infrastructure + +We believe that being transparent about our previous application and pivot is important. We want to assure the committee that we are committed to delivering the proposed solution for our current application, and that we are passionate about creating value in the blockchain ecosystem. + +We are confident that our team's expertise and experience in developing distributed systems and infrastructure will enable us to successfully execute our proposed CILA omnichain infrastructure project. We believe that this infrastructure is crucial for the growth and adoption of blockchain technology, and we are excited about the opportunity to contribute to this space. + +### Team Code Repos + +- https://github.com/Collective-Intelligence-Labs + +### Team GitHub Profiles + + +- https://github.com/alexshkor +- https://github.com/aliakseikulik +- https://github.com/yahortsaryk +- https://github.com/juliacil + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/alexshkor/ +- https://www.linkedin.com/in/alexeykulik/ +- https://www.linkedin.com/in/julia-shinkevich/ +- https://www.linkedin.com/in/max-slyzkouh/ +- https://www.linkedin.com/in/yahor-tsaryk-92032a68/ + + +## Development Status :open_book: + +CILA omnichain infrastructure for Substrate is currently in the research and planning phase. We have conducted extensive research on the existing smart contract infrastructure and identified the need for an omnichain smart contract solution. Our team has also analyzed the capabilities of the Substrate/Polkadot/Kusama ecosystem and determined that it is the ideal platform for building this solution. + +We have created a detailed project plan that outlines the development roadmap and milestones. This plan includes research and development of the necessary components. + +- Draft of solidity implementation: https://github.com/Collective-Intelligence-Labs/cila-sol-contracts +- Vision Paper: https://docsend.com/view/eqt2iazwmff3jikh + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 — Design and Implementation + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | + **0b.** | Documentation | We will ensure comprehensive documentation of the code by providing both inline comments and a step-by-step tutorial. This tutorial will guide the user through spinning up a Substrate-based execution environment for the CILA Omnichain Infrastructure and testing omnichain transactions, showcasing the new functionality. | +| **0c.** | Testing and Testing Guide | We will conduct comprehensive unit testing on the core functionalities including Aggregate, Event Store, Aggregate Repository, Snapshot Store, and Dispatcher, to ensure optimum functionality and robustness. The testing guide will contain instructions on how to execute these tests. | +| **0d.** | Docker | We will deliver Dockerfiles for testing all the functionality included in this milestone. | +| 1. | Substrate module: Aggregate | The Aggregate pallet provides the base functionality for implementing the Command Query Responsibility Segregation (CQRS) pattern on a Substrate-based blockchain. It defines the Aggregate trait, which is used to define the state and behavior of an Aggregate. | +| 2. | Substrate module: AggregateState | The AggregateState pallet provides a default implementation of the AggregateState trait, which stores the current state of an Aggregate in the blockchain's storage. This pallet is responsible for managing the state of an Aggregate and updating it based on incoming commands. | +| 3. | Substrate module: AggregateRepository | The AggregateRepository pallet provides an implementation of the AggregateRepository trait, which is responsible for retrieving and storing Aggregates in the blockchain's storage. It allows developers to easily store and retrieve Aggregates from the blockchain's storage. | +| 4. | Substrate module: CommandDispatcher | The CommandDispatcher pallet provides a way to dispatch incoming commands to the appropriate Aggregates based on their type. It uses a HashMap to store the mapping between command types and the Aggregates that handle them. | +| 5. | Substrate module: EventStore | The EventStore pallet provides a way to store and retrieve events that have been emitted by Aggregates. It allows developers to easily retrieve the events emitted by a specific Aggregate and replay them to reconstruct the current state of the Aggregate. | +| 6. | Substrate module: EventsEmitter | The EventsEmitter pallet provides a way for Aggregates to emit events. It defines a trait that Aggregates can implement to specify the types of events they emit, and provides a way to subscribe to events emitted by specific Aggregates. | + + +### Milestone 2 — Testing and Documentation + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will ensure comprehensive documentation of the code by providing both inline comments and a step-by-step tutorial. This tutorial will guide the user through spinning up a Substrate-based execution environment for the CILA Omnichain Infrastructure and testing omnichain transactions, showcasing the new functionality. Special attention will be given to documenting the setup and testing of multiple Substrate chains running simultaneously, to test the synchronization of the state smart contract between them. | +| **0c.** | Testing and Testing Guide | We will conduct comprehensive unit testing on the core functionalities including Aggregate, Event Store, Aggregate Repository, Snapshot Store, and Dispatcher, to ensure optimum functionality and robustness. In particular, we will place emphasis on testing the infrastructure running with multiple chains to ensure that the synchronization mechanism is functioning as intended. The testing guide will contain instructions on how to execute these tests. | +| **0d.** | Docker | We will deliver Dockerfiles for testing all the functionality included in this milestone, including orchestration with multiple chains. For orchestration purposes we might use Kubernates. | +| 0e. | Article | We will publish a technical article that details the implementation of the Command-Query Responsibility Segregation (CQRS) and Event Sourcing architecture on the Substrate framework. The article will provide an in-depth explanation of the design choices made and the challenges faced during the implementation. It will also include a detailed walkthrough of the codebase, highlighting key areas of interest and how they fit into the overall architecture. The article will be written in a technical language that targets developers with experience in blockchain and distributed systems. | +| 1. | Substrate chain | Set up and run multiple Substrate chains simultaneously to test the synchronization of a state smart contract between them. This will involve deploying the omnichain smart contract infrastructure to each chain and executing transactions on each chain to ensure that the contract state is properly synchronized between them. Additionally, various network conditions such as network latency and node failures will be simulated to test the robustness and reliability of the synchronization mechanism. The results of these tests will be recorded and analyzed to identify any potential issues and ensure that the synchronization mechanism is functioning as intended. | +| 2. | Automated Tests | We will create and publish automated tests for critical infrastructure parts of Substrate-based CQRS + Event Sourcing execution enviroment. The aim of this test will be to test two cases - non conflicting execution (changes coming to one chain and transmitted to the other one), and conflicting transactions when the same aggregate is updated with two conflicing state changes that simuntaniusly come to different chans. | + +### Milestone 3 — Example Smart Contracts and Enhancements + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | Provide inline documentation of the NFTAggregate pallet and NFTAggregateState pallet code, as well as a basic tutorial that explains how a user can set up a Substrate node and send test transactions to test the NFT functionalities provided by these modules. Additionally, comprehensive unit tests will be developed and documented to ensure the functionality and robustness of the NFTAggregate pallet and NFTAggregateState pallet. A testing guide will also be provided, describing how to run the tests. | +| **0c.** | Testing and Testing Guide |For this milestone, we will develop comprehensive unit tests to cover the core functions of the NFTAggregate module and the NFTAggregateState pallet. These tests will be designed to ensure the functionality and robustness of the code. The unit tests will be included in the code repository and will cover a range of scenarios to ensure that the code is thoroughly tested. For example, we will test the minting, burning, and transferring of NFTs, as well as error handling and edge cases. In the testing guide, we will provide detailed instructions on how to run these tests, including any required dependencies and setup steps. We will also include information on how to interpret the test results and what to do in the case of failures or errors.. | +| **0d.** | Docker | In order to facilitate testing and deployment of the NFTAggregate pallet and NFTAggregateState pallet, we will provide Dockerfiles that can be used to easily set up and configure a development environment. These Dockerfiles will include all the necessary dependencies and configuration to run the Substrate-based blockchain with the new functionalities. | +| 1. | Substrate module: NFTAggregate | The NFTAggregate pallet provides a way to implement Non-Fungible Tokens (NFTs) on a Substrate-based blockchain. It defines a trait that NFT Aggregates can implement to specify the behavior of NFTs, including minting, burning, and transferring. | +| 2. | Substrate module: NFTAggregateState | The NFTAggregateState pallet provides a default implementation of the state of an NFT Aggregate, which stores the current state of NFTs in the blockchain's storage. This pallet is responsible for managing the state of NFTs and updating it based on incoming commands. | +| 3. | Report: Substrate Ecosystem NFT standards | To choose the most optimal standard for omnichain implementation we will conduct research and assess all the available NFT standards against two major criteria: popularity and technical quality. Popularity will be measured by the number of stars on the GitHub repository and how many projects are actually using it (usage assesment will be done on a best effort basis), and the technical quality will be assessed by analyzing if a specific standard satisfies [SOLID](https://en.wikipedia.org/wiki/SOLID) design principles. | + + +## Future Plans + +In the short term, we plan to continue to develop and enhance our project to ensure its success and sustainability. This will include ongoing testing, bug fixes, and implementing additional features and improvements as needed. We will actively promote our project through various channels, including social media, blog posts, and community events. + +After the completion of the proposed infrastructure, we intend to continue its development by incorporating support for multiple blockchains and introducing more advanced functionalities, such as dynamic rebalancing for aggregates. Additionally, we plan to establish partnerships with leading players in the Substrate/Polkadot/Kusama ecosystem and to integrate our omnichain infrastructure with existing projects, such as DeFi and NFT marketplaces, to further increase adoption. Finally, we will provide comprehensive documentation and support to ensure that our infrastructure is accessible and user-friendly for developers and users alike. + +In the long term, we envision our project becoming a leading platform for event-centric CQRS + Event Sourcing execution environments and omnichain smart contracts on the Substrate blockchain. We plan to expand our team and further invest in research and development to stay ahead of the curve and meet the needs of the rapidly evolving blockchain industry. We will continue to engage with the community and seek feedback to ensure that our project remains relevant and valuable to users. Our ultimate goal is to create a platform that is widely adopted and helps to drive the mainstream adoption of blockchain technology. + +## Additional Information :heavy_plus_sign: + +![mission](https://i.imgur.com/WZt1hdx.png) + +**How did you hear about the Grants Program?** personal recommendation From 83029c27f1100041e02ff31ca24a6bed8197fba5 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 25 Apr 2023 16:09:50 +0200 Subject: [PATCH 281/665] Update index.md Add Omnichain Infrastructure --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 0408c8d5b91..35142e68161 100644 --- a/applications/index.md +++ b/applications/index.md @@ -47,6 +47,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | +| [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | [🔝](#menu) From c68f7b298b06a619d4b7a12771fa71039274ef89 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 25 Apr 2023 16:20:49 +0200 Subject: [PATCH 282/665] Fix website --- applications/crowdloan_frontend_template.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/crowdloan_frontend_template.md b/applications/crowdloan_frontend_template.md index 3ff476af941..b90605ba713 100644 --- a/applications/crowdloan_frontend_template.md +++ b/applications/crowdloan_frontend_template.md @@ -147,11 +147,11 @@ For parts of the community who are less comfortable with the Jamstack approach w | 0a. | License | MIT or TBD | | 0b. | Documentation | For both approaches (Webflow & Jamstack) we provide how-to guides. Jamstack will be documented in the Github repo. | | 0c. | Article | We will publish an article presenting the templates and how to use them. | -| 1a. | Benchmarking | Design research of existing Crowdloan pages and other one pages designs, like Github project pages templates.
This will allow us to synthesize viable options of the page designs | -| 1b. | Design Direction Prototype | Aiming to create as many medium to high-fidelity dd prototypes as possible that allows the Grants team and the community to have an input on the design direction
The aim is to have the prototypes at 25%-50% completeness, to see major components/features and the general design direction. This way we don't waste time on dismissed design directions.
The designs should follow good practices in general without requiring additional research | +| 1a. | Benchmarking | Design research of existing Crowdloan pages and other one pages designs, like Github project pages templates.
This will allow us to synthesize viable options of the page designs | +| 1b. | Design Direction Prototype | Aiming to create as many medium to high-fidelity dd prototypes as possible that allows the Grants team and the community to have an input on the design direction
The aim is to have the prototypes at 25%-50% completeness, to see major components/features and the general design direction. This way we don't waste time on dismissed design directions.
The designs should follow good practices in general without requiring additional research | | 1c. | Repo Setup | Repo setup incl. base libraries/frameworks, initial technical documentation. Undesigned base scaffold. Allows the implementation to be simplified by forking | -| 2. | Jamstack implementation in Astro | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | -| 3. | Webflow implementation | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan
Out of the scope: integrate contribution flow and polkaskan table due to Webflow technical limitations (users of template may still try to implement that on their own way)

Implemented as One Page Design | +| 2. | Jamstack implementation in Astro | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan

Implemented as One Page Design | +| 3. | Webflow implementation | One (1) chosen design direction

Minimum sections:
- Project information
- Rewards Schema
- Current contributions
- Time left in Crowdloan and competition
- Contribute CTA
- After the Crowdloan
Out of the scope: integrate contribution flow and polkaskan table due to Webflow technical limitations (users of template may still try to implement that on their own way)

Implemented as One Page Design | | 4. | Figma Template Publishing | Allows to use it for other solutions | From 1cd886d31d0d57368621bbebc86af3d2623f88ac Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 25 Apr 2023 17:05:04 +0200 Subject: [PATCH 283/665] Update index.md accept Crowdloan Front End Template --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 35142e68161..24c84fd8035 100644 --- a/applications/index.md +++ b/applications/index.md @@ -126,7 +126,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☐ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | -| [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☐ | ☐ | +| [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☒ | ☒ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | | [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | | [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | From cecfbed3d1392de2203c0e8bdcbb08700708fb4b Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 25 Apr 2023 20:28:15 +0200 Subject: [PATCH 284/665] close crowdloan frontend template rfp (#1697) --- .../crowdloan_front_end_template.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Under Development => Closed}/crowdloan_front_end_template.md (93%) diff --git a/docs/RFPs/Under Development/crowdloan_front_end_template.md b/docs/RFPs/Closed/crowdloan_front_end_template.md similarity index 93% rename from docs/RFPs/Under Development/crowdloan_front_end_template.md rename to docs/RFPs/Closed/crowdloan_front_end_template.md index 428a955fba7..21edca3a6e2 100644 --- a/docs/RFPs/Under Development/crowdloan_front_end_template.md +++ b/docs/RFPs/Closed/crowdloan_front_end_template.md @@ -1,6 +1,6 @@ # Crowdloan Front End Template -* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/crowdloan_frontend_template.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/Crowdloans-FET.md) +* **Status:** [Implemented](https://github.com/w3f/Grant-Milestone-Delivery/pull/765), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/Crowdloans-FET.md) * **Proposer:** [SBalaguer](https://github.com/SBalaguer), [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index 80c6cd57997..d0099216d5c 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -34,7 +34,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [appi.md](RFPs/Closed/appi.md) | 🔴 | 20.07.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | | [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | -| [crowdloan_front_end_template.md](RFPs/Under%20Development/crowdloan_front_end_template.md) | 🟡 | 18.11.2022 | +| [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 🔴 | 25.04.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | | [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | | [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 🔴 | 21.03.2023 | From 27558bbb6428dfd71d21d35a551d7799453eb9c8 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 26 Apr 2023 02:39:34 -0400 Subject: [PATCH 285/665] Update index.md (#1698) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 24c84fd8035..727c335acae 100644 --- a/applications/index.md +++ b/applications/index.md @@ -84,7 +84,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | -| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☐ | +| [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | From b5fd3b593ef46628077c0233af8f9780c4628876 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 26 Apr 2023 13:11:26 +0200 Subject: [PATCH 286/665] Update index.md walt.id NFT infrastructure M1 and complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 727c335acae..a04d0835e22 100644 --- a/applications/index.md +++ b/applications/index.md @@ -117,7 +117,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Keystone Wallet](https://keyst.one/) | [Polkadot Snap](PolkadotSnap.md) | [GitHub](https://github.com/KeystoneHQ) | ☐ | ☐ | ☐ | | [LeetCoin](https://www.leetcoin.co/) | [LeetCoin](leetcoin.md) | [GitHub](https://github.com/nashhq/leetcoin) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures/) | [Sol2Ink Phase 2](typechain-polkadot-follow-up.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | -| [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☐ | ☐ | +| [walt.id](https://walt.id/) | [NFT infrastructure](walt-id_nft-infra.md) | [GitHub](https://github.com/walt-id) | ☐ | ☒ | ☒ | | [SydTek](https://sydtek.ai/) | [Digital Inheritance in Web3: A Case Study of Soulbound Tokens and Social Recovery Pallets](SydTek.md) | [GitHub](https://github.com/jgophd/Developed-Materials-and-Raw-Data) | ☐ | ☒ | ☐ | | [Anagolay](https://anagolay.network/) | [Multi-token community contributions for verified creators](anagolay-project-idiyanale-multi-token-community-contributions-for-verified-creators.md) | [GitHub](https://github.com/anagolay) | ☐ | ☒ | ☒ | | [Ink Contracts Wizard Team](https://github.com/amankumar1008/contracts-wizard) | [Ink Smart Contract Wizard](ink-smart-contract-wizard.md) | [GitHub](https://github.com/amankumar1008/contracts-wizard) | ☐ | ☒ | ☒ | From d3150bc3cdc17fe8aecee4f12b54e40760a527ad Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 27 Apr 2023 14:02:50 +0200 Subject: [PATCH 287/665] validator-setup maintenance to under development --- .../{Open => Under Development}/validator-setup-maintenance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/RFPs/{Open => Under Development}/validator-setup-maintenance.md (92%) diff --git a/docs/RFPs/Open/validator-setup-maintenance.md b/docs/RFPs/Under Development/validator-setup-maintenance.md similarity index 92% rename from docs/RFPs/Open/validator-setup-maintenance.md rename to docs/RFPs/Under Development/validator-setup-maintenance.md index 02f76a9f981..933cd2b180f 100644 --- a/docs/RFPs/Open/validator-setup-maintenance.md +++ b/docs/RFPs/Under Development/validator-setup-maintenance.md @@ -1,6 +1,6 @@ # polkadot-validator-setup maintenance -* **Status:** Open +* **Status:** [See Polkadot Validation Node Ansible Setup](https://github.com/polkachu/polkadot-validator) * **Teams/People that could deliver the RFP:** @melozo, @pmensik, @tylerztl, @bLd75 ## Project Description :page_facing_up: From 8eec6f1ba7ecebf2bec4414eb26793809d247b95 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 27 Apr 2023 14:03:59 +0200 Subject: [PATCH 288/665] update RFP list --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index d0099216d5c..b89c5d8dddd 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -64,7 +64,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | | [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 🟢 | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | -| [validator-setup-maintenance.md](RFPs/Open/validator-setup-maintenance.md) | 🟢 | 23.11.2021 | +| [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 🟡 | 27.04.2023 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | | [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | From 78f62c2d94e9c336c7333f312f1676cf74fc33b7 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 27 Apr 2023 11:57:10 -0300 Subject: [PATCH 289/665] Update index.md (#1704) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a04d0835e22..7ad6611e4d2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -88,7 +88,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | -| [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | From f89fe23d36a9ce157ddc94193feb0022cc242900 Mon Sep 17 00:00:00 2001 From: Anwesh Date: Fri, 28 Apr 2023 01:51:19 +0530 Subject: [PATCH 290/665] Terminate polkadot-mempool-explorer-v2.md (#1705) @semuelle @Noc2 as per our discussion. I would like to terminate it for now. --- applications/polkadot-mempool-explorer-v2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/polkadot-mempool-explorer-v2.md b/applications/polkadot-mempool-explorer-v2.md index 6d16d8a424e..c60e9af6d8f 100644 --- a/applications/polkadot-mempool-explorer-v2.md +++ b/applications/polkadot-mempool-explorer-v2.md @@ -8,7 +8,7 @@ -- **Payment Address:** TBD +-**Status:** Terminated @@ -474,4 +474,4 @@ polkadot js API tutorials - 3000 USD -- Add good explanatory graphics to explain the basic concepts \ No newline at end of file +- Add good explanatory graphics to explain the basic concepts From f283b4bdccffbe8e2fcf54b3cc73bf3a14a5f5ce Mon Sep 17 00:00:00 2001 From: Dan Henton Date: Fri, 28 Apr 2023 17:19:20 +1200 Subject: [PATCH 291/665] Vue.js + TypeScript Substrate Front-End Template Project Proposal (#1601) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create vue-typescript-substrate-frontend-template.md Project proposal Updated license information Updated Vue.js + Typescript Front-End Template Proposal remove old grant * Updated payment method * Update vue-typescript-substrate-frontend-template.md extend double the time frame half the cost. * Update vue-typescript-substrate-frontend-template.md fix typos --------- Co-authored-by: Miloš Ranđelović --- ...-typescript-substrate-frontend-template.md | 167 ++++++++++++++++++ 1 file changed, 167 insertions(+) create mode 100644 applications/vue-typescript-substrate-frontend-template.md diff --git a/applications/vue-typescript-substrate-frontend-template.md b/applications/vue-typescript-substrate-frontend-template.md new file mode 100644 index 00000000000..b2287ea4353 --- /dev/null +++ b/applications/vue-typescript-substrate-frontend-template.md @@ -0,0 +1,167 @@ +# Vue.js + TypeScript Substrate Front-End Template + +- **Team Name:** Wunderbar Network +- **Payment Address:** 0x6F76BED39E9B9D57cAb4d9b81D65d2fa088cB68E (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +When building our app (The Wunderbar Network team is part of the **Substrate Builders Program**), we have used a very useful existing community template - the [Substrate Front End Template](https://github.com/substrate-developer-hub/substrate-front-end-template) from the Substrate Developer Hub. This template is built using React.js and JavaScript. We are proposing to create an _alternative_ version of this template, which would achieve three major outcomes: + +1) Create an extendable template app, where developers can quickly connect and interface with the Substrate blockchain, using simple, clear and strongly typed examples, with a great baseline UX (which could provide a starting point for an entire new project). + +This will build on top of what the current community template provides. + +2) It would use Vue.js instead of React.js + +According to [StackOverflow's 2022 Developer Survey](https://survey.stackoverflow.co/2022/), React.js is still undeniably in the lead when it comes to web framework popularity (according to the survey, **42.62%** of projects would be using React), however at **18.86%** Vue.js is still in the top 6 and is on the rise. + +3) It would be written using TypeScript as opposed to JavaScript. + +Even though most developers who code in TypeScript can work well with JavaScript and vice versa, the "conversion" is not always straight-forward, and despite JavaScript being around for a very long time (and seemingly not going anywhere), TypeScript is gaining rapidly in popularity and most greenfield projects would prefer TypeScript over JavaScript. + +According to same survey mentioned above, JavaScript is the most commonly used technology (for the tenth year in a row!), however TypeScript is steadily closing in. Looking at the _loved vs. dreaded_ category though, the picture is very different - TypeScript is loved by **73.46%** of developers (and is near the very top of the list), whereas JavaScript achieved a score of **61.46%** to be placed in the middle of the table. + +Overall, we believe that the combination of TypeScript's strong, static typing, and Vue's simplicity will together serve the purpose of providing an alternative source of very clear examples of how to interface with a Substrate Node from a modern front-end application, which should be of great value to the community. + +### Project Details + +The core technology stack is Vue 3 + Typescript, integrated with the [Polkadot.js](https://github.com/polkadot-js) set of packages. The app will deliver Vue3 native components and "composables" (reusable functions), that other developers will easily be able to integrate/build on top of. + +The app will also provide a `Dockerfile` and container. + +We have created a mockup design (in both dark and light mode), screenshots below (we also have a high-fidelity Figma file that can be provided upon request). + +[![Dark version](https://lh3.googleusercontent.com/u/0/drive-viewer/AAOQEOQvkTiAXhC3_deoufEJbZY_inAtdJNv6bmvMUKTIsVvPG675sEu5I0Qr3EYxicwu3saj8hniDu3EwZqmFh6em-6DN9Vbw=w3024-h1612)](https://drive.google.com/file/d/1FfN8ZTCO2ihwZkBjdQ1dmW4yFqjT7pw3/view?usp=sharing) +[![Light version](https://lh3.googleusercontent.com/u/0/drive-viewer/AAOQEOSkRaSUSZhS7u7rhuepjwBXzteL2GUqvRSx3AHpC31dCiRZOy4yXkkgJLPd0805t8Ivlbga1RX_xCPNUvCwR_f5YOJ0=w3024-h1612)](https://drive.google.com/file/d/1Q-bkWzzvEgMBJcdY2wTHfvEMRMBSphHV/view?usp=sharing) + +Note that Wunderbar Network team is already using the same technology stack to consume Substrate blockchain features into the app we are building as part of the Substrate Builders Program, therefore we already have experience in both the core technology stack, and the Polkadot.js API packages. + +This grant **will not** include future ongoing maintenance of the deliverables, unless agreed prior (i.e. smaller grants to periodically refresh/keep up to date), or additional feature requests after the agreed milestone deliveries. We will however address reported bugs and major security vulnerabilities. + +### Ecosystem Fit + +- **Where and how does your project fit into the ecosystem?** + +This app provides a more robust and extendable example/template app compared to the current Substrate Front End Template app, which should be of great value to builders within the ecosystem, that are utilising the same or similar tech stack as ours. + +- **Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)?** + +Primarily UI developers, although any builders interfacing with Substrate would find value. New users, hackathon teams, etc - would also be strong contenders to use this app as a template/baseline for what they are building. + +- **What need(s) does your project meet?** + +The combination of TypeScript's strong, static typing, and Vue's simplicity will together serve the purpose of providing an alternative source of very clear examples of how to interface with a Substrate Node from a modern front-end application, which should be of great value to the community. + +- **Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?** + +The [Substrate Front End Template](https://github.com/substrate-developer-hub/substrate-front-end-template) from the Substrate Developer Hub. Our project aims to provide a more robust example app, providing all the benefits and advantages mentioned above. + +## Team :busts_in_silhouette: + +### Team members + +- Dan Henton +- Mila Dymnikova +- Miloš Ranđelović + +### Contact + +- **Contact Name:** Dan Henton +- **Contact Email:** dan@wunderbar.network +- **Website:** [Wunderbar Network](https://wunderbar.network) + +### Legal Structure + +- **Registered Address:** Level 1, 320 Ti Rakau Drive, Burswood 2013, Auckland, New Zealand +- **Registered Legal Entity:** Greengate Global Ltd + +### Team's experience + +Wunderbar Network is a currently active participant of the Substrate Builders Program. We have extensive experience building Typescript + Vue.js apps, and interfacing with Substrate Nodes via API. + +### Team Code Repos + +- https://github.com/WunderbarNetwork + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/DanHenton +- https://github.com/Milarr +- https://github.com/MilosRandelovic + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/company/wunderbar-network/ + +## Development Status :open_book: + +Not started yet, mockup designs/wireframes provided above. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 6 months +- **Full-Time Equivalent (FTE):** 0.5 FTE +- **Total Costs:** US$ 30,000.00 + +### Milestone 1 - Foundations + Header + Account panels + +- **Estimated duration:** 2 months +- **FTE:** 0.5 +- **Costs:** US$ 10,000.00 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Foundations of a Vue.js app | A standalone Vue.js/Typescript app (built using Vite) | +| 2. | UI/UX elements | Common UI/UX elements from the provided mockup designs for the Header, Balance Transfers and Account Balances panels | +| 3. | Composables | Common composables to connect and interface with a Substrate node and all supported Web3 wallets | +| 4. | Header | Provide common Substrate node metadata and select an "active" account from a list of seeded and injected accounts | +| 5. | Account Balance List & Transfer | Provide the ability to see the balances (and perform a transfer) between both seeded and injected accounts | + +### Milestone 2 - Runtime management, Event Panel and Pallet Interaction Composables + +- **Estimated duration:** 2 months +- **FTE:** 0.5 +- **Costs:** US$ 10,000.00 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Runtime management | The ability (via the header) to choose a Substrate Node connection and upgrade the runtime | +| 2. | Event panel | Display a panel which live-updates from global Substrate Node events | +| 3. | Pallet interaction composables | Composables that are able to call queries, extrinsics, RPCs and read constants | + +### Milestone 3 - Complete Vue.js App + +- **Estimated duration:** 2 months +- **FTE:** 0.5 +- **Costs:** US$ 10,000.00 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). | +| 1. | Pallet Interaction Panel | A panel that can execute extrinsics, RPC calls or display constants, using mapped parameters dynamically generated for each call, and displaying live events as the transaction transitions state | +| 2. | Chain State Query Panel | A panel that can display the chain state, optionally providing parameters, and displaying live events as the transaction transitions state | + +## Future Plans + +We plan to promote this project within the development community. In case of significant Substrate/Polkadot.js API changes in the future, the app should be upgraded to reflect those (out of scope for the grant, as mentioned above). + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Via the Substrate Builders Program, networking with people from Parity/Web3 Foundation From dfec5d56c9cbc14da5ac4b925491c9affbb569f3 Mon Sep 17 00:00:00 2001 From: Sander Bogdanov <130372146+TradeLinkEstonia@users.noreply.github.com> Date: Fri, 28 Apr 2023 10:02:38 +0200 Subject: [PATCH 292/665] Create sandox.md (#1694) * Create sandox.md * Update sandox.md * Update sandox.md * Update sandox.md --- applications/sandox.md | 157 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 157 insertions(+) create mode 100644 applications/sandox.md diff --git a/applications/sandox.md b/applications/sandox.md new file mode 100644 index 00000000000..357bbba1817 --- /dev/null +++ b/applications/sandox.md @@ -0,0 +1,157 @@ +# SanDOx + +- **Team Name:** TradeLink +- **Payment Address:** Polkadot (Statemint): 13bUsemARThdmyXNEpvx2t8A5fNo4ttheSRcsXUWgRpqzjfH (USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +This application is in response to the [Alternative javascript console for Polkadot JS API RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/alternative-polkadot-js-api-console.md). + +### Overview + +SanDOx is an integrated development environment, that is thought to leverage Polkadot development process by providing ecosystem developers with right and convenient components and tools. +Our team – the TRADELINK TECHNOLOGIES OÜ – is focused mostly on crypto trading tools and lately we have been interested in DEX concepts. Meanwhile we are fascinated by the Polkadot Network and see this SanDOx project as a great opportunity to contribute to the DOT ecosystem and show our skills for future projects. + +### Project Details + +![Sandox ide pic](https://user-images.githubusercontent.com/130372146/234008638-f55a3bde-3482-41c5-9b40-6828128ee33d.png) + +SanDOx is an IDE built as a browser app that consist of tool panels (like JetBrains), this type of UX is common to all developers and we suppose it will be intuitive. +SanDOx IDE will have a built-in base list of tool panels and there will be an ability to add personal panels in the form of plug-ins (different panels, as well as personalization feature will be developed on different stages of the project). +Supposed base list of panels: +Project – shows project structure with catalogues and files. +Console –displays results of the user’s code, “console” native object methods (log, warn, info, etc.) +Network – network choice and connection. A user could switch between Polkadot ecosystem parachains, connection code will be generated automatically. +Examples – examples library. Will include different case examples, which could be imported and run. +Find – search panel. Allows search of documents in a project and make multi autocorrect. +Personal panels – user defined and customized. + +Importing libraries from NPM would also be an interesting feature. +Meanwhile, the diverse Polkadot ecosystem could significantly change the classic IDE design and our TradeLink team is passionate about decentralizing processes of storing and running code. There is an opportunity for using Crust and Phala networks’ features and we’d like to do an appropriate research on later stages of the project. +Till then files and settings storage will be local and user’s code will be run straight in the main thread and/or web workers. + +### Ecosystem Fit + +According to the [RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/alternative-polkadot-js-api-console.md) current polkadot js API console has some limitations, which we offer to overcome by creating the SanDOx IDE. + +## Team :busts_in_silhouette: + +### Team members + +- Sander Bogdanov, CBDO at TRADELINK TECHNOLOGIES OÜ; +- Andrey Lugovskoy, CTO and senior fullstack software developer at TRADELINK TECHNOLOGIES OÜ; +- Joseph (Afriyie) Attakorah, middle frontend developer at TRADELINK TECHNOLOGIES OÜ; +- Alena Balakina, lead QA at TRADELINK TECHNOLOGIES OÜ. + +### Contact + +- **Contact Name:** Sander Bogdanov +- **Contact Email:** johngalt@tradelink.pro +- **Website:** https://tradelink.pro/ + +### Legal Structure + +- **Registered Address:** Harju maakond, Tallinn, Kesklinna linnaosa, Tartu mnt 6-10, 10145, Estonia +- **Registered Legal Entity:** TRADELINK TECHNOLOGIES OÜ + +### Team's experience + +Alexander Bogdanov is a serial entrepreneur, expert in IT solutions for smart buildings and smart campuses, visionary of smart technologies for people’s day-to-day life. Alexander is a founder of several crypto initiatives, that lower the entry barrier for new users and help leverage community experience. + +Andrey Lugovskoy has over 12 years of experience creating high availability services. Lead software engineer of a first automated interview service with ultra-high load. As a lead architect implemented highly reliable industrial solutions and development of FinTech apps. + +Joseph (Afriyie) Attakorah is a frontend developer with 5+ years of experience in high load enterprise applications, interested in solving technological problems by combining Software Engineering and Machine Learning techniques. Recently focused on blockchains and creation of decentralized applications for crypto investments. + +Alena Balakina is a QA test engineer and tech writer with over 7 years of experience. As a QA lead Alena implemented testing processes and documentation to one of the world’s first AI-powered blockchain investment service. Alena is highly experienced in development and execution of test cases, development of test scripts for new features and updates, analysis and documentation of bugs and defects, development and maintenance of automated tests using Selenium, Python and JavaScript, wireframe creation and product prototyping, UX research. + +### Team Code Repos + +- https://github.com/BEARlogin + +### Team LinkedIn Profiles (if available) + +- [Alexander Bogdanov](https://www.linkedin.com/in/alexander-bogdanov-b129877a/); +- [Andrey Lugovskoy](https://www.linkedin.com/in/%D0%B0%D0%BD%D0%B4%D1%80%D0%B5%D0%B9-%D0%BB%D1%83%D0%B3%D0%BE%D0%B2%D1%81%D0%BA%D0%BE%D0%B9-2887b753/) +- [Joseph (Afriyie) Attakorah](https://www.linkedin.com/in/joseph-attakorah-b6028786/); +- [Alena Balakina]( https://www.linkedin.com/in/alena-balakina/) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 4 FTE +- **Total Costs:** 30,000 USDT. + +### Milestone 1: IDE app development + +- **Estimated duration:** 2 months +- **FTE:** 2,5 +- **Costs:** 18,000 USDT + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can execute tests that will show how the functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 1. | IDE app skeleton | We will develop the browser IDE core, layout, main menu of the IDE, IDE settings. | +| 2. | Project class | We will develop a class with methods for working with projects: files creation, local storage, retrieving/changing structure and file contents | +| 3. | “Panels” feature | We will develop panels content display and panels drag’n’drop feature. | +| 4. | Code editor | We will implement a code editor (based on the Ace editor) with code highlighting and multiple files opening in panels. | +| 5. | Code compiling feature | We will develop code compiling and run feature from a single file (project compilation from multiple files will be added in the second milestone). | +| 6. | “Console” panel | We will develop a “console” panel to display results of user code. | + +### Milestone 2 “Project” panel development + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 6,000 USDT + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can execute tests that will show how the functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 1. | “Project” panel | We will develop a Project panel that displays hierarchical project tree and can add/delete a new folder/file. | +| 2. | Polkadot js implementation | We will implement Polkadot js library for interaction with parachains. | +| 3. | Project compiling feature | We will develop code compiling and run feature from all files of a project. | + +### Milestone 3 UX development + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 6,000 USDT + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can execute tests that will show how the functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0e. | Article | We will publish an **article** that explains what was achieved, how to use the new app and what are the benefits of using the system | +| 1. | File search | We will develop a search feature in an opened file (case sensitive, by RegExp, etc.) | +| 2. | Hotkeys feature | We will develop a hotkeys handler and implement “events binding hotkeys” to preferences. | +| 3. | Themes support | We will develop IDE themes support and switching functionality. We will deliver two default themes: light & dark. | +| 4. | Settings and projects storage | On this stage of the project we will store all project files and settings locally. The project could be downloaded in a ZIP archive. | + +## Future Plans + +We have wide plans for SanDOx development. Some of them are: +1) Polkadot.js authorization with a user’s wallet +2) Projects and settings storage in an IPFS/blockchain +3) Examples library, that allows developers to use examples for different cases live in the IDE +4) Multistack: we will start with Ink! support +5) Library import from NPM +6) Import/export of projects, adding projects by drag’n’drop +7) “Network” panel, connection code autogeneration, chain state +8) “Find” panel +9) "Extrinsics" panel +10) "RPC calls" panel +11) PWA +12) New IDE themes, themes constructor +13) Plug-ins support for adding features by other teams + +## Referral Program (optional) :moneybag: + +- **Referrer:** [@dsrdrk11a](https://github.com/dsrdrk11a) +- **Payment Address:** Polkadot (Statemint): 16ccCa6P9TwEzMbghTnsj1Z4YMMEgFons6PkmwBRcwLeBEf (USDT) From b8072518f95f756592ddfeeba31680db25c0b816 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Fri, 28 Apr 2023 10:37:24 +0200 Subject: [PATCH 293/665] Update index.md solidity-trie-verifier m1 delivered and grant completion --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7ad6611e4d2..3a1ba233553 100644 --- a/applications/index.md +++ b/applications/index.md @@ -78,7 +78,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | | [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | From be5425ca865479fae42482265a9d75c2dd2dbc72 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 28 Apr 2023 14:57:41 -0300 Subject: [PATCH 294/665] Update index.md (#1708) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3a1ba233553..525db1180ba 100644 --- a/applications/index.md +++ b/applications/index.md @@ -87,7 +87,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | -| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☐ | ☐ | +| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | From 108a9fbd1cb25b95c997a157600630329395fb5a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 28 Apr 2023 20:41:31 +0200 Subject: [PATCH 295/665] Update index.md TradeLink --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 525db1180ba..baf7e4fac58 100644 --- a/applications/index.md +++ b/applications/index.md @@ -48,6 +48,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | +| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | [🔝](#menu) From 570e3e4f01ab3e68c0a4d23ca8fb9ffdc9da07f5 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 28 Apr 2023 20:44:01 +0200 Subject: [PATCH 296/665] Update index.md https://github.com/WunderbarNetwork --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index baf7e4fac58..82e65725745 100644 --- a/applications/index.md +++ b/applications/index.md @@ -49,6 +49,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | +| [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | [🔝](#menu) From 8100189b8b746ba8990afdaf294f098096c680f9 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 2 May 2023 17:28:42 +0200 Subject: [PATCH 297/665] Update index.md (#1713) accept tokenomics 2022 m1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 82e65725745..ab3c77c9264 100644 --- a/applications/index.md +++ b/applications/index.md @@ -78,7 +78,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | -| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☐ | ☐ | +| [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☒ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | | [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | From c0eb5119320adb48ea77e75087a434e4bb1e92d5 Mon Sep 17 00:00:00 2001 From: Mohamed Abdulaziz Date: Wed, 3 May 2023 08:46:09 +0200 Subject: [PATCH 298/665] Fix hyperlink destination (#1714) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b840448699c..b8c682a7303 100644 --- a/README.md +++ b/README.md @@ -194,7 +194,7 @@ Ideas generally have better chances of being implemented if they're presented in 2. In the newly created fork, create a copy of the suggestion template ([`RFPs/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) folder. Make sure you create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/docs/RFPs/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. -5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. +5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grants-Program/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see the same template as for creating an application. Please replace it with [this one](.github/PULL_REQUEST_TEMPLATE/rfp_pr_template.md). 7. The RFP will be accepted and merged as soon as it receives three approvals from [W3F Grants Committee](https://github.com/w3f/Grants-Program#w3f-grants-committee) members. From 37bcc8e1188497a213f6ea65ec0be3d4227b009f Mon Sep 17 00:00:00 2001 From: Ivan Leshchenko <128095804+IvanLeshchenko727@users.noreply.github.com> Date: Thu, 4 May 2023 00:12:29 +0300 Subject: [PATCH 299/665] Patron Grant Application (#1617) * Grant for Patron * Add UI concept link * Update team members and milestones * Remove Milestone 2 --- applications/patron.md | 267 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 267 insertions(+) create mode 100644 applications/patron.md diff --git a/applications/patron.md b/applications/patron.md new file mode 100644 index 00000000000..c5433e6e46b --- /dev/null +++ b/applications/patron.md @@ -0,0 +1,267 @@ +# Patron + +- **Team Name:** [727.ventures](https://github.com/727-Ventures) +- **Payment Address:** ERC 20 ADDRESS (DAI): +0x352F779203202c99699CdA8cc95adF06CcC8abEf +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +Patron is your one stop smart contract manager for Polkadot ecosystem. + +Patron's tech stack consists of Rust (with [`axum`](https://docs.rs/axum) being used as an HTTP server), TypeScript (React, Next.js, polkadot{.js}), PostgreSQL. + +### Overview + +Nowadays, smart contracts are one of the main instruments of development in the blockchain world. As blockchain itself should be open and reliable, we want to create a registry of all available contracts, so everyone could understand the risks and check whether a specific contract is safe or not. + +The other side of it - manager of smart contracts, so every developer could manage his own contracts just like using GitHub. It is very important for users to have connection with what developers do, so that will increase trust between them. + +## Existing problems + +1. Seamless verification ✅. An ability to seamless get your on-chain deployed contract logic verified and matched with existing source code, using the usual deployment flow without obscure actions. +2. Inefficient build flow. No automatic build flow results in awful developer experience for those developing on ink!. This means that developers have to manually start builds and manually deploy contract on each development iteration. +3. Inefficient contract deployment. CLI/script deployment usually are not sufficient for local/testnet development while existing UI instruments are rather complicated . +Also, there is no common deploy flow for every stage - local/testnet/production, a tool that would combine both CLI automation and UI playground. +4. Unified contract management. Deployed smart contract management is currently done with the usage of hard-to-use CLI tools or UI instruments with just the basic features available. Also, developer contract management(UI used during development) and post-deployment contract management are different tools and interfaces(UIs). +5. Vulnerability research is done mostly ad-hoc, with no unified platform being available to assist users in covering common vulnerabilities. Ecosystem also lacks automatic vulnerability scanning platform, which will catch common mistakes in smart contracts that could lead to security issues. +6. Interaction with external resources (like HTTP APIs) based on events is obscure and has to be implemented manually. + +## Project details + +UI concept can be previewed [here](https://www.figma.com/file/Q50Z11g0LKROslWIIbgR8K/Patron-Concept). + +### Smart contract explorer + +Explorer that behaves similarly to Subscan, which allows users to find smart contracts by their address +and see the data of the smart contract (code, dependencies, version of the compiler, chain etc.). + +### Smart contract verification module + +As part of our deployment flow, the verification module will provide a reproducible verification environment to build and verify ink! smart contracts. + +Users will be able to supply smart contract code and tooling versions, which will be invoked inside of an isolated environment. + +After user supplied code build, smart contract explorer users can see verification details (similar to how it's implemented in EtherScan). + +To start using verification module, users will need to pay a fee. This will protect the verification module from abuse. + +```mermaid +sequenceDiagram + User->>+Patron: Account verification (to prevent build system abuse) + User->>+Build system: Smart contract code and build information + Build system->>+Patron: Verified smart contract + Patron->>+User: Verified smart contract + User->>+Patron: Deployment request (without passing private keys) +``` + +### Deployment tool + +As part of our platform, we plan to provide users with a unified deployment tool that builds and publishes smart contracts for popular mainnets and testnets. + +The contract build process is done on our platform side using isolated containers and contract verification workflow, while the deployment itself is done on user's side, +without delegating any private keys to us. + +Eventually, we plan to unify our tools into Patron CLI, allowing developers to create new ink! contracts, +use existing smart contract templates, transpile existing Solidity contracts, or generate Typechain bindings +without leaving the same unified interface they will already be familiar with. + +## Future work + +Our long-term plans are to become a unified solution for developers to verify and deploy smart contracts, and for regular users to discover new smart contracts on. + +We are eventually planning on providing monetization features in Patron, however the details are to be worked on later. We will not gatekeep +users from the general hosted Patron functionality, while also providing all the necessary means to deploy a self-hosted instance. + +### Smart contract manager + +Manager that will allow users to register and deploy their contracts and invoke various actions on existing contracts available on the platform, such as periodic invocation and vulnerability scanning. + +Unified ink! smart contract manager solution allows us to provide improved transparency (by building a contract ourselves and publishing it or by verifying an already published contract to match the provided source code), security (integrated vulnerability scanning, audit publishment capabilities) and versatility (periodic contract invocation, integrated scripting features.). + +Smart contract manager should provide most (if not all) of its functionality while keeping user’s private keys private, without delegating them to Patron. + +### Build/Compile flow + +Our unified deployment tool will also include code watching capabilities, allowing developers to quickly test application locally in an interactive fashion, without wasting time on manual smart contract deployment and instantiation. + +### Vulnerability scanning and bug bounty program + +We plan to integrate security features into our platform by providing users with capabilities to review existing smart contract audits done by third-party companies and eventually provide a platform to audit smart contracts. + +Vulnerability scanning can be invoked automatically to detect various common vulnerabilities via pre-configured intrinsics, while still allowing users to review contracts in more detail if necessary. + +### Scripting functionality + +As part of the smart contract manager, we plan to provide a scripting functionality that will allow smart contract developers to access external APIs and implement complex workflows that depend on external data. + +Patron will automatically (and in a verifiable way) request external APIs and call user’s smart contract methods with data obtained from the response. + +This workflow may be executed based on the contract’s dispatched events or just by periodic contract calls. + +```mermaid +sequenceDiagram + Smart contract-->>+Patron: WeatherDataRequest event was dispatched. + Patron->>+External API: Weather data request. + External API->>+Patron: Weather data response. + Patron->>+Smart contract: set_weather_data method call +``` + +We can also provide a smart contract with external data based on timer: + +```mermaid +sequenceDiagram + Note left of Smart contract: No events on their own. + Note right of Patron: Timer has reached zero. + Patron->>+External API: Weather data request. + External API->>+Patron: Weather data response. + Patron->>+Smart contract: set_weather_data method call +``` + +This feature can be expanded with vast scripting support, allowing user to execute arbitrary off-chain code that interacts with external services and the smart contract itself. + +## Ecosystem fit + +### Where and how does your project fit into the ecosystem? + +Our platform can significantly improve the ink! ecosystem by covering transparency and security and providing versatile features, allowing developers and smart contract users to discover, discuss and improve. + +### Who is your target audience? + +Our target audience is WebAssembly smart contract developers, independent auditors, vulnerability researchers, and users who want to discover new smart contracts to use and discuss. + +### What need(s) does your project meet? + +Our project can significantly improve the general trust of users in smart contracts while also improving developer user experience by providing a versatile feature set. + +### Are there any other projects similar to yours in the Substrate/Polkadot/Kusama ecosystem? + +We are aware of Epirus Substrate explorer project (as well as an active project to create an ink! verification server). + +Epirus explorer provides smart contract explorer features, however, no known effort to create a smart contract manager (similar to [OpenZeppelin Defender](https://www.openzeppelin.com/defender) functionality) is ongoing. + +Verification will be part of the deploy flow and thus with mass adoption will be out of the box for every product deployed. + +## Team members + +- **Markian Ivanichok** (СEO of 727.ventures) +- **Dominik Krížo** (Head of Engineering | 727.ventures) +- **Ivan Leshchenko** (Blockchain Developer | 727.ventures) +- **Nameless Endless** (Blockchain Developer | 727.ventures) +- **Varex Silver** (Blockchain Developer | 727.ventures) +- **Artem Lech** (Blockchain Developer | 727.ventures) +- **Matviy Matsipura** (Designer | 727.ventures) + +**Contact** + +- **Contact Name:** Ivan Leshchenko +- **Contact Email:** ivan.leshchenko@727.ventures +- **Website:** [727.ventures](https://727.ventures) + +**Legal Structure** + +- **Registered Address:** The registered office shall be in Coastal Building, Wickham’s + +Cay II, P. O. Box 2221, Road Town, Tortola, VG1110, British Virgin Islands. + +- **Registered Legal Entity:** Seven2seven Ventures Ltd + +**Team's experience** + +- **Markian Ivanichok** + +CEO of 727.ventures, a blockchain entrepreneur, and a software engineer. + +I began my engineering career at the age of 15 and have since gained extensive experience in both engineering and leadership. Having founded a couple of startups, I also gained entrepreneurial experience. I was inspired to co-found and invest in Sector F, one of the top consulting companies in Ukraine that helps entrepreneurs to accelerate their growth. + +- **Dominik Krížo** + +Head of Engineering + +Started programming his own games at the age of 15 as a hobby, then went to University to study informatics and object-oriented programming, becoming an Android developer and eventually switching to work in web3. Dominik played a crucial role in the OpenBrush and Sol2Ink development and is currently developing the ink! smart contracts tools as part of Brushfam. + +- **Ivan Leshchenko** + +Blockchain Developer + +Blockchain developer with proficiency in the Rust programming language. Developed various libraries and applications using Rust, with a primary interest in developing the WASM smart contract ecosystem. + +- **Nameless Endless** + +Blockchain Developer + +Became interested in programming at the age of 16. At this time, he tried web development and created a website. Then decided to go to University to study system programming and object-oriented programming. Most often, he used C and C++ languages. Nameless likes innovations of web3 technologies and believes in the potential of Rust language and WASM standards for smart contracts. + +- **Varex Silver** + +Blockchain Developer + +Student of Computer Science at the Kyiv National University of Taras Shevchenko. Participated in programming competitions of different stages in school since 2017 (C++). Was a Backend developer (Go), Solidity developer(Solidity, Hardhat, Typescript), and now a Blockchain developer (Rust, Typescript). + +- **Artem Lech** + +Blockchain Developer + +Student of Applied Mathematics at the Kyiv National University of Taras Shevchenko. Started programming in 2016 and participated in a lot of Ukrainian and international competitions of competitive programming. Worked as a lecturer of algorithms at the school of competitive programming and as Intern Backend Engineer (Rust). Now works as Blockchain Developer on Polkadot Blockchain (Rust, Typescript). + +**Matviy Matsipura** + +Gained professional experience as a lead designer in a product company, where he was responsible for creating packaging and visual designs for a popular milk +brand in Ukraine. Transitioned to the field of web3 design and is currently leading the design process for blockchain projects. + +**Team Code Repos** + +- https://github.com/727-Ventures + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/coreggon11 +- https://github.com/ivan770 +- https://github.com/o-tsaruk +- https://github.com/varex83 +- https://github.com/Artemka374 + +**Team LinkedIn Profiles** + +- https://www.linkedin.com/in/mivanichok/ +- https://www.linkedin.com/in/dominik-krizo/ +- https://www.linkedin.com/in/tsaruk-olexandr/ +- https://www.linkedin.com/in/bogdan-ogorodniy/ +- https://www.linkedin.com/in/artem-fomiuk-31249b226/ + +## Development roadmap + +### Overview + +Total duration: 7 weeks + +FTE: 3 + +Total cost: 63,000 USD + +### Milestone 1 - MVP with verification functionality only + +Duration: 7 weeks (Frontend, Backend, CLI utility implementations). + +FTE: 3 + +Total cost: 63,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide API documentation for contributors to get along with the codebase, as well as a detailed self-hosting instructions for users to create their own nodes. | +| 0c. | Testing guidelines | Core functionality will be covered by a comprehensive unit test suite. | +| 0d. | Docker | We will prepare Docker images for users to spin up their own nodes more easily and conveniently. | +| 0e. | Article | We will publish an article that explains the achievements done as part of the grant. | +| 1a. | Backend storage | Backend implementation with contract discovery and persistent storage. | +| 1b. | Sync server | A separate server that catches new contract deployments and events will be implemented. | +| 1c. | Smart contract builder | Immutable, pre-configured smart contract builders are to be implemented for verified smart contract deployment. | +| 2a. | Web UI | A simple web UI will be implemented to expose Patron functionality. | +| 2b. | Detailed contract information | Frontend to display detailed contract info (as well as verification status) will be implemented. | +| 2c. | User authentication | We will implement a web3-oriented authentication solution | +| 3a. | Developer CLI utility | A deployment workflow unified, developer-oriented CLI utility will be implemented. | + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Personal recommendation From 85ebf6f96820c6d1978bedd41f1aa3b75ef640a1 Mon Sep 17 00:00:00 2001 From: Mohamad Irfianto <81077632+emarai@users.noreply.github.com> Date: Thu, 4 May 2023 13:06:44 +0700 Subject: [PATCH 300/665] Application Profond (#1682) * Create Profond.md * Update Profond.md * Update Profond.md * Remove indexer in M2 Not relevant in Polkadot, has been solved by subsquid * Remove irrelevant chains and update deliverables --- applications/Profond.md | 158 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 applications/Profond.md diff --git a/applications/Profond.md b/applications/Profond.md new file mode 100644 index 00000000000..305899e3922 --- /dev/null +++ b/applications/Profond.md @@ -0,0 +1,158 @@ +# [Profond.ai](http://Profond.ai) - No Code Builder for artists and developers to build, validate, and scale their dApp. + +- **Team Name:** Profond AI, Corp. +- **Payment Address:** 0x92710b669eA59b348cfbe6dcA8682DAabfB5f06A (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +[Profond.ai](http://profond.ai/) is web3 tools to help developers and creators to build, validate, and scale their dApps. We provide smart contract builder (NFT and token), analytic, and indexer. + +We’re focusing on emerging chain and we aim to onboard millions of developers by making it easier onboarding for users to create smart contracts. + +### Project Details + +We’re inspired by [Pagoda.co](http://Pagoda.co), no code builders in the Near Ecosystem. It provides: + +1. No Code Builder: Create smart contracts for Token and NFT +2. Indexer (coming soon): To help successful projects and enterprises scale their dApp. +3. Analytics (coming soon): Data analytics for smart contracts, covering volume, users, transactions, and gas fees. +4. API Analytics (coming soon): To get data from analytics. + +Currently, we’re building MVP for users to create NFT and Token. Analytics, API and Indexer is still under development. + +We’re planning to add more parachains from Polkadot and Kusama to our platform. Here’s our current MVP: [http://console.profond.ai/](http://console.profond.ai/) + +Create NFT Collection + +NFT Tools +NFT Tools, currently require users to manually upload the collection via NFT-Up, we’re working to make it drag&drop + +![Untitled (2)](https://user-images.githubusercontent.com/81077632/232679334-a4c46b51-14e5-4be9-8c56-99a4c32152b2.png) +Token/Coin tools. We’re looking at the example when we creating 1 million XOIN token (see “Coin Minting” section) + +Analytics +Example of smart contract analytic. In this image, we’re doing analytic on marketplace.paras.near. + +### Ecosystem Fit + +We aim to launch on Polkadot and Kusama, here’s what problem we’re trying to solve: + +- For creators, creating a smart contract for their NFTs and tokens is hard. Especially in relatively new WASM smart contracts like ink! . +- For UI developers, blockchain development is too complex. Furthermore, each chain has its own complexity. +- Limited tooling for Polkadot and Kusama ecosystem. +- For emerging chain, we help them create smart contract templates. + +## Team :busts_in_silhouette: + +### Team members + +- CEO & Founder: Adhiguna Mahendra +- Product Lead & Founder: Ekki Rinaldi (Ekki) +- Full-stack Developer & Founder: Rizky Irfianto (Irfi) +- Database Engineer & Founder: Bagas Prakasa +- Full-stack Developer: Ade Yusup +- Smart Contract Engineer: Amajid Sinar (Jedi) +- Business Development: Vincent Salaka + +### Contact + +- **Contact Name:** Ekki +- **Contact Email:** ekki@profond.ai +- **Website:** https://profond.ai + +### Legal Structure + +- **Registered Address:** 2810 North Church Street, Wilmington, Delaware 19802 +- **Registered Legal Entity:** Profond AI, Corp. + +### Team's experience + +Our founders we’re building the biggest NFT marketplace in the Near ecosystem (Paras NFT Marketplace) and recently integrated with Astar Network. As builder and part of NFT community, we understand what builders need (especially FE engineer) and for artist who want to launch their on NFT. Our team led by tech veteran who had experience working in Silicon Valley, Adhiguna Mahendra, with 20+ years of experience. + +We helped grow the NEAR NFT ecosystem by contributing to NFT with open-source projects such as NFT smart contract standard, marketplace smart contract, vesting smart contract, and so on as you can see on the project’s repo: [https://github.com/parasHQ/](https://github.com/parasHQ/) + +Here’s our recent works: + +Paras Launchpad: [https://launchpad.paras.id/](https://launchpad.paras.id/) - NFT Launchpad in Astar using ink! + +Arkana Raffler: [https://arkana.gg/](https://arkana.gg/) + +Pipapo Ticketing System: [https://pipapo.io/](https://pipapo.io/) + +### Team Code Repos + +- [https://github.com/emarai](https://github.com/emarai) +- [https://github.com/ekkirinaldi](https://github.com/orgs/profondHQ/people/ekkirinaldi) +- [https://github.com/bagasprakasa](https://github.com/bagasprakasa) +- [https://github.com/internnos](https://github.com/internnos) +- [https://github.com/adeyusupp](https://github.com/adeyusupp) + +### Team LinkedIn Profiles (if available) + +- [https://www.linkedin.com/in/adhigunamahendra/](https://www.linkedin.com/in/adhigunamahendra/) +- [https://www.linkedin.com/in/bagasprakasa/](https://www.linkedin.com/in/bagasprakasa/) +- [https://www.linkedin.com/in/irfianto/](https://www.linkedin.com/in/irfianto/) +- [https://www.linkedin.com/in/amajidsinar/](https://www.linkedin.com/in/amajidsinar/) +- [https://www.linkedin.com/in/ekkirinaldi/](https://www.linkedin.com/in/ekkirinaldi/) +- [https://www.linkedin.com/in/vincentsalaka/](https://www.linkedin.com/in/vincentsalaka/) +- [https://www.linkedin.com/in/adeyusupp/](https://www.linkedin.com/in/adeyusupp/) + +## Development Status :open_book: + +PoC → Here’s our current MVP [http://console.profond.ai/](http://console.profond.ai/) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** Duration of the whole project (e.g. 2 months) +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** $10.000 + +### Milestone 1 — No code smart contract builder + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 4,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide documentation page on how to create NFT (PSP34) and FT (PSP22) smart contract with our interface. API documentation for project settings will also be provided. | +| 0c. | Testing and Testing Guide | All functions will be covered with full integration test, testing guide will also be provided. | +| 0d. | Article | We will publish an article that explains the no code builder | +| 1. | No Code NFT Creation (ink!) | Allows users to create NFT collection smart contract (PSP34) using ink! in one of WASM supported Parachains. User will be able to login with Polkadot Wallet (SubWallet, polkadot.js, Talisman) and then deploy smart contract with provided code hash. The code hash will be uploaded using selected templates from OpenBrush PSP34 Smart contract. We are abstracting the technical details from users, users just need to upload NFT images, set metadata, and pay gas fee to deploy the smart contract. We will be using useInkathon for wallet and transaction, Next.Js for frontend framework, and OpenBrush for smart contract templates. | +| 2. | No Code Fungible Token Creation (ink!) | Allows users to create NFT collection smart contract (PSP34) using ink! in one of WASM supported Parachains. User will be able to login with Polkadot Wallet (SubWallet, polkadot.js, Talisman) and then deploy smart contract with provided code hash. The code hash will be uploaded using selected templates from OpenBrush PSP22 Smart contract. We are abstracting the technical details from users, users just need to set metadata and pay gas fee to deploy the smart contract. We will be using useInkathon for wallet and transaction, Next.Js for frontend framework, and OpenBrush for smart contract templates. | +| 3. | Project Management Module | Allows users to create more than one projects. We are using NestJS for backend framework. | +| 4. | Multichain Integration | Allows users to choose between Polkadot Parachains and Kusama | + +### Milestone 2 Example — Analytics and API + +- **Estimated Duration:** 1 month +- **FTE:** 2 +- **Costs:** 6,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide documentation page on how to create basic NFT collection (PSP34) using our no-code builder and creating a fungible token (PSP22). | +| 0c. | Testing and Testing Guide | All functions will be covered with full integration test, testing guide will also be provided. | +| 0d. | Article | We will publish an article that explains the analytics and API usage | +| 1. | Analytic Functionality | Add on-chain analytic for the smart contract. | +| 2. | REST API Service | API for users to get the data analytic. | + +## Future Plans + +Experimenting in business model. We have two kind of ideation we want to validate: + +1. Indexer service, providing RPC for dApp to cut their operational costs +2. Royalties enforcement for each NFT created. + +On top of that, we aim to onboard more emerging chains and big chains like Solana and Ethereum. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website From beebea3fb301904e9a4ebfbbb7dd0d0d52444bad Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 4 May 2023 08:09:30 +0200 Subject: [PATCH 301/665] Update index.md Add Profond --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index ab3c77c9264..54320e13e9a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -50,6 +50,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | +| [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | [🔝](#menu) From f926fa7722ad57845ab932dc2905eff880bc2afe Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 4 May 2023 08:51:41 +0200 Subject: [PATCH 302/665] fix website --- applications/Profond.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/Profond.md b/applications/Profond.md index 305899e3922..1ffc4d68a3a 100644 --- a/applications/Profond.md +++ b/applications/Profond.md @@ -25,15 +25,15 @@ Currently, we’re building MVP for users to create NFT and Token. Analytics, AP We’re planning to add more parachains from Polkadot and Kusama to our platform. Here’s our current MVP: [http://console.profond.ai/](http://console.profond.ai/) -Create NFT Collection +Create NFT Collection -NFT Tools +NFT Tools NFT Tools, currently require users to manually upload the collection via NFT-Up, we’re working to make it drag&drop ![Untitled (2)](https://user-images.githubusercontent.com/81077632/232679334-a4c46b51-14e5-4be9-8c56-99a4c32152b2.png) Token/Coin tools. We’re looking at the example when we creating 1 million XOIN token (see “Coin Minting” section) -Analytics +Analytics Example of smart contract analytic. In this image, we’re doing analytic on marketplace.paras.near. ### Ecosystem Fit From cd65a393a74cf52d28a3cacbc2d3c6296acaf194 Mon Sep 17 00:00:00 2001 From: Cyril Carlier Date: Thu, 4 May 2023 09:39:56 +0200 Subject: [PATCH 303/665] Maki amend 2 (#1717) * Amend Maki - timeline and payment address * Remove merge conflict... * Update Maki.md --- applications/Maki.md | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) diff --git a/applications/Maki.md b/applications/Maki.md index 97771db5e8f..6e6e14e7fa5 100644 --- a/applications/Maki.md +++ b/applications/Maki.md @@ -1,7 +1,7 @@ # Maki - **Team Name:** Cyril Carlier (Individual) -- **Payment Address:** 0x7e575d2140aa4b723ac2014d5627330a7ed514d4 (ERC-20 USDC) +- **Payment Address:** 0x8a0cFA1DE5c26e3Cd553F33Dc560fBfa5267867C (ERC-20 USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview :page_facing_up: @@ -121,24 +121,14 @@ As mentioned, this application is a response from the [anti-collusion infrastruc ### Overview -<<<<<<< HEAD -- **Total Estimated Duration:** 12 months +- **Total Estimated Duration:** 15 months - **Full-Time Equivalent (FTE):** 0.15 FTE -======= -- **Total Estimated Duration:** 6 months -- **Full-Time Equivalent (FTE):** 0.3 FTE ->>>>>>> origin/master - **Total Costs:** $9,000 ### Milestone 1 — Implement Voter functions -<<<<<<< HEAD -- **Estimated duration:** 6 months +- **Estimated duration:** 9 months - **FTE:** 0.1 FTE -======= -- **Estimated duration:** 2 months -- **FTE:** 0.3 FTE ->>>>>>> origin/master - **Costs:** 3,000 USD | Number | Deliverable | Specification | @@ -157,13 +147,8 @@ Note: As the implementation is based on others work (research and specification) ### Milestone 2 — Coordinator's functions -<<<<<<< HEAD - **Estimated Duration:** 6 months -- **FTE:** 0.2 FTE -======= -- **Estimated Duration:** 4 months - **FTE:** 0.3 FTE ->>>>>>> origin/master - **Costs:** 6,000 USD | Number | Deliverable | Specification | From d0fc6a0db2bd1e4db4dea2041a8770e18e08614e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 4 May 2023 09:43:17 +0200 Subject: [PATCH 304/665] Update index.md Add Patron --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 54320e13e9a..bbddda6ac52 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,6 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | [🔝](#menu) From 59fe82fe46ad959aa6735006ffb594876f1231c2 Mon Sep 17 00:00:00 2001 From: Nabil Abdellaoui Date: Mon, 8 May 2023 01:34:28 -0400 Subject: [PATCH 305/665] Update index.md (#1719) XCM Tools first delivery --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index bbddda6ac52..d50233aa800 100644 --- a/applications/index.md +++ b/applications/index.md @@ -98,7 +98,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | -| [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☐ | ☐ | +| [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | From 40565b9baaee9e576a42d453aa8c1b7e7996baeb Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 8 May 2023 10:37:49 -0300 Subject: [PATCH 306/665] Update index.md (#1723) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d50233aa800..9c4324ee93f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -90,7 +90,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | -| [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☐ | ☐ | +| [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☒ | ☐ | | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | From 9fc0fad1e567675ea4713892ce9de7e66421fe99 Mon Sep 17 00:00:00 2001 From: masapr <40862722+masapr@users.noreply.github.com> Date: Mon, 8 May 2023 15:50:12 +0200 Subject: [PATCH 307/665] proposal: static analysis tool for runtime pallets (#1706) --- applications/sarp-basic-functionality.md | 141 +++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 applications/sarp-basic-functionality.md diff --git a/applications/sarp-basic-functionality.md b/applications/sarp-basic-functionality.md new file mode 100644 index 00000000000..485712cd299 --- /dev/null +++ b/applications/sarp-basic-functionality.md @@ -0,0 +1,141 @@ +# SARP - A Static Analysis Tool for Runtime Pallets + +- **Team Name:** Supercomputing Systems AG (SCS) +- **Payment Address:** 0xd24622311a22470353bd21d9bcd9e02ba0cfebbe (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is a response to the RFP [Static Analysis for Runtime Pallets](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) + +### Overview + +[Runtime Pallets](https://docs.substrate.io/learn/runtime-development/) are modules for writing the business logic of blockchains in [Substrate](https://github.com/paritytech/substrate) (a Rust framework for building blockchains). These are usually concise pieces of standalone code with relatively few dependencies and clear specifications, hence tractable targets for performing static analysis and verification. The code quality of a runtime pallet is crucial, as even minor defects can result in major exploits like DoS attacks or the stealing of funds by a malicious party. A static code analysis can help to automate the auditing processes and prevent introduction of defects throughout the software life-cycle. + +Therefore we would like to develop a tool - SARP (Static Analysis tool for Runtime Pallets) to perform static analysis with reasonable soundness guarantees. In particular, we would like to target vunerability classes that are detectable using dataflow analysis techniques like *tag analysis* and *taint analysis*. + +Our team has no prior knowledge in static code analysis, but has a good understanding of substrate and Rust. + +### Project Details + +We will base our work on [MIRAI](https://github.com/facebookexperimental/MIRAI/) and extend it with checks on substrate pallets. For details see the [Development Roadmap](#development-roadmap-nut_and_bolt) + +### Ecosystem Fit + +The tool will help any team developing substrate pallets. It can further be integrated in the CI pipelines of the teams, providing a continuous quality check on the pallet code. + +In the long term it could be interesting to connect the work done here with the new emerging auditing DAOs (like [Fuzzland](https://github.com/w3f/Grants-Program/blob/master/applications/FuzzLand.md) or [QRUCIAL DAO](https://github.com/w3f/Grants-Program/blob/master/applications/QRUCIAL_DAO.md)). + + +## Team :busts_in_silhouette: + +### Team members + +- Sabine Proll: Project Lead +- Bigna Härdi: Developer +- Edith Chevrier: Developer +- Thomas Niederberger: Developer + +### Contact + +- **Contact Name:** Sabine Proll +- **Contact Email:** Sabine.Proll@scs.ch | info@scs.ch +- **Website:** https://www.scs.ch + +### Legal Structure + +- **Registered Address:** Technoparkstrasse 1, 8005 Zürich, Switzerland +- **Registered Legal Entity:** Supercomputing Systems AG + +### Team's experience + +Supercomputing Systems AG is a contractor with 130 engineers, working in the fields of software, electronics and system design. Profound know-how, solid methodological competence as well as efficient project management are the foundation of our success. Within the company we have a team of 5 blockchain developers, who have experience in the Polkadot ecosystem. + +Our blockchain team has been a contributor to the ecoysystem since 2019. We started with grants from the Web3 Foundation to build the basis for [Integritee](https://github.com/integritee-network) (see our grants from waves [1](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md), [3](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate-api-client.md) and [5](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/SubstraTEE-extension-pack1.md)). After that, our team has worked for Integritee and Encointer as a contractor. Recently the team received grants from the Kusama treasury for maintaining and improving the [substrate-api-client](https://github.com/scs/substrate-api-client), see our proposals for [Nov 22 - Jan 23](https://kusama.subsquare.io/referenda/referendum/26) and [Feb 23 - Apr 23](https://kusama.subsquare.io/referenda/referendum/88). + +### Team Code Repos + +The team has mainly worked on the following repositories + +- [Substrate Api Client](https://github.com/scs/substrate-api-client) +- [Integritee Worker](https://github.com/integritee-network/worker) +- [Encointer Sidechain](https://github.com/encointer/community-sidechain) + +Github accounts of the team members + +- https://github.com/masapr +- https://github.com/haerdib +- https://github.com/echevrier +- https://github.com/Niederb + + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/sabine-proll-5a7118153 +- https://www.linkedin.com/in/bigna-h%C3%A4rdi-736bb21a9 +- https://www.linkedin.com/in/edith-chevrier-90233297 +- https://www.linkedin.com/in/thomas-niederberger-6057b71a7 + +## Development Status :open_book: + +We will base our work on [MIRAI](https://github.com/facebookexperimental/MIRAI) and the RFP [Static Analysis for Runtime Pallets](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) + +We have not started to work on this. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 0,5 months +- **Full-Time Equivalent (FTE):** 0,8 FTE +- **Total Costs:** 10.000 USD + + + + +#### Vulnerability Classes +For this project we want to address the following vulnerability classes: + +* [incorrect origin](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/incorrect-origin/description.md) of dispatchable functions. +* [unsigned transaction](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/unsigned-transaction/description.md) validation. + + +### Milestone 1 - Research + +- **Estimated duration:** 0,5 months +- **FTE:** 0,8 FTE +- **Costs:** 10.000 USD + +In milestone 1 we want to investigate how the above stated [vulnerability classes](#vulnerability-classes), can be detected by extending MIRAI. + +#### Deliverables + +| Number | Deliverable | Specification | +|--------|-----------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | MIT | +| 0b. | User Documentation | We will provide a basic **tutorial** that explains how to use the tool on a substrate pallet. | +| 0c. | Testing and Testing Guide | A first set of tests will be provided, together with a testing guide, that describes how to run them. | +| 1. | Prototype Code | Prototype code to approach the above two stated vulnerability classes. | +| 2. | Documentation | Technical documentation
  • describing the approach we plan to implement in milestone 2, incl. its limitations.
  • with (interesting) examples of the vulnerability classes.
| +| 3. | Engagement | Engage with teams at Web3 Foundation and Parity for prioritization. | + + +## Future Plans + +The next steps for the tool would be to: + +1. Implement a first simple version of the tool, together with tests and documentation. +2. Improve the usability, by providing + * means to surpress warnings + * a comprehensive user tutorial, incl. documentation on the risks of each vulnerability +3. Add more features including checks on the following vulnerability classes: + * tracking bad randomness: ensure bad randomness does not leak into sensitive functions. + * detect panics statically to avoid potential DoS attacks: these include [unsafe arithmetic operations](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/arithmetic-overflow/description.md), access outside bounds, assertion failures, etc. + * tracking unsanitised input leakage for sensitive functions. + +Once we have a tool with a good feature set and basic usability features, we want to promote it to the Polkadot developers. Once the tool is in use, we hope to receive feedback on further features and improvements by the developers. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** +We have previously received grants by the Web3 Foundation for other projects (substratee and substrate-api-client). \ No newline at end of file From 9f28bf103f80c4151ac0b81230bcbad3eab53970 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 8 May 2023 16:25:23 +0200 Subject: [PATCH 308/665] Update index.md SARP - A Static Analysis Tool for Runtime Pallets --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 9c4324ee93f..704305d40aa 100644 --- a/applications/index.md +++ b/applications/index.md @@ -52,6 +52,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | [🔝](#menu) From 7018b917b448624c700ebbc3e4719c58ec783e0e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 8 May 2023 17:40:36 +0200 Subject: [PATCH 309/665] RFP: Host test-suite (#1721) * Initial Draft * Update rfp doc, change name * bhargavbh fixes --- .../polkadot-protocol_conformance_tests.md | 48 +++++++++++++++++++ docs/rfps.md | 1 + 2 files changed, 49 insertions(+) create mode 100644 docs/RFPs/Open/polkadot-protocol_conformance_tests.md diff --git a/docs/RFPs/Open/polkadot-protocol_conformance_tests.md b/docs/RFPs/Open/polkadot-protocol_conformance_tests.md new file mode 100644 index 00000000000..2852771e682 --- /dev/null +++ b/docs/RFPs/Open/polkadot-protocol_conformance_tests.md @@ -0,0 +1,48 @@ +# Polkadot Protocol Conformance Tests + +* **Status:** Open +* **Proposer:** [Bhargav Bhatt](https://github.com/bhargavbh), [David Hawig](https://github.com/Noc2) +* **Objectives:** Create and maintain a comprehensive test-suite for conformance of core functionalities of Polkadot Host. + +## Project Description :page_facing_up: +The reliability and security of the Polkadot network crucially depends on bug-free implementation of Hosts/Nodes. Currently, Substrate and Smoldot (in Rust) are implementations in production, while [Gossamer (in Go)](https://github.com/ChainSafe/gossamer) and [Kagome (in C++)](https://github.com/soramitsu/kagome/) are in advanced stages of development. This RFP invites teams to create and maintain a comprehensive test-suite to check conformance of Host implementations against the official [Polkadot Protocol Specification](https://spec.polkadot.network/). + +The objectives are multifold. The test-suite can: +- be used to objectively evaluate the conformance of a Host Implementation against the Spec. +- help implementers in early stages and steer their development efforts. +- complement the specifications to clarify corner cases and intricacies of the Spec. In several scenarios, precise tests are highly valuable in clarifying the inevitable ambiguities in the Spec. + +Initially, the focus would be on unit tests with tests designed and generated at the right layer of abstraction to accommodate the existing implementations. The scope of the test-suite covers all the components/protocols described in the Specification but we would like to prioritise the following: + +- Mapping the consensus attack surface and producing fuzzing targets accordingly. Indicative, non-exhaustive list of potential targets can be seen below: + - Host API: + - sequences of storage and child-storage operations + - cryptography primitives, particularly those exposed in the Host API + - trie root + - BABE + - Block import + - block validation + - next/current validators aka VRF/block lottery + - secondary slot verification + - GRANDPA + - block import + - block validation + - justification import & validation/verification +- trie proof verification +- scale encoding and decoding, for specific message types, and randomly generated ones +- parachain candidate validation + +The goal of the initial grant should be to develop a PoC. The long-term goal should be to develop a comprehensive test suite that is funded by the on-chain treasury. + +**Useful resources:** +- [Polkadot Protocol Specification](https://spec.polkadot.network/) +- [GitHub polkadot-tests](https://github.com/w3f/polkadot-tests) +- [Chopsticks](https://github.com/AcalaNetwork/chopsticks) +- [Zombienet](https://github.com/paritytech/zombienet) +- [try-runtime](https://docs.substrate.io/reference/command-line-tools/try-runtime/) + +## Deliverables + +The structure of the grant and the milestones depends highly on the project itself and the goal of the initial PoC. It’s therefore up to the applying team to come up with a milestone and delivery structure. + + diff --git a/docs/rfps.md b/docs/rfps.md index b89c5d8dddd..e1d63e1c666 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -54,6 +54,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | | [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | | [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 🔴 | 22.03.2023 | +| [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 🟢 | 08.05.2023 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | | [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 🟡 | 23.05.2023 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | From 38c7a18f64af44612dbc3ae865641c537d5b5e68 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 9 May 2023 10:06:36 +0200 Subject: [PATCH 310/665] Update IDE_for_ink_Smart_Contracts.md (#1727) --- docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md index 40939bf77dc..623b882e162 100644 --- a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md +++ b/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md @@ -17,6 +17,13 @@ The goal of this RFP is to find teams that would like to maintain the browser-ba ## Deliverables -We recommend applying for a [maintenance grant](https://w3f.github.io/Grants-Program/docs/maintenance), which allows a more flexible structure and roadmap. The list of issues and features to be covered by the grant should be discussed with the previous maintainers and the community, but it is generally up to the applying team to come up with a milestone and delivery structure. +We recommend to initially apply for a [regular grant](https://github.com/w3f/Grants-Program#pencil-process) to fix the following issues and make the playground compatible with different versions of ink! as well as automatic updates: + +- https://github.com/paritytech/ink-playground/issues/427 +- https://github.com/paritytech/ink-playground/issues/197 +- https://github.com/paritytech/ink-playground/issues/460 +- https://github.com/paritytech/ink-playground/issues/428 + +After this we would sign a [maintenance grant](https://w3f.github.io/Grants-Program/docs/maintenance), which allows a more flexible structure and roadmap. The list of issues and features to be covered by the grant should be discussed with the previous maintainers and the community, but it is generally up to the applying team to come up with a milestone and delivery structure. From 38dc57f6cb9ff8540639a787523bdb05272985e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 9 May 2023 14:44:53 +0200 Subject: [PATCH 311/665] Update application_accepted.yml Update repo URL --- .github/workflows/application_accepted.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/application_accepted.yml b/.github/workflows/application_accepted.yml index 59d7622ae91..adb1b302abe 100644 --- a/.github/workflows/application_accepted.yml +++ b/.github/workflows/application_accepted.yml @@ -85,7 +85,7 @@ jobs: "", "", "Signed", - "https://github.com/w3f/Open-Grants-Program/pull/${{ github.event.pull_request.number }}", + "https://github.com/w3f/Grants-Program/pull/${{ github.event.pull_request.number }}", "${{ steps.date.outputs.date }}" ]], "worksheetTitle": "Legal", From 1fc33382e9b3303b2b0707ce7e6feaf89f1cd88e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 9 May 2023 15:29:39 +0200 Subject: [PATCH 312/665] Terminate DAO Entrance (#1728) --- applications/dao-entrance-phase-1.md | 37 +++++++++++++++++----------- applications/index.md | 2 +- 2 files changed, 24 insertions(+), 15 deletions(-) diff --git a/applications/dao-entrance-phase-1.md b/applications/dao-entrance-phase-1.md index 107c649370a..3067366c9ca 100644 --- a/applications/dao-entrance-phase-1.md +++ b/applications/dao-entrance-phase-1.md @@ -4,25 +4,28 @@ - **Payment Address:** 1PE3N5KmEdhE561i5jRTxeQidSuQGrGtLj912GFMw4vxXMG (aUSD) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 +* **Status:** [Terminated](https://github.com/w3f/Grant-Milestone-Delivery/pull/844#issuecomment-1539847990) + ## Project Overview :page_facing_up: ### Overview -In recent years, with the rapid development of information technology, people's work mode has gradually changed from centralized work to decentralized work. Besides, the spread and prevalence of COVID-19 in recent years get people know the importance of diverse work modes. With this trend, the concept web3 steps out from its previous version web2. -Currently, most Web3 companies are still working with tools within Web2, such as Telegram, Discord, Google Drive, Enterprise WeChat, DingTalk, Lark, and etc, Which user's information and initiative are limited. +In recent years, with the rapid development of information technology, people's work mode has gradually changed from centralized work to decentralized work. Besides, the spread and prevalence of COVID-19 in recent years get people know the importance of diverse work modes. With this trend, the concept web3 steps out from its previous version web2. + +Currently, most Web3 companies are still working with tools within Web2, such as Telegram, Discord, Google Drive, Enterprise WeChat, DingTalk, Lark, and etc, Which user's information and initiative are limited. -**DAO-entrance** is trying to create a safe, efficient, powerful and Web3-based instant collaboration tool, which is a breakthrough. It establishes solid trust relationship among organization members through open and transparent smart contract; it maintain end-to-end encrypted communication, to ensure efficient and confidentiallity; it improves work efficiency with thousands of open-source collaborative tool libraries; it keeps data in safe hands through distributed and decentralized storage. +**DAO-entrance** is trying to create a safe, efficient, powerful and Web3-based instant collaboration tool, which is a breakthrough. It establishes solid trust relationship among organization members through open and transparent smart contract; it maintain end-to-end encrypted communication, to ensure efficient and confidentiallity; it improves work efficiency with thousands of open-source collaborative tool libraries; it keeps data in safe hands through distributed and decentralized storage. -**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. +**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. ### Project Details -Our long-term goal is to provide a safe, private, efficient and automated DAO tool for enterprises, blockchains and web3 practitioners, in a multi-stage style in different period, and, in the meantime, to offer communication, consensus, production, settlement and other basic needs of members. +Our long-term goal is to provide a safe, private, efficient and automated DAO tool for enterprises, blockchains and web3 practitioners, in a multi-stage style in different period, and, in the meantime, to offer communication, consensus, production, settlement and other basic needs of members. -Currently, we provide not only "ink!"-based DAO smart contract templates, but also substrate-based pallet templates, which support instant integration of all substrate-based blockchains. By compatible with existing DAOs through a non-instrusive way, it allows enterprises and organization to create their own DAOs in a more convenient way. +Currently, we provide not only "ink!"-based DAO smart contract templates, but also substrate-based pallet templates, which support instant integration of all substrate-based blockchains. By compatible with existing DAOs through a non-instrusive way, it allows enterprises and organization to create their own DAOs in a more convenient way. -At this stage, **DAO-entrance** will provide a slack-like client which is based on the matrix protocol for instant messaging. Users can log in with a blockchain account. This tool is designed for modern devices and is compatible with devices equipped with Windows/mac/Linux/android/iOS, and provides organization members with a concise and convenient collaboration platform. +At this stage, **DAO-entrance** will provide a slack-like client which is based on the matrix protocol for instant messaging. Users can log in with a blockchain account. This tool is designed for modern devices and is compatible with devices equipped with Windows/mac/Linux/android/iOS, and provides organization members with a concise and convenient collaboration platform. ![img](https://github.com/dao-entrance/app/raw/main/docs/ui.png) @@ -36,9 +39,10 @@ Through DAPP rendering engine which is based on flutter, **DAO-entrance** is co **DAO-entrance** Client is a non-intrusive client that supports layer1 blockchain and layer2 smart contracts, and it's dedicated to adapting DAO scenarios. As an initial stage, we build the **DAO-entrance** chain based on the substrate, and manage the **DAO-entrance** chain by using DAO. After continuous improvement of the Client, we create **DAO-entrance** DAO, which is a fully autonomous and decentralized organization. Through our own requirements of **DAO-entrance** and continuous introduction of other work modes of DAO, we provide substrate pallet and "ink!" smart contracts with a fast DAO solution Polkadot Ecosystem. -According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in **DAO-entrance**. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. +According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in **DAO-entrance**. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. We provide DAO templates the substrate pallet and ink! Smart contracts: + 1. RoadMap management. 2. Manage DAO share. 3. Management of core team and guild. @@ -49,13 +53,14 @@ We provide DAO templates the substrate pallet and ink! Smart contracts: 8. Contribution value and medal management. 9. Level management. -**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. +**DAO-entrance** focuses on providing DAO with a comprehensive collaborative tool. The tool will help DAO to set up a core team. After the core team authorized by the community, they can make decisions on the daily affairs of DAO, in order to avoiding endless voting. -According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in DAO-entrance. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. +According to business needs, DAO organizations will set up skill groups, called "guilds", and each guild will automatically create public chat channels and Kanbans in DAO-entrance. Users can join a guild based on their own strengths or willings. Members can choose whether to participate in projects or events according to their own strengths and willingness. ![img](https://github.com/dao-entrance/app/raw/main/docs/structure.png) We provide DAO templates the substrate pallet and ink! Smart contracts: + 1. RoadMap management. 2. Manage DAO share. 3. Management of core team and guild. @@ -91,28 +96,32 @@ We will make substrate pallets and "ink!" Smart contracts open-sourced to provid ### Legal Structure -- **Registered Address:** Building 11, No. 6055, Jinhai way, Fengxian District, Shanghai, China +- **Registered Address:** Building 11, No. 6055, Jinhai way, Fengxian District, Shanghai, China - **Registered Legal Entity:** Diandaoweizhi Technology Co., Ltd. ### Team's experience Erica + - 4-years project management and investing experience in the blockchain industry. She is good at structuring and organizing the teams around the projects. - 5-years product Manager experience in Alibaba. Bai L + - 10-years full stack software development experience - Solid knowledge and experience with various programming language i.e. Go,Dart,Javascript,Rust - Blockchain & Substrate enthusiast Vicent + - 10-years Data-science Manerger experience. - 7-years DAO believers Wilson Lin + - 15 years management experience in big data industry includes 9 years as CEO of start up company. -- 12 years working experience in globe IT vendor like as Oracle, Sun microsystem, EMC, NCR, etc.. -- The believer of Block Chain, DAO and cryptocurrency +- 12 years working experience in globe IT vendor like as Oracle, Sun microsystem, EMC, NCR, etc.. +- The believer of Block Chain, DAO and cryptocurrency ### Team Code Repos @@ -147,7 +156,7 @@ Team github accounts | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 1. | Substrate module: **DAO-entrance** | we create a substrate pallet specifically designed for DAO, which includes the following functions: 1. RoadMap Target Management 2. DAO Share Management 3. Core Team, Association Management 4. Workflow Management (board/task) 5. Financial Management 6. Task reward management 7. Hot-plug voting management 8. Contribution Value, Medal Management 9. Hierarchical Management | -### Milestone 2 — Decentralized real-time communication base on matrix  +### Milestone 2 — Decentralized real-time communication base on matrix - **Estimated duration:** 1 month - **FTE:** 1 FTE diff --git a/applications/index.md b/applications/index.md index 704305d40aa..5fa4cbfcf6a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | -| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☐ | ☒ | ☐ | +| [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☒ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☐ | From 887d0c1d57ddf7c59e80771b34297f89c2f18884 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 9 May 2023 15:31:00 +0200 Subject: [PATCH 313/665] Update README.md Fix icons --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b8c682a7303..2ce4d02331e 100644 --- a/README.md +++ b/README.md @@ -259,7 +259,7 @@ It is **not** a chance to pitch your project, especially since only a small subs
-| | | | | | | +| | | | | | | | :-: | :-: | :-: | :-: | :-: | :-: | | [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | From fdf169d94365472533f419e337cc05f65cb564b3 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 9 May 2023 15:37:44 +0200 Subject: [PATCH 314/665] Remove reddit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2ce4d02331e..909cb59da8a 100644 --- a/README.md +++ b/README.md @@ -259,9 +259,9 @@ It is **not** a chance to pitch your project, especially since only a small subs
-| | | | | | | -| :-: | :-: | :-: | :-: | :-: | :-: | -| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +| | | | | | +| :-: | :-: | :-: | :-: | :-: | +| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) |
From 80f0b3a28193d5a4ddecd99de18afe153b050993 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 9 May 2023 15:39:39 +0200 Subject: [PATCH 315/665] remove reddit --- docs/help.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/help.md b/docs/help.md index fcd26c13545..8653fe7dc12 100644 --- a/docs/help.md +++ b/docs/help.md @@ -36,8 +36,8 @@ It is **not** a chance to pitch your project, especially since only a small subs
-| | | | | | | -| :-: | :-: | :-: | :-: | :-: | :-: | -| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [Web 3.0 Reddit](https://www.reddit.com/r/web3) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | +| | | | | | +| :-: | :-: | :-: | :-: | :-: | +| [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) |
From 12e32b29a3e053360f4922dc99067dba7a8d7e3b Mon Sep 17 00:00:00 2001 From: Ed Anderson <36516131+eca20@users.noreply.github.com> Date: Tue, 9 May 2023 11:16:13 -0400 Subject: [PATCH 316/665] add blockchainia.md (#1562) * Create blockchainia.md * revisions first round of updates/refinements * pr comments updated pr comments, payout entity * pr updates, change to payment address (TBD) * updated Matt Github URL * misc pr updates * large overhaul of application * updates to similar projects * moved section * added diagram image * architecture updates * Update blockchainia.md * update FTE estimate * added payment address --- applications/blockchainia.md | 151 +++++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 applications/blockchainia.md diff --git a/applications/blockchainia.md b/applications/blockchainia.md new file mode 100644 index 00000000000..2fb4338c8d6 --- /dev/null +++ b/applications/blockchainia.md @@ -0,0 +1,151 @@ +# Blockchainia + +- **Team Name:** Blockchainia +- **Payment Address:** 0xf246aede3d892234b52c9bb6f246ab0ac8c0491d (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview + +### Overview + + Blockchainia delivers the benefits of digital ownership straight to gamers fingertips. Our infrastructure will enable developers to create games for gamers that decide to take ownership of their digital achievements. The Blockchainia library of pallets enables affordable pay-to-play games that forever immortalize gamings greatest moments on-chain. As an eventual competitive gaming metaverse, Blockchaina's ecosystem includes a community hosted online multiplayer infrastructure including a game engine that will interact directly with our gamechain for user moderated online gaming. + +Our Milestone 1 open-source pallets will enable: +- a web based online multiplayer PvPvE first-person shooter (Player vs Player vs Environment (AI) Enemy) +- the engine that drives interactions between server and client +- a leader board that aggregates in-game earned on-chain statistics by week, month, and year. + - air dropped NFTs earned by completing in game tasks and leader board achievements + - environment enemies spawned from on-chain NFT assets that funnel spoils back to its owner's wallet + - a player prompt to create a wallet upon exit or completion + - community driven DAO that manages the online server infrastructure + +Future milestones will include updates to: +- an evolving and expanding list of features through our open-source substrate pallet library +- Two games that use our pallets to share in game items between them + - an evolving JRPG that explains our gamechains "lore" + - an evolving arcade style online multiplayer PvPvE + +While there are other gaming projects in the ecosystem, ours differs in various ways. First, we will break the stigma gamers associate with NFTs through a fun JRPG. Non-playable character "blocks" will explain their purpose as well as the metaverse they inhabit in their on-chain existence. However, not all is as it seems in the troubled world of Blockchainia. Players will make their way through seasonally released updates to uncover the deep lore, rescue these NPC blocks, and discover the fun that digital ownership brings to the future of gaming. The items and experience earned in this JRPG will be stored on-chain to the users wallet and available in our arcade PvPvE. We have acquired the URL Blockchainia.gg as the landing page for both of these games. + +Other similar projects in the ecosystem are Ajuna and Bajun. We plan to build off of Ajuna's Layer 1 solution, and expand on their layer 2 and 3 solutions with our own side chain. + + We differ in that we have the behavioral and marketing background to rapidly onboard users, as well as a product that can create a niche for itself in currently over-saturated market. Mark Zuckerberg tried and failed to create a metaverse with endless resources because he fails to realize the human utility of the technology of his time. We have the right team and the right vision to bring the metaverse to fruition, through a fair and economical value proposition that helped NBA Jam (Midway Games) earn 1 billion dollars to Jurassic Park's (Amblin Entertainment) 395 million in 1993, in quarters (.25USD). We believe we can minimize the cost to consumers by operating our sidechain at the lowest cost possible while allowing a DAO driven public server community to earn a reasonable fee for hosting the online multiplayer infrastructure of the games in our ecosystem. This fee will eventually approach a real market value which will add value to the various fungible tokens used throughout the ecosystem. + +We will create free-to-use Unity assets that compliment our tech stack to allow independent developers to duplicate our model and optionally distribute their games via our distribution architecture or use our reputation based, community moderated online-multiplayer infrastructure. + +## Project Details + +### Architecture Diagram +![Blockchainia Architecture](https://github.com/eca20/Blockchainia-Pitch/blob/main/blockchainiadiagram.jpg?raw=true?raw=true "Blockchainia Architecture") + +#### Technologies Used + +- Rust +- Substrate +- ink! Smart Contracts +- Node.js Front End +- C# +- Unity +- Adobe Creative Suite +- Blender + +### Ecosystem Fit + +Our target audience includes game developers and gamers. Our initial target will focus on indie gamers who would like to remove the overhead realized by releasing their games through traditional distribution channels. Using our infrastructure, developers can release their game free-to-try. Developers will release an NFT collection of playable characters at the same time which grants players full access to decentralized features that will change the way gamers think about the accomplishments and items they earn in game. + +To do this, we will create or modify many existing parts of the Polkadot ecosystem, including browser wallets, chain browsers, and our own parachain optimized for handling real-time game events as on-chain transactions. Our project will have a touch point on almost all levels of the Polkadot stack. + +In future updates, we plan to develop a decentralized means of distribution that allows game developers to release directly to consumers. Our DAO-driven community will engage with developers and provide valuable feedback on desired features, games, and the direction of Blockchainia as a whole. + + +## Team + +### Team members + +- Ed Anderson (eca20@pitt.edu) +- Will Chastka (wchastka@tepper.cmu.edu) +- Matt Dennis (oopmatt@gmail.com) + +### Contact + +- **Contact Name:** Ed Anderson +- **Contact Email:** eca20@pitt.edu +- **Website:** https://github.com/eca20 + +### Legal Structure + +- **Registered Address:** 502 W 7th St, Suite 100, Erie, PA 16502 +- **Registered Legal Entity:** Blockchainia LLC + +### Team's experience + +#### Ed Anderson +Ed has three years of software engineering experience developing and renovating the full stack of an enterprise scale system. He holds a B.S. in Computer Science from the University of Pittsburgh, where his Capstone requirement included implementing a MVP token concept, PittCoin, which relied on a bounty-program to connect students to community-sourced homework solutions, the tokens earned from which could be exchanged for extra credit from their professors. He also has five years of experience as the creator and manager of the Katz Business Research Center, during which he oversaw the implementation and successful completion of over one thousand market research and consumer behavior studies and focus groups. + +#### Matt Dennis +Matt is an entrepreneur with over 10 years of sales and operational experience in the Computer Security and Blockchain industry. He holds a B.S. in Computer Forensics and Information Security, and as certifications in multiple levels of the web3 tech stack. + +#### Will Chastka +Will has a passion for gaming, ever since his first gaming console, a sega Saturn, playing virtual fighter 2 and Shinobi Legends, to Starcraft and DOTA. His passion for crypto extends decentralized finance, gaming, and many other applications. He previously held position as Community and Marketing Manager for CryptoAquatics NFT project, and holds a Master's in Business administration from the University of Pittsburgh and a M.S. in Business Analytics from Carnegie Mellon University. + +We plan to leverage all of our experience and industry connections to build a heavily engaged community to gain market share through exploiting an emerging niche in the market with improved technology, our parachain. + +### Team Code Repos + +- https://github.com/eca20/Coursework/tree/main/PittCoin +- https://github.com/eca20/Coursework/tree/main/CS1699-Blockchain +- https://github.com/eca20/BlockchainiaJRPG +- https://github.com/eca20 +- https://github.com/oopmatt + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/edanderson4hire/ +- https://www.linkedin.com/in/wchastka/ + + +## Development Status +We have begun development on a server authoritative online multiplayer game engine that allows for a dedicated server to interact with a game client and perform the prediction and interpolation to reduce perceived latency enough to allow for a seamless game play experience. We will be adding these repositories below over the next few weeks. When the game is in its first "playable" state we will begin experimentation with Ajuna's service layer for our on chain interactions, building on top of their service layer to implement our custom pallets and interact with a custom game chain. + + +- https://github.com/eca20/BlockchainiaJRPG +- https://github.com/eca20/SubstratePlayGround +- https://github.com/eca20/Blockchainia-Pitch + + + Development Roadmap :nut_and_bolt: + + ### Overview + + - **Total Estimated Duration:** Continuous + - **Full-Time Equivalent (FTE):** 2 + - **Total Costs:** $25,000 + + ### Milestone 1 — Basic MVP + + - **Estimated duration:** 15 weeks development + - **FTE:** 1 FTE + - **Costs:** $25,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. This project also includes creating documentation to will allow our community to test and involve themselves in our multiplayer gaming infrastructure. We hope to receive and respond to feedback on this community documentation in Milestone 2.| +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. Unit tests will be written for relevant game server functionality. Unit tests will be written for the DeathToll pallet. In each guide (in each project's Github repo), we will describe how to run these tests. Manual integration testing will be through in-game functionality (i.e, Given an enemy is eliminated on server, the proper state functions are executed on chain, and the leader board updates through the in-game chain browser) | +| **0d.** | Docker | We will provide Dockerfiles that can be used to run and test all the functionality delivered with this milestone. This will include a deployable "Full Node" that encases both a game server and substrate node. These will interact with our game client and substrate parachain respectively. A successful MVP will allow a game client to register events on the game server (Server-Authoritative model), which is then written to the parachain ledger. Upon completion of the initial game "level", an "accolade" NFT will be deposited via ink! smart contract to the wallet that completed the required in-game tasks. | +| 1. | Substrate module: Game Engine Events | The Game Events Substrate module will contain functionality for asynchronously administering the the match between the game server and blockchain node. It is likely that we will break this into multiple pallets, one for core gaming functionality, and one specific to the needs of the DeathToll game-type. The initial pallet features include functionality to create, administer, and write the outcome of a match to the chain, updating the wallets of all players with their earned experience (which is key to the economy of Blockchainia). This module will work on top of Ajuna's service layer to aggregate and marshall game state information relevant to tracked leader board statistics and write to chain. These events will include in game events like player eliminations, deaths, attacks attempted/missed, wins, and other in-game achievements in our continuously expanding list of features. Eventually, this list of configurable features will allow a server owner to run game types similar to those seen in other first-person shooters, like death match, hostage rescue, and capture the flag. The configurable nature of our servers will allow our community to self-explore and find a region of our community that suits their personal play style and temperament. +| 2. | Unity Game Engine and Configurable Server/Client | We will embed our substrate based chain interactions into our game engine. While the game client and server communicate to drive game play, the game server will also publish certain events to the game chain via Ajuna's Service layer. Each of these processes will initially be deployable via docker container. The game server architecture will operate from a community driven DAO implemented with existing society and membership pallets available in the Substrate store. The value in the deliverable for the game/server lies in its online multiplayer architecture. We will use a server authoritative model embedded with our web3 backend via the substrate modules created in deliverable 1. We will layer these on top and alongside services provided by Ajuna to interact with our game chain. To start a match, the server must request that a "match" be created on chain via ink! smart contract after collecting a nominal fee from connected players. The server will also request the information necessary to spawn environment enemies in the game map from owned NFTs on chain at random. Lastly, players will spawn and game play will begin. In game events, such as when a player eliminates another player or environment enemy, will be written to chain. These streams of game commands which make up the packets sent by the client to the server are used to compensate for latency with methods like prediction and interpolation. Our engine will be similar to that used in Quake (id Software, Microsoft) and Half-Life (Valve, Sierra Studios), using various methods to compensate for latency and ensure a pleasant user experience, the key difference being that interactions leading to specific events will be logged to the chain. With this advancement in technology, Blockchainia will redefine how streamers and creators interact with their followers, and re-imagine how games can interact with a player. Gamings greatest moments will be immortalized on chain, allowing players the chance to engrave their accomplishments on web3's Stanley Cup, our eternal sliding time window leader board. Milestone 1 begins with a simple MVP to onboard users and test our engine before expanding on our functionality and appealing to a broader market. We will receive community feedback on how to fairly and equitably handle situations including server crashes and moderation of hacking and toxicity. This will lead to a code of conduct in deliverable 2 as we expand our features to include a map and item builder, as well as a strong in-game economy. We will also expand on a configurable set of features that affords future web3 game developers to configure our engine for their own games and expand on its features. +| 3. | Unity Assets | Besides the NFT playable characters released in our games collections, all assets created by our team will be released free to use by other developers who would like to use our ecosystem to create their own games and mods. These will include wall and floor textures, doors, environment enemies, and other sprites used throughout our games. + +## Future Plans +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 1. | Oculus VR Port | We plan to port our PvPvE and JRPG to Oculus VR. This will be used to expand into a metaverse of gamers, lead by a community of streamers and industry leaders who moderate their servers and influence the direction of our development team through their position in our community DAO. +| 2. | Front End Expansion| Our initial browser will be embedded into the game client itself. We plan to expand this to an iOS and Android apps for viewing leader boards, displaying accomplishments, and trading collectibles. +| 3. | Community Expansion| Users who are invited to the DAO will be encouraged to run their own reputable server/node to grow their community and earn money from the pay-to-play architecture. Owners will create a hierarchy of moderators called "admins" that will ensure fair, fun, and competitive game play throughout our ecosystem. Owners/Servers who do not fulfill their commitments to the greater community will have their influence slashed. +| 4. | Automate integration testing | Automated integration tests for all game server/blockchain interactions. +| 5. | Substrate module: DeathToll Game Events Expansion| We will add new features to the DeathToll Game Events Substrate module in seasonal updates. The features added will be driven in part by the community that plays the game, in the form of the DAO created during Milestone + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / LinkedIn \ No newline at end of file From 9e2f0bcaf73dcf3d3a53a1227be78e9e650bf58a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 9 May 2023 17:24:43 +0200 Subject: [PATCH 317/665] Update index.md Add Blockchainia --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 5fa4cbfcf6a..9bef87ae441 100644 --- a/applications/index.md +++ b/applications/index.md @@ -53,6 +53,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | +| [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | [🔝](#menu) From 0a31dc71df1d9f0c1dbaeb3b7c5927de06684a02 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 10 May 2023 14:59:42 -0400 Subject: [PATCH 318/665] Update index.md (#1732) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9bef87ae441..403711f9cb6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,7 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | -| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☐ | +| [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | From b5312dd0b76552234ff397d21b92d4b7f9782f91 Mon Sep 17 00:00:00 2001 From: valeriacaracciolo <71491710+valeriacaracciolo@users.noreply.github.com> Date: Wed, 10 May 2023 16:04:18 -0300 Subject: [PATCH 319/665] ScoutCoinFabrik: Milestone 2 (#1666) * Added ScoutCoinFabrik_2.md * Updated Milestone Number and Descriptions * Updated payment token --- applications/ScoutCoinFabrik_2.md | 116 ++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 applications/ScoutCoinFabrik_2.md diff --git a/applications/ScoutCoinFabrik_2.md b/applications/ScoutCoinFabrik_2.md new file mode 100644 index 00000000000..507e6a558c3 --- /dev/null +++ b/applications/ScoutCoinFabrik_2.md @@ -0,0 +1,116 @@ +# Scout CoinFabrik +- **Team Name:** CoinFabrik (Nektra S.A) +- **Payment Address:** 0xf488039EDe6B38D7689fDCC6A9FC2dd0EF39D54e (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +Scout: Security Analysis Tool + +We are building an extensible open-source tool (or set of tools) to assist ink! smart contract developers detect common security issues and deviations from best practices. To improve coverage and precision, we will persist in research efforts on static and dynamic analysis techniques. + +This tool will help developers write secure and more robust smart contracts. + +Our interest in this project comes from our experience in manual auditing and our usage of comparable tools in other blockchains. + + +### Project Details + +We have already conducted research work with the University of Buenos Aires to better comprehend the current status of analysis tools built for Rust, while foreseeing different lines of development. + +We are currently working on tools to assist developers to apply best practices and to identify possible vulnerabilities. + +### Ecosystem Fit + +We believe we can bring value to the Polkadot / Kusama community by offering a tool to detect security bugs from a development perspective. By including this tool in their toolchain, ink! developers will be assisted to remove bugs in their code, raising the quality and security of their smart contracts. + +## Team :busts_in_silhouette: + +### Team members + +- Ariel Wassbein, Head of Reaseach +- Valeria Caracciolo, Business Develpoment +- CoinFabrik's development and auditing team - when required. + +### Contact + +- **Contact Name:** Valeria Caracciolo +- **Contact Email:** valeria.caracciolo@coinfabrik.com +- **Website:** https://www.coinfabrik.com/ + +### Legal Structure + +- **Registered Address:** Dr. Emilio Ravignani 2394, C1425 CABA, Argentina +- **Registered Legal Entity:** Nektra S.A. + +### Team's experience +We are a research and development company specialized in Web3, with a strong background in cybersecurity. Founded in 2014, we have worked on over 180 blockchain-related projects, EVM based and also for Solana, Algorand, and Polkadot. Beyond development, we offer security audits through a dedicated in-house team of senior cybersecurity professionals, currently working on code in Substrate, Solidity, Clarity, Rust, and TEAL. + +Our team has an academic background in computer science and mathematics, with work experience focused on cybersecurity and software development, including academic publications, patents turned into products, and conference presentations. Furthermore, we have an ongoing collaboration on knowledge transfer and open-source projects with the University of Buenos Aires. + +### Team Code Repos + +- https://github.com/CoinFabrik/web3-grant +- https://gitlab.com/coinfabrik-private/data/frecuencia-de-vulnerabilidades +- https://drive.google.com/drive/u/1/folders/1HoaL6EXX1Wky7e1SHYBY6oIZDGK2sgDD + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/arielwaissbein/ +- https://www.linkedin.com/in/valeriacaracciolo/ + + +## Development Status :open_book: + +We have been working on different aspects of the tool: +- Research on security analysis tools for Rust-based blockchains, applicable to ink! Smart contracts +- Listing common vulnerabilities, best practices, and enhancements related to smart contracts written in ink! +- Producing code examples and snippets of smart contracts showing the mentioned issues. +- Built a PoC (proof of concept) of a tool that identifies relevant security issues. + +We briefly validated the idea of the development described in this application with David Hawig and Bhargav Bhatt from Web3 Foundation, who encourage us to apply for this grant. + +We have finished the first milestone of this project ([Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept)), accomplishing all the deliverables listed in the milestone table. + +Please note, however, that this milestone is the second grant associated with the same project: [ScoutCoinFabrik](https://github.com/CoinFabrik/web3-grant). The first grant focused on the tool’s PoC, and in this second grant we aim to develop a prototype. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 5 weeks +- **Full-Time Equivalent (FTE):** 5 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1: Prototype + +- **Estimated duration:** 5 weeks +- **FTE:** 5 +- **Costs:** 30,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | Documentation hosted on a separate webpage. | +| 0c. | Testing | Integration testing. Specific tests for every linting detector based on code examples and snippets of smart contracts. | +| 0d. | Docker | Does not apply at this stage. | +| 0e. | Article | We will upload a report summary to our blog. | + **1.a** | Research and Development | Vulnerability examples. In addition to the [examples developed in Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), we will develop more code examples and snippets of vulnerabilities, best practices, and enhancements related to smart contracts written in ink!. | + **1.b** | Research and Development | Further example versions of [vulnerabilities developed in Milestone 1 of ScoutCoinFabrik PoC](https://github.com/CoinFabrik/web3-grant/tree/main/vulnerabilities). This step is geared to provide a wider set of examples, therefore improving our ability to measure the precision of our prototype and any other ink! vulnerability detection tool. | + **2.a** | Development | Building a prototype that improves over the [development of Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), detecting more classes of vulnerabilities and improving in precision on existing detectors. We are to build a prototype that can analyze Rust code to detect vulnerabilities in ink! smart contracts and possibly in pallets and other pieces of code. This builds over [this proof-of-concept tool](https://github.com/CoinFabrik/web3-grant) we've built and [delivered as part of a grant for the web3 foundation](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ScoutCoinFabrik-1.md) by:
a) Moving from a proof-of-concept (PoC) tool to a robust tool that integrates with a popular IDE (VSCode), includes a CLI, etc,
b) We will improve on the precision of the detectors we included in the PoC reducing the rate of false positives, and
c) We will add more detectors in order to have a reasonable coverage of the relevant security vulnerabilities that happen in smart contracts. | + **2.b** | Development | Command line interface for the prototype. For this prototype, we want to develop a simple command line interface like the one used in other static analyzers from other blockchains (eg: [Slither](https://github.com/crytic/slither), [Rustle](https://github.com/blocksecteam/rustle)).
In particular, we will develop the possibility to run the prototype on smart contract files or directories.
The base command will be: `cargo scout file_name.rs`
We will also include options for running subsets of detectors and triggering errors for CI/CD workflows. | + **2.c** | Development | VSCode integration for the prototype. Our VSCode development will list security issues, highlight issues with squiggles and hover-over descriptions. We will seek compatibility of this development with other relevant ink! extensions such as [Ink! Analyzer](https://w3f.github.io/Grants-Program/applications/ink-analyzer#future-plans). | + **3** | Evaluation | Prototype validation against a selection of projects deployed on testnet or mainnet in order to evaluate detector precision. Evaluation report and detector improvement. | + + +## Future Plans + +(Our original plan was to apply for a 3 milestones grant, to reach a public release of the tool. But we were advised to apply for a shorter objective) After completing the PoC in our first milestone (Milestone #1), we are now applying for this second milestone to reach a tool prototype (Milestone #2). We envison a third milestone together with a public release (Milestone #3). Our mission is to continue to work on improving automated and assisted tools for finding security vulnerabilities and writing more secure code. Our objective is to help the Polkadot / Kusama community produce better and more secure code with these tools. + +## Referral Program (optional) :moneybag: + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Richard Casey from Parity brought this program to our attention. Our inquiries were addressed by David Hawig and Bhargav Bhatt, who also gently advised us on this presentation. From 429dab2d67972827c94fd4c928f3bcc14c841f1f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 10 May 2023 21:07:34 +0200 Subject: [PATCH 320/665] Update index.md ScoutCoinFabrik: Milestone 2 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 403711f9cb6..516a90a3c3e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -54,6 +54,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | [🔝](#menu) From 803c3909c0fcadb23d08120f4b95909e11c41d14 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 10 May 2023 21:16:09 +0200 Subject: [PATCH 321/665] Fix website --- applications/ScoutCoinFabrik_2.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/ScoutCoinFabrik_2.md b/applications/ScoutCoinFabrik_2.md index 507e6a558c3..f627032e0a1 100644 --- a/applications/ScoutCoinFabrik_2.md +++ b/applications/ScoutCoinFabrik_2.md @@ -99,8 +99,8 @@ Please note, however, that this milestone is the second grant associated with th | 0e. | Article | We will upload a report summary to our blog. | **1.a** | Research and Development | Vulnerability examples. In addition to the [examples developed in Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), we will develop more code examples and snippets of vulnerabilities, best practices, and enhancements related to smart contracts written in ink!. | **1.b** | Research and Development | Further example versions of [vulnerabilities developed in Milestone 1 of ScoutCoinFabrik PoC](https://github.com/CoinFabrik/web3-grant/tree/main/vulnerabilities). This step is geared to provide a wider set of examples, therefore improving our ability to measure the precision of our prototype and any other ink! vulnerability detection tool. | - **2.a** | Development | Building a prototype that improves over the [development of Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), detecting more classes of vulnerabilities and improving in precision on existing detectors. We are to build a prototype that can analyze Rust code to detect vulnerabilities in ink! smart contracts and possibly in pallets and other pieces of code. This builds over [this proof-of-concept tool](https://github.com/CoinFabrik/web3-grant) we've built and [delivered as part of a grant for the web3 foundation](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ScoutCoinFabrik-1.md) by:
a) Moving from a proof-of-concept (PoC) tool to a robust tool that integrates with a popular IDE (VSCode), includes a CLI, etc,
b) We will improve on the precision of the detectors we included in the PoC reducing the rate of false positives, and
c) We will add more detectors in order to have a reasonable coverage of the relevant security vulnerabilities that happen in smart contracts. | - **2.b** | Development | Command line interface for the prototype. For this prototype, we want to develop a simple command line interface like the one used in other static analyzers from other blockchains (eg: [Slither](https://github.com/crytic/slither), [Rustle](https://github.com/blocksecteam/rustle)).
In particular, we will develop the possibility to run the prototype on smart contract files or directories.
The base command will be: `cargo scout file_name.rs`
We will also include options for running subsets of detectors and triggering errors for CI/CD workflows. | + **2.a** | Development | Building a prototype that improves over the [development of Milestone 1 of ScoutCoinFabrik PoC](https://github.com/w3f/Grants-Program/blob/master/applications/ScoutCoinFabrik.md#milestone-1-proof-of-concept), detecting more classes of vulnerabilities and improving in precision on existing detectors. We are to build a prototype that can analyze Rust code to detect vulnerabilities in ink! smart contracts and possibly in pallets and other pieces of code. This builds over [this proof-of-concept tool](https://github.com/CoinFabrik/web3-grant) we've built and [delivered as part of a grant for the web3 foundation](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ScoutCoinFabrik-1.md) by:
a) Moving from a proof-of-concept (PoC) tool to a robust tool that integrates with a popular IDE (VSCode), includes a CLI, etc,
b) We will improve on the precision of the detectors we included in the PoC reducing the rate of false positives, and
c) We will add more detectors in order to have a reasonable coverage of the relevant security vulnerabilities that happen in smart contracts. | + **2.b** | Development | Command line interface for the prototype. For this prototype, we want to develop a simple command line interface like the one used in other static analyzers from other blockchains (eg: [Slither](https://github.com/crytic/slither), [Rustle](https://github.com/blocksecteam/rustle)).
In particular, we will develop the possibility to run the prototype on smart contract files or directories.
The base command will be: `cargo scout file_name.rs`
We will also include options for running subsets of detectors and triggering errors for CI/CD workflows. | **2.c** | Development | VSCode integration for the prototype. Our VSCode development will list security issues, highlight issues with squiggles and hover-over descriptions. We will seek compatibility of this development with other relevant ink! extensions such as [Ink! Analyzer](https://w3f.github.io/Grants-Program/applications/ink-analyzer#future-plans). | **3** | Evaluation | Prototype validation against a selection of projects deployed on testnet or mainnet in order to evaluate detector precision. Evaluation report and detector improvement. | From a3dc35e5083afd057783d8aaf28a9b104f9094b9 Mon Sep 17 00:00:00 2001 From: philpotisk <55081379+philpotisk@users.noreply.github.com> Date: Thu, 11 May 2023 11:05:11 +0200 Subject: [PATCH 322/665] Changed to FIAT payment option (#1730) --- applications/walt-id_nft-infra.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/walt-id_nft-infra.md b/applications/walt-id_nft-infra.md index 3e95e189958..3e41fb2688c 100644 --- a/applications/walt-id_nft-infra.md +++ b/applications/walt-id_nft-infra.md @@ -6,7 +6,7 @@ Any implementation that is EVM compatible (e.g. Moonriver or RMRK with EVM bridg - **Project Name:** NFT infrastructure | by walt.id - **Team Name:** walt.id -- **Payment Address:** 0xa4c6c2013810661a6750443aEF86cFeAc983e07f (USDC) +- **Payment Address:** Fiat (Mail: May 10, 2023, 8:55 AM) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From cba23df73ab5f7e2bdaa67723b672b3f3c9bab75 Mon Sep 17 00:00:00 2001 From: Doordashcon Date: Thu, 11 May 2023 14:26:16 +0100 Subject: [PATCH 323/665] Interoperable State Machine Protocol (#1645) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * initial * add publications * adds image and deliverables * add request image * update deliverables * adds milestones * formatting * more formatting * milestone completion & fix typos * overview & furture plans * treasury * cumulus requirement already met (#3) * add use-case section * update TED * Update applications/ismp.md Co-authored-by: Sebastian Müller --------- Co-authored-by: Seun Lanlege Co-authored-by: Sebastian Müller --- applications/ismp.md | 184 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 applications/ismp.md diff --git a/applications/ismp.md b/applications/ismp.md new file mode 100644 index 00000000000..dc8cf22520f --- /dev/null +++ b/applications/ismp.md @@ -0,0 +1,184 @@ +# Interoperable State Machine Protocol + +- **Team Name:** Polytope Labs +- **Payment Address:** 0x486cbad2d704bc76f8d0cdda6aa93c94d53297b9 (Ethereum DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview +The Interoperable State Machine Protocol, or ISMP for short, is the product of our [research](https://research.polytope.technology/state-(machine)-proofs) into state proofs. We show that state-proof based interoperability is possible and more efficient as the messages no longer need to be routed through the relay chain and can be exchanged independent of it, while still maintaining the same level of trustlessness and security. This protocol allows not just for messaging but also [state reads of other parachains](https://github.com/paritytech/polkadot/issues/5087) in a trustless and secure manner. + +Unfortunately, Parachain-to-Parachain communication today relies on the relay chain for message routing. This is highly inefficient and relieving the relay chain of this burden will allow for better Parachain throughput and scalability. We believe ISMP is the end-game for parachain interoperability, with the relevant ISMP modules, each parachain can send and receive messages and assets to and from other parachains which also have the ISMP modules. Seconded by Rob Habermeier on [twitter](https://twitter.com/rphmeier/status/1631448117634650114). + +## Project Details + +ISMP is a simple protocol for state machines to send requests that can be handled by a counterparty chain. Akin to the HTTP paradigm in web2, parachains can issue GET-like requests for storage reads as well as POST-like requests for sending data. + +Requests are stored in a [merkle mountain range tree](https://research.polytope.technology/merkle-mountain-range-multi-proofs) on the sending chain as this data structure provides some benefits, binary merkle trees have more compact proof sizes than patricia merkle tries, and in particular, merkle mountain range trees have much smaller proof sizes for recently inserted items in the tree. We believe this choice will enable higher bandwidth parachain <> parachain messaging with smaller proof sizes. + +ISMP will also support request timeouts, allowing for more safer parachain <> parachain messaging. + +![Architecture](https://drive.google.com/uc?id=1t8Qow88En3-ZCW7P0LYjRnbSqzFS30be) + +### Use cases + +For instance a user wanting to transfer their funds from parachain A to parachain B will initiate a post request on parachain A. This post request is stored in an mmr maintained in the state trie on parachain A. Parachain A's headers also contain the root for this mmr structure. + +The user('s wallet) after observing that parachain A's headers have been finalized and made it's way into the relay chain state trie, can present a merkle proof of parachain A's header in the relay chain state trie which parachain B can verify using it's access to the latest relay chain state root. Next they present the mmr proof for the request which they had previously initiated on parachain A. After verifying this mmr proof, parachain B can "execute" the request. In this case minting the equivalent asset that was burnt on parachain A. + +There are of course other use cases that can be built on POST requests, but this is the simplest case. + +For GET requests, a different mechanism is at play. Perhaps a user wants to settle a bet they had made in a prediction market in parachain A. The data that is needed to settle this bet is on parachain B where we regard parachain B as the oracle parachain. The user initiates a GET request, with it's content the keys of the storage items they need to settle their bet. After initiating the request, the request is stored in the parachain A's mmr trie, but it is never relayed anywhere. Instead, the user('s wallet) then reads the state trie of parachain B and provides the state proof for the appropriate data that was requested. + + +### **`pallet-ismp`** +This serves as the foundational element for state-proof based messaging between parachains, enabling state reads of the relay chain directly from any given parachain, granting the ability to verify incoming messages and data from other parachains under the shared security umbrella of the relay chain. + +**Custom crates** + +- `ismp-rs` - A set of primitives necessary for pallet-ismp + - `ISMPHost`: Represents a state machine's core functionality + - `ISMPRouter`: Embodies the request and response routing logic for parachain interactions + - `ConsensusClient`: Logic for consensus proof verification + +This module can also serve as an alternative transport layer for XCM programs. + +### Ecosystem Fit + +Currently messages are sent over the Relay Chain through opening HRMP channels but through ISMP we can increase the bandwidth of messaging between parachains without burdening the relay chain with these messages. This allows the relay chain to focus on its main task: enforcing the validity of parachain state transitions. + +## Team :busts_in_silhouette: + +### Team members + +- Leads: Seun Lanlege, David Salami +- Members: Damilare Akinlose, Femi Bankole, Jesse Chejieh + +### Contact + +- **Contact Name:** Jesse Chejieh +- **Contact Email:** jesse@polytope.technology +- **Website:** [research.polytope.technology](https://research.polytope.technology/) + +### Legal Structure +- **Registered Address:** Harneys Fiduciary (Cayman) Limited, 4th Floor, Harbour Place, 103 South Church Street, Cayman Islands +- **Registered Legal Entity:** Polytope Labs Ltd. + +### Team's experience + +Polytope Labs is a collective of core blockchain engineers, researchers & scientists from varying blockchain protocol backgrounds passionate about the proliferation of networks over platforms and enabling this future through blockchain research, education, tooling and core infrastructure development. + +1. Seun Lanlege - Founder, Mad Scientist at Polytope Labs and [Polkadot Fellowship Member](https://github.com/polkadot-fellows/seeding/pull/33). Previously core developer at Parity Tech, Worked on Ethereum and Polkadot with over 4 years of industry experience. + +2. David Salami - Scientist at Polytope Labs and [Polkadot Fellowship Member](https://github.com/polkadot-fellows/seeding/pull/38). Previously Senior Blockchain Engineer at [Composable Finance](https://github.com/ComposableFi/) and [Webb](https://github.com/webb-tools). + +3. Damilare Akinlose - Lab Intern at Polytope Labs and [Polkadot Fellowship Member](https://github.com/polkadot-fellows/seeding/pull/41). Previously Blockchain Engineer at [Webb](https://github.com/webb-tools) + +4. Femi Bankole - Blockchain engineer at [Matchx_iot](https://matchx.io/) + [MXC Foundation](https://www.mxc.org/) and Lab Intern at Polytope Labs. + +5. Jesse Chejieh - [Polkadot Fellowship Member](https://github.com/polkadot-fellows/seeding/pull/25). + +### Research Publications + + - [Consensus Proofs](https://research.polytope.technology/consensus-proofs) + - [State (Machine) Proofs](https://research.polytope.technology/state-(machine)-proofs) + - [Merkle Mountain Range Proofs](https://research.polytope.technology/merkle-mountain-range-multi-proofs) + - [Merkle Multi Proofs](https://research.polytope.technology/merkle-multi-proofs) + +### Team Code Repos +- [sync-committee-rs](https://github.com/polytope-labs/sync-committee-rs) +- [Merkle Patricia Trie](https://github.com/polytope-labs/patricia-merkle-trie) +- [Solidity Merkle Trees](https://github.com/polytope-labs/solidity-merkle-trees) +- [Simnode](https://github.com/polytope-labs/sc-simnode) + + +### Team GitHub Profiles + +- [Seun Lanlege](https://github.com/seunlanlege/) +- [David Salami](https://github.com/Wizdave97/) +- [Damilare Akinlose](https://github.com/dharjeezy/) +- [Femi Bankole](https://github.com/iTranscend/) +- [Jesse Chejieh](https://github.com/Doordashcon/) + +### Team LinkedIn Profiles + +- [Seun Lanlege](https://www.linkedin.com/in/seunlanlege/) +- [David Salami](https://www.linkedin.com/in/david-salami-188aa8170) +- [Damilare Akinlose](https://www.linkedin.com/in/damilare-akinlose-6289b5b8) +- [Femi Bankole](https://www.linkedin.com/in/femibankole) +- [Jesse Chejieh](https://www.linkedin.com/in/jesse-chejieh-47020322a) + + +## Development Status :open_book: +State-proof based parachain messaging has been discussed on the [Polkadot Forum](https://forum.polkadot.network/t/state-proof-based-parachain-parachain-messaging/2214/4). + +And some Updates to cumulus, required for parachains to read the relay chain state has been [approved](https://github.com/paritytech/cumulus/pull/2268) + +## Development Roadmap :nut_and_bolt: + +### Overview +- **Total Estimated Duration:** 4.5 Months +- **Full-Time Equivalent (FTE):** 3 +- **Total Costs:** 75,000 USD + +### Milestone 1 — `ismp-rs` + +- **Estimated duration:** 1.5 months +- **FTE:** 3 +- **Costs:** 30,000 USD + +In this milestone we develop the core primitives needed for pallet-ismp + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a README stating objectives of this ISMP primitive on the project repository. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test functionalities delivered with this milestone. | +| 0e. | Article | We will publish an article that explains what was achieved as part of the grant. | +| 0f. | ISMP Specification | We will put together a technical specification detailing the ISMP protocol. | +| **1.** | `ismp-rs`| Rust implementation of ISMP primitives for handling incoming messages to and from connected parachains. | +| 1a. | `ISMPHost` | State machine host functionality required to support ISMP. | +| 1b. | `ISMPRouter` | Sub-component for routing incoming requests & response to the destination ISMP modules. | +| 1c. | `ISMPModule` | Interface modules/pallets must conform to in order to receive incoming ISMP requests/responses. | +| 1d. | `ConsensusClient` | Logic for consensus proof verification, In the case of parachains, we will leverage the relay chain as a `ConsensusClient` through the new host functions in cumulus. | +| | Request/Response proof verification | Sub-component for verifying membership of proofs of a request/response in a merkle mountain range tree. | +| | Request Timeout verification | Verifying non-membership of a request in the state trie of a parachain. | +| 1e. | Handlers | Logic for handling varying types of incoming messages. | +| | `CreateConsensusClient` | Functionality for creating a consensus client on the receiving state machine. | +| | `ConsensusMessage` | Functionality for handling consensus update messages from other state machines. | +| | `RequestMessage` | Functionality for handling request messages from other state machines. | +| | `ResponseMessage` | Functionality for handling response messages from other state machines. | +| | `TimeoutMessage` | Functionality for handling request timeout messages from other state machines. | + +### Milestone 2 — `pallet-ismp` + +- **Estimated duration:** 3 months +- **FTE:** 3 +- **Costs:** 45,000 USD + +In this milestone we develop pallet-ismp + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a README stating objectives of this ISMP primitive on the project repository. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test functionalities delivered with this milestone. | +| **1.** | pallet-ismp | Building the substrate pallet with above stated dependencies. | +| **1b.** | Host | `ISMPHost` implementation for the pallet. | +| **1c.** | Router | `ISMPRouter` implementation for the pallet. | +| **1c.** | `ParachainConsensusClient` | `ConsensusClient` implementation for the pallet-ismp, utilizing the relay chain as consensus client for parachains. | +| **1d.** | RPC | This sub-crate will allow for users to query relevant ISMP data over RPC. | +| **1e.** | Runtime-APIs | This sub-crate will expose relevant ISMP data from the runtime through runtime APIS. | +| **1f.** | Benchmarks | We will benchmark pallet-ismp, providing a benchmark crate for parachain teams to run so as to generate the proper weights for their runtime. | + + +## Future Plans +We recognize the significant benefits that pallet-ismp offers to the ecosystem, and therefore, after the grant completion we plan to continue providing maintenance with support from the Polkadot/Kusama treasury. + +## Additional Information :heavy_plus_sign: + +[Solidity Trie Verifier](https://github.com/w3f/Grant-Milestone-Delivery/pull/774) From 4b6b60ad35c77dc6f07b7809097164384269fc35 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 11 May 2023 15:28:45 +0200 Subject: [PATCH 324/665] Update index.md Add Interoperable State Machine Protocol --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 516a90a3c3e..516874082b3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -55,6 +55,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | [🔝](#menu) From 1874bec40a6a52a5d038ca4bb2ebc2b401dba6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 16:04:43 +0200 Subject: [PATCH 325/665] Fix website --- applications/ismp.md | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) diff --git a/applications/ismp.md b/applications/ismp.md index dc8cf22520f..89d61a5801b 100644 --- a/applications/ismp.md +++ b/applications/ismp.md @@ -7,6 +7,7 @@ ## Project Overview :page_facing_up: ### Overview + The Interoperable State Machine Protocol, or ISMP for short, is the product of our [research](https://research.polytope.technology/state-(machine)-proofs) into state proofs. We show that state-proof based interoperability is possible and more efficient as the messages no longer need to be routed through the relay chain and can be exchanged independent of it, while still maintaining the same level of trustlessness and security. This protocol allows not just for messaging but also [state reads of other parachains](https://github.com/paritytech/polkadot/issues/5087) in a trustless and secure manner. Unfortunately, Parachain-to-Parachain communication today relies on the relay chain for message routing. This is highly inefficient and relieving the relay chain of this burden will allow for better Parachain throughput and scalability. We believe ISMP is the end-game for parachain interoperability, with the relevant ISMP modules, each parachain can send and receive messages and assets to and from other parachains which also have the ISMP modules. Seconded by Rob Habermeier on [twitter](https://twitter.com/rphmeier/status/1631448117634650114). @@ -15,9 +16,9 @@ Unfortunately, Parachain-to-Parachain communication today relies on the relay ch ISMP is a simple protocol for state machines to send requests that can be handled by a counterparty chain. Akin to the HTTP paradigm in web2, parachains can issue GET-like requests for storage reads as well as POST-like requests for sending data. -Requests are stored in a [merkle mountain range tree](https://research.polytope.technology/merkle-mountain-range-multi-proofs) on the sending chain as this data structure provides some benefits, binary merkle trees have more compact proof sizes than patricia merkle tries, and in particular, merkle mountain range trees have much smaller proof sizes for recently inserted items in the tree. We believe this choice will enable higher bandwidth parachain <> parachain messaging with smaller proof sizes. +Requests are stored in a [merkle mountain range tree](https://research.polytope.technology/merkle-mountain-range-multi-proofs) on the sending chain as this data structure provides some benefits, binary merkle trees have more compact proof sizes than patricia merkle tries, and in particular, merkle mountain range trees have much smaller proof sizes for recently inserted items in the tree. We believe this choice will enable higher bandwidth parachain <> parachain messaging with smaller proof sizes. -ISMP will also support request timeouts, allowing for more safer parachain <> parachain messaging. +ISMP will also support request timeouts, allowing for more safer parachain <> parachain messaging. ![Architecture](https://drive.google.com/uc?id=1t8Qow88En3-ZCW7P0LYjRnbSqzFS30be) @@ -33,15 +34,16 @@ For GET requests, a different mechanism is at play. Perhaps a user wants to sett ### **`pallet-ismp`** + This serves as the foundational element for state-proof based messaging between parachains, enabling state reads of the relay chain directly from any given parachain, granting the ability to verify incoming messages and data from other parachains under the shared security umbrella of the relay chain. **Custom crates** -- `ismp-rs` - A set of primitives necessary for pallet-ismp - - `ISMPHost`: Represents a state machine's core functionality - - `ISMPRouter`: Embodies the request and response routing logic for parachain interactions - - `ConsensusClient`: Logic for consensus proof verification - +- `ismp-rs` - A set of primitives necessary for pallet-ismp + - `ISMPHost`: Represents a state machine's core functionality + - `ISMPRouter`: Embodies the request and response routing logic for parachain interactions + - `ConsensusClient`: Logic for consensus proof verification + This module can also serve as an alternative transport layer for XCM programs. ### Ecosystem Fit @@ -62,6 +64,7 @@ Currently messages are sent over the Relay Chain through opening HRMP channels b - **Website:** [research.polytope.technology](https://research.polytope.technology/) ### Legal Structure + - **Registered Address:** Harneys Fiduciary (Cayman) Limited, 4th Floor, Harbour Place, 103 South Church Street, Cayman Islands - **Registered Legal Entity:** Polytope Labs Ltd. @@ -81,12 +84,13 @@ Polytope Labs is a collective of core blockchain engineers, researchers & scient ### Research Publications - - [Consensus Proofs](https://research.polytope.technology/consensus-proofs) - - [State (Machine) Proofs](https://research.polytope.technology/state-(machine)-proofs) - - [Merkle Mountain Range Proofs](https://research.polytope.technology/merkle-mountain-range-multi-proofs) - - [Merkle Multi Proofs](https://research.polytope.technology/merkle-multi-proofs) +- [Consensus Proofs](https://research.polytope.technology/consensus-proofs) +- [State (Machine) Proofs](https://research.polytope.technology/state-(machine)-proofs) +- [Merkle Mountain Range Proofs](https://research.polytope.technology/merkle-mountain-range-multi-proofs) +- [Merkle Multi Proofs](https://research.polytope.technology/merkle-multi-proofs) ### Team Code Repos + - [sync-committee-rs](https://github.com/polytope-labs/sync-committee-rs) - [Merkle Patricia Trie](https://github.com/polytope-labs/patricia-merkle-trie) - [Solidity Merkle Trees](https://github.com/polytope-labs/solidity-merkle-trees) @@ -111,6 +115,7 @@ Polytope Labs is a collective of core blockchain engineers, researchers & scient ## Development Status :open_book: + State-proof based parachain messaging has been discussed on the [Polkadot Forum](https://forum.polkadot.network/t/state-proof-based-parachain-parachain-messaging/2214/4). And some Updates to cumulus, required for parachains to read the relay chain state has been [approved](https://github.com/paritytech/cumulus/pull/2268) @@ -118,6 +123,7 @@ And some Updates to cumulus, required for parachains to read the relay chain sta ## Development Roadmap :nut_and_bolt: ### Overview + - **Total Estimated Duration:** 4.5 Months - **Full-Time Equivalent (FTE):** 3 - **Total Costs:** 75,000 USD @@ -146,7 +152,7 @@ In this milestone we develop the core primitives needed for pallet-ismp | | Request/Response proof verification | Sub-component for verifying membership of proofs of a request/response in a merkle mountain range tree. | | | Request Timeout verification | Verifying non-membership of a request in the state trie of a parachain. | | 1e. | Handlers | Logic for handling varying types of incoming messages. | -| | `CreateConsensusClient` | Functionality for creating a consensus client on the receiving state machine. | +| | `CreateConsensusClient` | Functionality for creating a consensus client on the receiving state machine. | | | `ConsensusMessage` | Functionality for handling consensus update messages from other state machines. | | | `RequestMessage` | Functionality for handling request messages from other state machines. | | | `ResponseMessage` | Functionality for handling response messages from other state machines. | @@ -177,6 +183,7 @@ In this milestone we develop pallet-ismp ## Future Plans + We recognize the significant benefits that pallet-ismp offers to the ecosystem, and therefore, after the grant completion we plan to continue providing maintenance with support from the Polkadot/Kusama treasury. ## Additional Information :heavy_plus_sign: From fb2f51fad94c9b001ec207ef6259cf5222b34fda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 16:07:47 +0200 Subject: [PATCH 326/665] Update index.md EightFish complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 516874082b3..651fc1d2354 100644 --- a/applications/index.md +++ b/applications/index.md @@ -66,7 +66,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | -| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☐ | +| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | From c3e4e5a27f6f28d0070a161e79cda0b56640586d Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 11 May 2023 11:48:30 -0300 Subject: [PATCH 327/665] Update index.md (#1734) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 651fc1d2354..571306bf940 100644 --- a/applications/index.md +++ b/applications/index.md @@ -103,7 +103,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | -| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☐ | ☐ | +| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | From 9af15aaf9fa85dc18303fc692470e3742764f225 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 17:07:37 +0200 Subject: [PATCH 328/665] Cancel Perpetual Altruism --- ...col_for_NFT_Migration_and_Data_Exchange.md | 177 ++++++++++-------- applications/index.md | 2 +- 2 files changed, 99 insertions(+), 80 deletions(-) diff --git a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md index ece5ba07b63..f34d39aa1ad 100644 --- a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md +++ b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md @@ -1,30 +1,32 @@ # Protocol for NFT Migration and Data Exchange -* **Team Name:** Perpetual Altruism -* **Payment Address:** -BTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi +- **Team Name:** Perpetual Altruism +- **Payment Address:** +BTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi ETH/DAI : 0xA7427d0D45e8dd969049872F9cDE383716A39B23 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/809#issuecomment-1160448332) -## Project Overview :page_facing_up: +## Project Overview :page_facing_up: This proposal is in response to Polkadot Bridge RFP. + ### Overview -In this proposal, we use the following terms and definitions: +In this proposal, we use the following terms and definitions: -* *NFT:* Intangible asset that is compatible with the ERC-721 standard (i.e. the unique intangible asset is abstracted from the concept of token, which is how the asset is represented on a blockchain). An NFT always exists in a world, which is itself in a universe. +- *NFT:* Intangible asset that is compatible with the ERC-721 standard (i.e. the unique intangible asset is abstracted from the concept of token, which is how the asset is represented on a blockchain). An NFT always exists in a world, which is itself in a universe. -* *Universe* e.g. a blockchain or parachain, the Web2.0 internet, a private company’s database… +- *Universe* e.g. a blockchain or parachain, the Web2.0 internet, a private company’s database… -* *World (within a universe)* e.g. a smart contract or smart contract ecosystem, a website, a private company project… +- *World (within a universe)* e.g. a smart contract or smart contract ecosystem, a website, a private company project… -* *Migration:* The movement of an NFT from an origin universe to a destination universe. +- *Migration:* The movement of an NFT from an origin universe to a destination universe. -* *IOU migration:* An NFT migration where the original token is put in escrow in the origin universe bridge, and a deed that allows the bearer to redeem that original token in the origin universe is created in the destination universe. +- *IOU migration:* An NFT migration where the original token is put in escrow in the origin universe bridge, and a deed that allows the bearer to redeem that original token in the origin universe is created in the destination universe. -* *Full migration:* An NFT migration which is handled by the publisher of the NFT, who controls the destination world, and thus can allow the NFT’s features and intellectual property rights to be transferred to the new token in the destination universe. +- *Full migration:* An NFT migration which is handled by the publisher of the NFT, who controls the destination world, and thus can allow the NFT’s features and intellectual property rights to be transferred to the new token in the destination universe. -* *Digital Rights Management:* The systematic approach to prevent unauthorized redistribution of digital rights and intellectual property rights infringement during a full NFT migration. +- *Digital Rights Management:* The systematic approach to prevent unauthorized redistribution of digital rights and intellectual property rights infringement during a full NFT migration. The aim of this proposal is to standardize what information is sufficient and which are necessary to allow the migration of an NFT from an arbitrary universe to another. Both of the endpoints (origin universe/world and destination universe/world) must be ERC-721 compatible, but they do not have to be blockchains (e.g : domain name tokenization using an ERC-721 compatible API). @@ -34,126 +36,143 @@ There are already Polkadot bridges under development for ERC-20 tokens and other Our team is building NFT.com, a marketplace for the world’s tokenized assets and we need this infrastructure for our marketplace to work effectively on the Polkadot Network. Previous to this we also developed [Cryptograph](https://cryptograph.co), an NFT publisher and marketplace on Ethereum. ### Project Details + The deliverable of this proposal is a standardized protocol specification. -### Ecosystem Fit +### Ecosystem Fit + To our knowledge, there is currently no work being done on a standardized, universal bridge protocol for cross-chain NFT migration. ## Team :busts_in_silhouette: + ### Team members + * Guillaume Gonnaud -* Edouard Bessire +- Edouard Bessire ### Contact + * Guillaume Gonnaud -* g.gonnaud@perpetual-altruism.org -* [NFT.com](http://NFT.com) +- g.gonnaud@perpetual-altruism.org +- [NFT.com](http://NFT.com) + +### Legal Structure -### Legal Structure * Perpetual Altruism Ltd -* 2 Ordnance Mews, London NW86PF, United Kingdom +- 2 Ordnance Mews, London NW86PF, United Kingdom ### Team's experience + **[Guillaume Gonnaud](https://github.com/Nokhal):** Co-Founder and CTO of Perpetual Altruism Ltd, the developer of NFT publisher and marketplace Cryptograph. Previously co-founded two other companies as CTO, and worked as a researcher and developer for Japan’s National Institute of Informatics in Tokyo. He holds a MSc Computer Science from France’s National Polytechnic Institute and a MSc Research in Artificial Intelligence from Paul Sabatier University. He is the main author of the [GBM auction mechanism](https://medium.com/cryptograph/incentivised-bidding-the-gbm-auction-c6dae5a756e5) as well as of the ERC-2665 standard. **[Edouard Bessire](https://github.com/edouardru):** Co-Founder of Perpetual Altruism Ltd, the developer of NFT publisher and marketplace Cryptograph. Computer science Engineer with extensive product development and project management experience. Edouard holds an MSc in Applied Mathematics from France’s National Polytechnic Institute, and an MSc in Innovation, Entrepreneurship and Management from the Imperial College Business School. He is also a co-author of the [GBM auction mechanism](https://medium.com/cryptograph/incentivised-bidding-the-gbm-auction-c6dae5a756e5). ### Team Code Repos -[https://github.com/Nokhal/Cryptograph_Project](https://github.com/Nokhal/Cryptograph_Project) -[https://github.com/ethereum/EIPs/issues/2665](https://github.com/ethereum/EIPs/issues/2665) + +[https://github.com/Nokhal/Cryptograph_Project](https://github.com/Nokhal/Cryptograph_Project) +[https://github.com/ethereum/EIPs/issues/2665](https://github.com/ethereum/EIPs/issues/2665) ### Team LinkedIn Profiles -[https://www.linkedin.com/in/guillaume-gonnaud/](https://www.linkedin.com/in/guillaume-gonnaud/) -[https://www.linkedin.com/in/edouardbessire/](https://www.linkedin.com/in/edouardbessire/) +[https://www.linkedin.com/in/guillaume-gonnaud/](https://www.linkedin.com/in/guillaume-gonnaud/) +[https://www.linkedin.com/in/edouardbessire/](https://www.linkedin.com/in/edouardbessire/) + + +## Development Roadmap :nut_and_bolt: -## Development Roadmap :nut_and_bolt: ### Overview + * **Total Estimated Duration:** Less than 7 weeks -* **Full-time equivalent (FTE):** 2 FTE -* **Total Work Days:** 66 days -* **Cost per work day:** £300 -* **Total Costs:** £19,800 (26862.66 USD/DAI) +- **Full-time equivalent (FTE):** 2 FTE +- **Total Work Days:** 66 days +- **Cost per work day:** £300 +- **Total Costs:** £19,800 (26862.66 USD/DAI) + +### Milestone 1 — Desirable Protocol Features -### Milestone 1 — Desirable Protocol Features * **Estimated Duration:** ~2 weeks -* **FTE:** 2 FTE -* **Work Days:** 21 days -* **Cost per work day:** £300 -* **Costs:** £6,300 (8558.05 USD/DAI) -* **Deliverable:** A list of clearly defined, measurable features that the final bridges built using this vision should support, as well as how to test them using pseudocode. +- **FTE:** 2 FTE +- **Work Days:** 21 days +- **Cost per work day:** £300 +- **Costs:** £6,300 (8558.05 USD/DAI) +- **Deliverable:** A list of clearly defined, measurable features that the final bridges built using this vision should support, as well as how to test them using pseudocode. We will write up and engage with the community to determine the desirable features of a NFT migration and data exchange messaging protocol. So far, we have determined that the protocol must allow for the following features: -* Migrate any ERC-721 token between EVM-compatible chains -* Migrate an NFT back and forth to get the original token back. -* Be ERC-1155 compatible -* Migrate an NFT outside of an EVM universe and redeem the same token back -* Migrate an NFT to an arbitrary world (as the owner of an NFT, you should be able to choose where you want the NFT to be migrated to and who will mint it i.e. the protocol is not restricted to a specific project) -* Have built-in protections against “bad” migration by preventing migration to non-registered destination worlds. -* Allowing polkadot parachains to trustlessly migrate NFTs from one parachain to an another using SPREE. -* Perform both IOU migration (no Digital Rights Management requirement) and Full migration (which requires Digital Rights Management at the bridge level) -* Migrate an NFT with either a ‘checked’ migration (need to be acknowledged by both the sender and the receiver of a token) or ‘unchecked’ migration (the token in the original world needs to first be attributed to a tokenID on the destination chain, then it is simply put in escrow with the bridge on the origin chain). NB: Checked migrations are fully trutless and decentralized and optimised for security, whilst unchecked migrations are optimised for gas costs. -* Licensed under the [Unlicense](https://unlicense.org) +- Migrate any ERC-721 token between EVM-compatible chains +- Migrate an NFT back and forth to get the original token back. +- Be ERC-1155 compatible +- Migrate an NFT outside of an EVM universe and redeem the same token back +- Migrate an NFT to an arbitrary world (as the owner of an NFT, you should be able to choose where you want the NFT to be migrated to and who will mint it i.e. the protocol is not restricted to a specific project) +- Have built-in protections against “bad” migration by preventing migration to non-registered destination worlds. +- Allowing polkadot parachains to trustlessly migrate NFTs from one parachain to an another using SPREE. +- Perform both IOU migration (no Digital Rights Management requirement) and Full migration (which requires Digital Rights Management at the bridge level) +- Migrate an NFT with either a ‘checked’ migration (need to be acknowledged by both the sender and the receiver of a token) or ‘unchecked’ migration (the token in the original world needs to first be attributed to a tokenID on the destination chain, then it is simply put in escrow with the bridge on the origin chain). NB: Checked migrations are fully trutless and decentralized and optimised for security, whilst unchecked migrations are optimised for gas costs. +- Licensed under the [Unlicense](https://unlicense.org) ### Milestone 2 — Checked Migration Process + * **Estimated Duration:** ~2 weeks -* **FTE:** 2 -* **Work Days:** 20 days -* **Cost per work day:** £300 -* **Costs:** £6,000 (8150.52 USD/DAI) -* **Deliverable:** A documented step by step process that would allow a trusted relayer to perform efficient migrations of NFTs. +- **FTE:** 2 +- **Work Days:** 20 days +- **Cost per work day:** £300 +- **Costs:** £6,000 (8150.52 USD/DAI) +- **Deliverable:** A documented step by step process that would allow a trusted relayer to perform efficient migrations of NFTs. We will write up the ‘Checked Migration’ process which includes a security protocol to ensure that both the sender and the receiver are satisfied with the migration outcome. This is especially important if NFT's are migrating from/to a trustless universe (eg : a public decentralized blockchain) toward/from a centralized/private universe. -This process is NOT a fully decentralized trustless process itself in order to accomodate for a wide array of possible origin and destinations, but it does allow decentralized trustless outcomes while guaranteeing authenticity and ownership of the NFT at every step. +This process is NOT a fully decentralized trustless process itself in order to accomodate for a wide array of possible origin and destinations, but it does allow decentralized trustless outcomes while guaranteeing authenticity and ownership of the NFT at every step. -* A checked migration process mean there is an acknowledgment of the migration on the destination universe by the sender. -* A checked migration process mean there is an acknowledgment of the migration on the origin universe by the receiver -* The migration is complete only once both the sender and receiver have acknowledged the migration. Before that, the migrated token cannot be used. -* If after a time-limit, either of those acknowledgement are missing, the migration is reverted : the original token can be withdrawn freely by the sender, and the migrated token is burned. -* Checked migrations need to be possible for either EVM => EVM, * => EVM or EVM => * migrations. -* Checked migrations need to allow any third party to "check" the migration and publish a standardized signed message that the migration did indeed happen. -* NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. -* Licensed under the [Unlicense](https://unlicense.org) +- A checked migration process mean there is an acknowledgment of the migration on the destination universe by the sender. +- A checked migration process mean there is an acknowledgment of the migration on the origin universe by the receiver +- The migration is complete only once both the sender and receiver have acknowledged the migration. Before that, the migrated token cannot be used. +- If after a time-limit, either of those acknowledgement are missing, the migration is reverted : the original token can be withdrawn freely by the sender, and the migrated token is burned. +- Checked migrations need to be possible for either EVM => EVM, *=> EVM or EVM =>* migrations. +- Checked migrations need to allow any third party to "check" the migration and publish a standardized signed message that the migration did indeed happen. +- NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. +- Licensed under the [Unlicense](https://unlicense.org) *The main purpose of this migration process is for NFT publishers to allow their users to effortlessly migrate their tokens with the least amount of efforts required. NFT publishers could offer users to do the whole migration with a single gas spending approve() from an NFT owner and the rest trough meta-transactions by the publisher. The publisher would then sign the migration as properly done after having minted and transferred the token on the destination blockchain. By essence, most NFTs are not trustless assets as their publishers own real world IP rights to them, and it is hence acceptable to use said publishers as relayers. This is standardizing a process that would otherwise require the publisher to update their original NFT smart contracts or NFT owners to burn their original NFT token in order to get a new one minted on the destination universe.* ### Milestone 3 — Trustless Migration Process + * **Estimated Duration:** ~1 week -* **FTE:** 2 -* **Work Days:** 10 days -* **Cost per work day:** £300 -* **Costs:** £3,000 (4075.26 USD/DAI) -* **Deliverable:** A documented step by step process that would allow a trust-minimized relayer to perform migrations of NFTs. +- **FTE:** 2 +- **Work Days:** 10 days +- **Cost per work day:** £300 +- **Costs:** £3,000 (4075.26 USD/DAI) +- **Deliverable:** A documented step by step process that would allow a trust-minimized relayer to perform migrations of NFTs. We will write up the ‘Trustless Migration’ process which is designed to be used when the destination universe have trutsless state reading capabilities of the origin universe. -* Snowfork is already building a substrate module allowing specifically for Ethereum Smart contract reading. If a Substrate-built parachain implement those reading capacities, then implementation of this process should be straightforward. -* In the case of EVM => EVM ERC-721 migration without trustless reading, Chainbridge already exist. However, their contracts requires administrator input for new contract registration as well as lacking features that are NFT specific, such as preventing minting technically correct but legally counterfeit tokens. -* NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. -* Licensed under the [Unlicense](https://unlicense.org) +- Snowfork is already building a substrate module allowing specifically for Ethereum Smart contract reading. If a Substrate-built parachain implement those reading capacities, then implementation of this process should be straightforward. +- In the case of EVM => EVM ERC-721 migration without trustless reading, Chainbridge already exist. However, their contracts requires administrator input for new contract registration as well as lacking features that are NFT specific, such as preventing minting technically correct but legally counterfeit tokens. +- NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. +- Licensed under the [Unlicense](https://unlicense.org) ### Milestone 4 — Standard and Documentation for Cross-universe Migration + * **Estimated Duration:** ~1 week -* **FTE:** 2 -* **Work Days:** 15 days -* **Cost per work day:** £300 -* **Costs:** £4,500 (6112.89 USD/DAI) -* **Deliverables:** +- **FTE:** 2 +- **Work Days:** 15 days +- **Cost per work day:** £300 +- **Costs:** £4,500 (6112.89 USD/DAI) +- **Deliverables:** -* A generic Standard written in pseudocode including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge : only one endpoint should be sufficient to know about all of the migrations. This standard is the most generic version and allows the most diverse universes, and henceforth is the least constrained. It will have it's own dedicated decentralized webpage explaining the standard as well as a documentation and links to both the EIP and the PSP. This decentralized webpage will also have a centralized, cached version that NFT.com will host. -* An EIP standard written in Solidity including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge. -* A PSP standard written in ink! including predicate and postulate for each function and events that would allow a smart contract for either checked or trustless migrations to be performed for the same asset, from the same bridge. This would allow third parties to integrate an NFT bridge on any Smart contract supporting parachain, even if said parachain does not explicitely support a trustless communication channel with other parachains at the substrate level. As a separate module of this PSP we will also provide a standard for parachain NFT migrations using SPREE provided that both parachains implement this standard. -* Those standards must allow an EVM bridge following the EIP on ethereum mainnet/moonbeam to migrate an NFT to a WASM bridge following the PSP standard on a parachain and vice versa. +- A generic Standard written in pseudocode including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge : only one endpoint should be sufficient to know about all of the migrations. This standard is the most generic version and allows the most diverse universes, and henceforth is the least constrained. It will have it's own dedicated decentralized webpage explaining the standard as well as a documentation and links to both the EIP and the PSP. This decentralized webpage will also have a centralized, cached version that NFT.com will host. +- An EIP standard written in Solidity including predicate and postulate for each function and events that would allow for either checked or trustless migrations to be performed for the same asset, from the same bridge. +- A PSP standard written in ink! including predicate and postulate for each function and events that would allow a smart contract for either checked or trustless migrations to be performed for the same asset, from the same bridge. This would allow third parties to integrate an NFT bridge on any Smart contract supporting parachain, even if said parachain does not explicitely support a trustless communication channel with other parachains at the substrate level. As a separate module of this PSP we will also provide a standard for parachain NFT migrations using SPREE provided that both parachains implement this standard. +- Those standards must allow an EVM bridge following the EIP on ethereum mainnet/moonbeam to migrate an NFT to a WASM bridge following the PSP standard on a parachain and vice versa. We will write up the standard and documentation for cross-universe migration, which includes “necessary” and “optional” data for optimization. This is a summarized write up of both the previous milestones but writen as specifications for implementations, including the predicate and postulate of each message and what they mean in term of state on the source and destination universe. -* Challenge: Establishing predicate and postulate on what are the allowed pair of source/destination worlds. Those allowed pairs could be designed in any fashion, from centralized trusted to decentralized and trust minimized. -* Licensed under the [Unlicense](https://unlicense.org) or when required under the license requirements of EIP and PSP. +- Challenge: Establishing predicate and postulate on what are the allowed pair of source/destination worlds. Those allowed pairs could be designed in any fashion, from centralized trusted to decentralized and trust minimized. +- Licensed under the [Unlicense](https://unlicense.org) or when required under the license requirements of EIP and PSP. ## Future Plans + We will implement this standard for EVM-compatible chains. Our main goal is the ability for any Ethereum mainnet NFT to be painlessly migrated to Moonbeam on the Polkadot network. -## Additional Information :heavy_plus_sign: +## Additional Information :heavy_plus_sign: + This proposal is a part of the wider NFT.com venture. -Learn more about our vision for the bridge here: [link](https://docs.google.com/document/d/1mhSKmC_4Hg7GqJuSLZk5Tu1hNjJlqo6O5TNwFx-e6vw/edit?usp=sharing) +Learn more about our vision for the bridge here: [link](https://docs.google.com/document/d/1mhSKmC_4Hg7GqJuSLZk5Tu1hNjJlqo6O5TNwFx-e6vw/edit?usp=sharing) diff --git a/applications/index.md b/applications/index.md index 571306bf940..0ae7267aa04 100644 --- a/applications/index.md +++ b/applications/index.md @@ -393,7 +393,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [OxyDev](https://oxydev.ir) | [SubsCrypt: Managing subscriptions](./SubsCrypt.md) | [GitHub](https://github.com/oxydev) | ☐ | ☒ | ☐ | | [DNFT-Team](https://github.com/DNFT-Team) | [Data framework between personal data and AI models](./DNFT.md) | [GitHub](https://github.com/DNFT-Team) | ☒ | ☐ | ☐ | | [UMC Labs](https://umc.network) | [Secured token subscription](./UMC-Tokenscribe.md) | [GitHub](https://github.com/umc-network) | ☐ | ☐ | ☐ | -| [Perpetual Altruism Ltd](https://cryptograph.co/) | [IP-Rights compliant NFT bridge protocol](./NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md) | [GitHub](https://github.com/Perpetual-Altruism-Ltd) | ☐ | ☐ | ☐ | +| [Perpetual Altruism Ltd](https://cryptograph.co/) | [IP-Rights compliant NFT bridge protocol](./NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md) | [GitHub](https://github.com/Perpetual-Altruism-Ltd) | ☒ | ☐ | ☐ | | [Clover](https://clover.finance/) | [Easy-to-use blockchain infrastructure](./clover_network.md) | [GitHub](https://github.com/clover-network/) | ☒ | ☒ | ☐ | | [DoraHacks](https://dorahacks.com/) | [Quadratic Funding Pallet](./dorahacks-quadratic-funding.md) | [GitHub](https://github.com/dorahacksglobal) | ☐ | ☒ | ☒ | | [SEOR](https://www.seor.io) | [Multi-chain smart contract development platform](./SEOR-code-less-smart-contract-platform.md) | [GitHub](https://github.com/SealSC) | ☐ | ☒ | ☐ | From 965ed92f5e02df39adf8db2c3fd07b46e9c9622c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 17:15:08 +0200 Subject: [PATCH 329/665] fix --- ...col_for_NFT_Migration_and_Data_Exchange.md | 28 +++++++++++++------ applications/index.md | 2 +- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md index f34d39aa1ad..8f1bac5d823 100644 --- a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md +++ b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md @@ -4,7 +4,6 @@ - **Payment Address:** BTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi ETH/DAI : 0xA7427d0D45e8dd969049872F9cDE383716A39B23 -- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/809#issuecomment-1160448332) ## Project Overview :page_facing_up: @@ -47,18 +46,21 @@ To our knowledge, there is currently no work being done on a standardized, unive ### Team members -* Guillaume Gonnaud +- Guillaume Gonnaud + - Edouard Bessire ### Contact -* Guillaume Gonnaud +- Guillaume Gonnaud + - g.gonnaud@perpetual-altruism.org - [NFT.com](http://NFT.com) ### Legal Structure -* Perpetual Altruism Ltd +- Perpetual Altruism Ltd + - 2 Ordnance Mews, London NW86PF, United Kingdom ### Team's experience @@ -82,7 +84,8 @@ To our knowledge, there is currently no work being done on a standardized, unive ### Overview -* **Total Estimated Duration:** Less than 7 weeks +- **Total Estimated Duration:** Less than 7 weeks + - **Full-time equivalent (FTE):** 2 FTE - **Total Work Days:** 66 days - **Cost per work day:** £300 @@ -90,7 +93,8 @@ To our knowledge, there is currently no work being done on a standardized, unive ### Milestone 1 — Desirable Protocol Features -* **Estimated Duration:** ~2 weeks +- **Estimated Duration:** ~2 weeks + - **FTE:** 2 FTE - **Work Days:** 21 days - **Cost per work day:** £300 @@ -99,6 +103,7 @@ To our knowledge, there is currently no work being done on a standardized, unive We will write up and engage with the community to determine the desirable features of a NFT migration and data exchange messaging protocol. So far, we have determined that the protocol must allow for the following features: + - Migrate any ERC-721 token between EVM-compatible chains - Migrate an NFT back and forth to get the original token back. - Be ERC-1155 compatible @@ -112,7 +117,8 @@ So far, we have determined that the protocol must allow for the following featur ### Milestone 2 — Checked Migration Process -* **Estimated Duration:** ~2 weeks +- **Estimated Duration:** ~2 weeks + - **FTE:** 2 - **Work Days:** 20 days - **Cost per work day:** £300 @@ -136,7 +142,8 @@ This process is NOT a fully decentralized trustless process itself in order to a ### Milestone 3 — Trustless Migration Process -* **Estimated Duration:** ~1 week +- **Estimated Duration:** ~1 week + - **FTE:** 2 - **Work Days:** 10 days - **Cost per work day:** £300 @@ -144,6 +151,7 @@ This process is NOT a fully decentralized trustless process itself in order to a - **Deliverable:** A documented step by step process that would allow a trust-minimized relayer to perform migrations of NFTs. We will write up the ‘Trustless Migration’ process which is designed to be used when the destination universe have trutsless state reading capabilities of the origin universe. + - Snowfork is already building a substrate module allowing specifically for Ethereum Smart contract reading. If a Substrate-built parachain implement those reading capacities, then implementation of this process should be straightforward. - In the case of EVM => EVM ERC-721 migration without trustless reading, Chainbridge already exist. However, their contracts requires administrator input for new contract registration as well as lacking features that are NFT specific, such as preventing minting technically correct but legally counterfeit tokens. - NB : This only cover the migration of NFTs to a new universe, not the redemption of the the NFT back to it's origin universe. @@ -151,7 +159,8 @@ We will write up the ‘Trustless Migration’ process which is designed to be u ### Milestone 4 — Standard and Documentation for Cross-universe Migration -* **Estimated Duration:** ~1 week +- **Estimated Duration:** ~1 week + - **FTE:** 2 - **Work Days:** 15 days - **Cost per work day:** £300 @@ -164,6 +173,7 @@ We will write up the ‘Trustless Migration’ process which is designed to be u - Those standards must allow an EVM bridge following the EIP on ethereum mainnet/moonbeam to migrate an NFT to a WASM bridge following the PSP standard on a parachain and vice versa. We will write up the standard and documentation for cross-universe migration, which includes “necessary” and “optional” data for optimization. This is a summarized write up of both the previous milestones but writen as specifications for implementations, including the predicate and postulate of each message and what they mean in term of state on the source and destination universe. + - Challenge: Establishing predicate and postulate on what are the allowed pair of source/destination worlds. Those allowed pairs could be designed in any fashion, from centralized trusted to decentralized and trust minimized. - Licensed under the [Unlicense](https://unlicense.org) or when required under the license requirements of EIP and PSP. diff --git a/applications/index.md b/applications/index.md index 0ae7267aa04..571306bf940 100644 --- a/applications/index.md +++ b/applications/index.md @@ -393,7 +393,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [OxyDev](https://oxydev.ir) | [SubsCrypt: Managing subscriptions](./SubsCrypt.md) | [GitHub](https://github.com/oxydev) | ☐ | ☒ | ☐ | | [DNFT-Team](https://github.com/DNFT-Team) | [Data framework between personal data and AI models](./DNFT.md) | [GitHub](https://github.com/DNFT-Team) | ☒ | ☐ | ☐ | | [UMC Labs](https://umc.network) | [Secured token subscription](./UMC-Tokenscribe.md) | [GitHub](https://github.com/umc-network) | ☐ | ☐ | ☐ | -| [Perpetual Altruism Ltd](https://cryptograph.co/) | [IP-Rights compliant NFT bridge protocol](./NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md) | [GitHub](https://github.com/Perpetual-Altruism-Ltd) | ☒ | ☐ | ☐ | +| [Perpetual Altruism Ltd](https://cryptograph.co/) | [IP-Rights compliant NFT bridge protocol](./NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md) | [GitHub](https://github.com/Perpetual-Altruism-Ltd) | ☐ | ☐ | ☐ | | [Clover](https://clover.finance/) | [Easy-to-use blockchain infrastructure](./clover_network.md) | [GitHub](https://github.com/clover-network/) | ☒ | ☒ | ☐ | | [DoraHacks](https://dorahacks.com/) | [Quadratic Funding Pallet](./dorahacks-quadratic-funding.md) | [GitHub](https://github.com/dorahacksglobal) | ☐ | ☒ | ☒ | | [SEOR](https://www.seor.io) | [Multi-chain smart contract development platform](./SEOR-code-less-smart-contract-platform.md) | [GitHub](https://github.com/SealSC) | ☐ | ☒ | ☐ | From 07781fa360e7e3f3aeb9d73a351cfe3cf31603c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 11 May 2023 21:16:33 +0200 Subject: [PATCH 330/665] Cancel Perpetual Altruism (#1735) Co-authored-by: David Hawig --- .../NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md index 8f1bac5d823..5108a34a24d 100644 --- a/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md +++ b/applications/NFT_Bridge_Protocol_for_NFT_Migration_and_Data_Exchange.md @@ -4,6 +4,7 @@ - **Payment Address:** BTC : 1B6AHziiBvE28Lg74n23V3dYXbxcVLGKYi ETH/DAI : 0xA7427d0D45e8dd969049872F9cDE383716A39B23 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/809#issuecomment-1160448332) ## Project Overview :page_facing_up: From 4ee491c885edbe6f32548efe43739d1847dfc920 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 12 May 2023 03:24:38 -0400 Subject: [PATCH 331/665] Update chainjs.md (#1736) --- applications/chainjs.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/chainjs.md b/applications/chainjs.md index 68372bc37b6..93ea2e51e63 100644 --- a/applications/chainjs.md +++ b/applications/chainjs.md @@ -2,6 +2,7 @@ * **Team Name:** API Market, Inc. dba AIKON * **Payment Address:** Ethereum Address: 0x7a6fdc8a113966d1236aB0FaB6dC5D3e5c05db88 +* **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/228#issuecomment-1544458481) ## Project Overview :page_facing_up: From e5fb39bb9293ad7577ca7f494a4eb5b07e52f27f Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 11:31:33 +0200 Subject: [PATCH 332/665] CSS updates according to https://web3.foundation/ --- src/css/custom.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index 01e15bc5939..da57dabd162 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -14,6 +14,8 @@ --ifm-color-primary-light: rgb(70, 203, 174); --ifm-color-primary-lighter: rgb(102, 212, 189); --ifm-color-primary-lightest: rgb(146, 224, 208); + --ifm-navbar-link-color: #000; + --ifm-color-black: #fff; --ifm-code-font-size: 95%; font-family: SuisseIntl,sans-serif; } From 308c7c43ff052e644742eeba697b0cb798937f66 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 11:52:43 +0200 Subject: [PATCH 333/665] update favicon --- docusaurus.config.js | 2 +- static/img/favicon-32x32.png | Bin 0 -> 604 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 static/img/favicon-32x32.png diff --git a/docusaurus.config.js b/docusaurus.config.js index 4fd923b27c4..f8b23e6820e 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -10,7 +10,7 @@ module.exports = { baseUrl: '/Grants-Program/', onBrokenLinks: 'warn', // Revert back to 'throw' once initial release is up onBrokenMarkdownLinks: 'warn', - favicon: 'img/Web3Foundation.png', + favicon: 'img/favicon-32x32.png', organizationName: 'w3f', // Usually your GitHub org/user name. trailingSlash: false, projectName: 'Grants-Program', // Usually your repo name. diff --git a/static/img/favicon-32x32.png b/static/img/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..d26a24056c70e04f2331d6fab485dfcb39257c73 GIT binary patch literal 604 zcmV-i0;BzjP)KRXwPJP!zsqW Date: Fri, 12 May 2023 14:10:59 +0200 Subject: [PATCH 334/665] Clean navbar --- docusaurus.config.js | 14 +++++--------- src/css/custom.css | 5 +++++ static/img/w3f_logo.svg | 12 ++++++++++++ 3 files changed, 22 insertions(+), 9 deletions(-) create mode 100644 static/img/w3f_logo.svg diff --git a/docusaurus.config.js b/docusaurus.config.js index f8b23e6820e..d967c998564 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -34,26 +34,28 @@ module.exports = { isCloseable: true, }, navbar: { - title: 'W3F Grants Program', + title: 'Grants Program', logo: { alt: 'W3F Grants Program', - src: 'img/Web3Foundation.png', + src: 'img/w3f_logo.svg', }, items: [ { type: 'doc', docId: 'docs/introduction', + position: 'right', label: 'Introduction', }, { type: 'doc', docId: 'applications/index', - position: 'left', + position: 'right', label: 'List of Grants', }, { type: 'doc', docId: 'docs/faq', + position: 'right', label: 'FAQ', }, { @@ -61,12 +63,6 @@ module.exports = { docId: 'docs/Process/how-to-apply', position: 'right', label: 'Apply', - }, - { - type: 'doc', - docId: 'docs/contribute', - position: 'right', - label: 'Contribute', } ], }, diff --git a/src/css/custom.css b/src/css/custom.css index da57dabd162..a5ba1eaa71c 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -24,6 +24,11 @@ font-size: 4rem; } +.navbar__logo { + flex: 0 0 auto; + height: 48px; + margin-right: 0rem; +} .footer__link-item { text-decoration: none; diff --git a/static/img/w3f_logo.svg b/static/img/w3f_logo.svg new file mode 100644 index 00000000000..cffc76ba628 --- /dev/null +++ b/static/img/w3f_logo.svg @@ -0,0 +1,12 @@ + + + + +Web3Foundation_4 + + From 6a7b2fbf0ff2480f5fab3457c337e0f039a57d7e Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 14:36:22 +0200 Subject: [PATCH 335/665] footer image --- src/css/custom.css | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index a5ba1eaa71c..92b37c4d307 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -30,6 +30,7 @@ margin-right: 0rem; } + .footer__link-item { text-decoration: none; } @@ -57,6 +58,8 @@ .footer--dark { --ifm-footer-background-color: #000; + background-image: url("https://web3.foundation/static/fa2e2556a97b02fb8186cceaa6999d78/24754/research-large.avif"); + background-size: cover; } .docusaurus-highlight-code-line { From 2a0b5a3e118dce00bfac1b0d51cd725cadd721b9 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 14:40:46 +0200 Subject: [PATCH 336/665] Update copyright --- src/css/custom.css | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index 92b37c4d307..227e6c3c91a 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -62,6 +62,12 @@ background-size: cover; } +.footer__copyright { + color: #7F7F7F; + font-size: 14px; + text-align: right; +} + .docusaurus-highlight-code-line { background-color: rgba(0, 0, 0, 0.1); display: block; From 050ffd29e310205daa5db383654d5ca60cfe5c92 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 12 May 2023 15:27:34 +0200 Subject: [PATCH 337/665] link animation --- src/css/custom.css | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index 227e6c3c91a..dfd728d40c0 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -106,4 +106,33 @@ a { text-transform: uppercase; font-weight: 600; color: var(--ifm-color-gray-600); +} + +/* Link styling */ +.navbar__item { + padding: 0px; + margin: 4px 12px; +} + +a.navbar__item{ + background: + linear-gradient( + to right, + #fff, + #fff + ), + linear-gradient( + to right, + #000, + #000, + #000 + ); + background-size: 100% 3px, 0 3px; + background-position: 100% 100%, 0 100%; + background-repeat: no-repeat; + transition: background-size 400ms; +} + +a:hover.navbar__item{ + background-size: 0 3px, 100% 3px; } \ No newline at end of file From cd2833d39daca59e4d2865fc7be8b6a0f99df62f Mon Sep 17 00:00:00 2001 From: caso Date: Fri, 12 May 2023 16:44:26 +0200 Subject: [PATCH 338/665] Update check_application_document.yml (#1737) Fix for formatting issues --- .github/workflows/check_application_document.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index f687de9fe9b..cef9f8827f9 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -9,8 +9,8 @@ jobs: discussion_private: if: | github.event.action == 'opened' && - github.event.pull_request.body && ( - contains(github.event.pull_request.body, '- [x] I prefer the discussion') || + contains(github.event.pull_request.body, 'Project Abstract') && ( + !contains(github.event.pull_request.body, '- [ ] I prefer the discussion') || ( contains(github.event.pull_request.body, '- [ ] I prefer the discussion') && !contains(github.event.pull_request.body, '@_______:matrix.org') From f49d7ffdebae10f5e7684c07892a4fdc05cddbec Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 16 May 2023 01:35:29 -0400 Subject: [PATCH 339/665] Update index.md (#1743) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 571306bf940..942bc8864e4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -87,7 +87,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☒ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | -| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☐ | +| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | From ded0c94e4de253e27bcb96f000ffdfe84daa1edb Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 16 May 2023 08:59:07 -0300 Subject: [PATCH 340/665] Update index.md (#1746) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 942bc8864e4..3bba2005ff5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -107,7 +107,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | | [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | -| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | +| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☐ | ☐ | [🔝](#menu) From 3601d95f7b61e4cdde70889a47ad216b1f1ecdb2 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 16 May 2023 08:59:29 -0300 Subject: [PATCH 341/665] Update index.md (#1745) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3bba2005ff5..e74dc1007e6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -210,7 +210,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | | [TDSoftware](https://www.tdsoftware.de/) | [SubIdentity](./SubIdentity.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | | [ChainSafe Systems](https://chainsafe.io/) | [SubstrateSnap Maintenance Proposal](./maintenance/Substratesnap_Maintenance.md) | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☒ | ☒ | -| [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☐ | ☐ | +| [HugoByte](https://hugobyte.com/) | [Project Aurras - MVP - Phase 2](./project_aurras_mvp_phase_2.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☐ | | [Perun Network](https://perun.network/) | [Perun App Channels](./perun_app_channels.md) | [GitHub](https://github.com/perun-network/) | ☐ | ☒ | ☒ | | [ChainSafe Systems](https://chainsafe.io/) | [Privacy enhancement for Polkadot-js extension](./polkadot-js-extension-per-account-auth.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [BQP](https://qbitcoin.tech/) | [Quantum Lock for QBITCOIN](./quantumLock.md) | [GitHub](https://github.com/bqpquantum/) | ☐ | ☐ | ☐ | From 6a0015a62a2bedab57a2e407d483b8b30db3cea1 Mon Sep 17 00:00:00 2001 From: Ghan Vashishtha <74914749+gnv-zeeve@users.noreply.github.com> Date: Tue, 16 May 2023 21:00:17 +0530 Subject: [PATCH 342/665] update larch team, duration and deliverables (#1744) Signed-off-by: Jasti Sri Radhe Shyam Co-authored-by: Jasti Sri Radhe Shyam --- ...eployment_zoombienet_testing_automation.md | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md index 482003617f4..aae0ff28f08 100644 --- a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md +++ b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md @@ -19,14 +19,14 @@ A GUI will be built to allow a quick setup of the relaychain, parachain with zom This not only will allow configurations on the parachain side but will also allow you to pick from a set of predefined DSL templates on Zombie-net as well as upload the new templates without needing to write the code. The graphical control panel will support all the other configurations or operations required to enable the developer or parachain team to test with as much flexibility as required. These operations include: -- Restart - after x seconds, will stop the `process` and start again after the `x`amount of seconds or immediately. -- Stop - will pause (SIGSTOP) the process) -- Resume - will pause (SIGCONT) the process) -- Sleep - will allow config to sleep the test-runner for `x` ammount of seconds) +- Start - Start the network with configured info (templates) + - Start the network for either evaluation or testing +- Delete - will stop the processes and delete it +- View Info - view execution logs and command **Test result and logs** -The interface will allow the developer to test and see live logs of the test run, post run results and logs on the aforementioned interface. Furthermore, a stack of Prometheus and Grafana will allow easy monitoring of the Zombie-net. +The interface will allow the developer to test and see live logs of the test run, post run results and logs on the aforementioned interface. Furthermore, a stack of Prometheus and Grafana will allow easy monitoring of the Zombienet. **Templating** @@ -42,11 +42,15 @@ The control panel will also allow the developer or the parachain team to one-cli - Sankalp Sharma -- Arjun Chamyal +- Jasti Sri Radhe Shyam -- Rahul Meena +- Antar Basu - +- Swati Sharma + +- Gowrish K + +- Abhishek Kumar ### Contact @@ -74,7 +78,7 @@ The control panel will also allow the developer or the parachain team to one-cli -Founded by a team of experienced professionals and enterprenuers from industry, Zeeve's cofounders collectively have over 45+ years of experience in technology, product development, and various business verticals. Zeeve has built an enterprise-grade no-code Blockchain Infrastructure Automation platform that enables Enterprises, Blockchain Startups, Blockchain Consulting Companies and Web3 Developers to deploy Blockchain nodes and Decentralised Apps within minutes, and manage them with advanced analytics and real-time alerts. In June 2022, the Startup raised $2.65 Million in a Seed Round from Leo Capital and Blu Ventures. It plans to deploy the funds towards product development, augmenting the technology team and enhancing its reach among DApp developers and global corporations, please consider visiting our prior [work](https://www.zeeve.io/platform). +Founded by a team of experienced professionals and entrepreneurs from industry, Zeeve's co-founders collectively have over 45+ years of experience in technology, product development, and various business verticals. Zeeve has built an enterprise-grade no-code Blockchain Infrastructure Automation platform that enables Enterprises, Blockchain Startups, Blockchain Consulting Companies and Web3 Developers to deploy Blockchain nodes and Decentralised Apps within minutes, and manage them with advanced analytics and real-time alerts. In June 2022, the Startup raised $2.65 Million in a Seed Round from Leo Capital and Blu Ventures. It plans to deploy the funds towards product development, augmenting the technology team and enhancing its reach among DApp developers and global corporations, please consider visiting our prior [work](https://www.zeeve.io/platform). @@ -122,9 +126,9 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps - Automated Kusama deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-kusama-node/) -- Created a relay chain on substrate with some customisations done at the core to accomodate the tokenomics and custom reward mechanism [here](https://axscan.axiacoin.network/#/explorer) +- Created a relay chain on substrate with some customisations done at the core to accommodate the tokenomics and custom reward mechanism [here](https://axscan.axiacoin.network/#/explorer) -- Published a [blog post](https://www.zeeve.io/blog/how-to-use-substrate-to-create-parachains-in-polkadot/) about the usage and omlememtation of praachains +- Published a [blog post](https://www.zeeve.io/blog/how-to-use-substrate-to-create-parachains-in-polkadot/) about the usage and implementation of parachains - The focus for Zeeve will be automating the parachain deployments, dedicated node setups and help with faster testing with zombie-net. @@ -140,7 +144,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps -- **Total Estimated Duration:** 2 months +- **Total Estimated Duration:** 4 months - **Full-Time Equivalent (FTE):** 4 FTE @@ -152,7 +156,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps -- **Estimated duration:** 40 days +- **Estimated duration:** 60 days - **FTE:** 4 @@ -165,9 +169,9 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps | 0a. | License | GPLv3 | | 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) create a new Substrate based Zombie-net nodes and initiate testing, which will show how the new functionality works. | | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | -| 0d. | Docker/Cluster | We will provide a Dockerfile(s)/Cluster Yaml(s) that can be used to test all the functionality delivered with this milestone. | +| 0d. | Standalone Executable | Will provide standalone executable that start the GUI service and other corresponding | | 1. | Initial Automation | We will build the core GUI driven automation to create and deploy the substrate based Zombie-net configurations including relaychain and parachain configurations. | -| 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start wtih parachain setup for the desired Zombie-net | +| 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start with parachain setup for the desired Zombie-net | | 3. | Node type support | Implement setup of all node types including Full node, Validator node and Collator node for the respective relay chain and parachain within the configured Zombie-net. | | 4. | Cloud agnostic setup | The larch setup will be cloud agnostic and it can be installed on the choice of cloud, instructions and documentation will be provided for the same. | | 5. | User management | The larch will allow to setup different users with desired permissions and access controls such as add, delete zombie-net, view, delete logs and save, delete templates. | @@ -193,7 +197,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps | 0a. | License | GPLv3 | | 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) create a new Zombie-net, test and setup monitoring for it, which will show how the new functionality works. | | 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | -| 0d. | Docker/Cluster | We will provide a Dockerfile(s)/Cluster Yaml(s) that can be used to test all the functionality delivered with this milestone. | +| 0d. | Standalone Executable | Will provide standalone executable that start the GUI service and other corresponding | | 0e. | Article | Using our PR channels, we will publish an **article** that explains the high-level overview of automation as part of the grant, followed by a set of extensive examples. | | 1. | Design monitoring strategy | The Zombie-net doesn't provide any embedded monitoring tool, we will with the zombie-net setup automation, automatically setup prometheus and Grafana while configuring the zombie-net. | | 2. | Setup Dashboard | The deployment done for Prometheus and Grafana will show standard Dashboard having system resource and zombie-net specific details shown on the aforementioned Grafana GUI Dashboard. | From ab3177fce9e6df0bc3f45e04a1523e95d2a18e31 Mon Sep 17 00:00:00 2001 From: Nikhil Desai Date: Wed, 17 May 2023 11:13:10 +0530 Subject: [PATCH 343/665] RFP: implementation-benchmarking Milestone 3 (#1722) * RFP: implementation-benchmarking Milestone 3 * add events benchmarking and communicate intent to maintain this work --- .../ink-pallet-benchmarking-phase-2.md | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 applications/ink-pallet-benchmarking-phase-2.md diff --git a/applications/ink-pallet-benchmarking-phase-2.md b/applications/ink-pallet-benchmarking-phase-2.md new file mode 100644 index 00000000000..5e9a02ec814 --- /dev/null +++ b/applications/ink-pallet-benchmarking-phase-2.md @@ -0,0 +1,122 @@ +# ink!/pallet/solidity performance benchmarking phase 2 + +- **Team Name:** Talentica Software +- **Payment Address:** 0x8bd54ec34A35f3A2f668A33d9578b5C3A6b730dE +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview : +Proposal for Milestone 2 in the RFP titled [implementation-benchmarking](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/implementation-benchmarking.md). + +### Overview + +There are multiple ways to implement the logic in substrate i.e using pallets or ink smart contracts, or even writing solidity code and compiling it to WASM with the help of a solang compiler. We have to benchmark the performance metrics of the logic implemented using each of the above methods. We have already benchmarked the storage performance(basic data types) of each of the implementations as part of Milestone 1 and 2. Now, we will benchmark CPU-intensive logic, events emission and cross-contract calls across all the four implementations. We hope this will help new developers in deciding the best approach to implement the logic. + +### Project Details + +We will employ the approach already taken to deliver Milestones 1 and 2 to benchmark CPU intensive task on all the four implementation strategies and also cross-contract calls within an implementation, wherever possible. We will use following tools to do so: +- [Substrate Runtime Benchmarking Framework](https://github.com/paritytech/substrate/tree/master/frame/benchmarking) + +### Ecosystem Fit + +This will help new developers to decide the best tool to implement the logic. + +## Team :busts_in_silhouette: + +### Team members +- Debasish Ray Chawdhuri - Blockchain and Cryptography Researcher +- Pankaj Mendki -Blockchain expert +- Nikhil Desai - Blockchain Developer https://github.com/Nikhil-Desai-Talentica +- Amit Singh - Blockchain Developer https://github.com/iamit-singh + +### Contact + +- **Contact Name:** Nikhil Desai +- **Contact Email:** Nikhil.Desai@talentica.com +- **Website:** https://www.talentica.com/ + +### Legal Structure + +- **Registered Address:** B-7/8, Anmol Pride, Baner Road, Baner, Pune, Maharashtra 411045, India +- **Registered Legal Entity:** Talentica Software India Pvt. Ltd. + +### Team's experience + +We have already worked on [implementation-benchmarking](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/implementation-benchmarking.md) and delivered Milestones 1 and 2. + +### Team Code Repos + +- [implementation-benchmarking](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ink-pallet-benchmarking-milestone_2.md) +- [provenance-usecase](https://github.com/TalenticaSoftware/provenance-usecase) +- [simpleblockchain](https://github.com/Talentica/simpleblockchain) + +- [Nikhil-Desai-Talentica](https://github.com/Nikhil-Desai-Talentica) + +### Team LinkedIn Profiles (if available) + +- Debasish Ray Chawdhuri - https://www.linkedin.com/in/debasish-ray-chawdhuri-4b444316/ +- Pankaj Mendki - https://www.linkedin.com/in/pankaj-mendki-8576363/ +- Nikhil Desai - https://www.linkedin.com/in/nikhil-desai-1209a38b/ +- Amit Singh - https://www.linkedin.com/in/amit-singh-3637a898/ + +## Development Status : + +We have come up with a high-level implementation plan and will start implementing it soon. + +## Development Roadmap :nut_and_bolt: + +| Number | Objective | Deliverable | Time Estimate | +| -----: | ----------- | ------------- | ----------- | +| 1. | | Milestone 3, Deliverable 1 | 2 days | +| 2. | | Milestone 3, Deliverable 2 | 2 days | +| 3. | | Milestone 3, Deliverable 3 | 1 day | +| 4. | | Milestone 3, Deliverable 4 | 2 days | +| 5. | | Milestone 3, Deliverable 5 | 3 days | +| 6. | | Milestone 3, Deliverable 6 | 3 day | +| 7. | | Milestone 3, Deliverable 7 | 3 days | +| 8. | | Milestone 3, Deliverable 8 | 3 days | +| 9. | | Milestone 3, Deliverable 9 | 1 days | +| 10. | | Milestone 3, Deliverable 10 | 1 days | +| 11. | | Milestone 3, Deliverable 11 | 1 days | +| 12. | | Milestone 3, Deliverable 12 | 1 days | +| 13. | | Milestone 3, Deliverable 0b, 0e | 1 day | + +### Overview + +- **Total Estimated Duration:** 5 Weeks +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 6,000 DAI + +### Milestone 3 - Compute intensive function and cross-contract call benchmarking + +- **Estimated duration:** 5 Weeks +- **FTE:** 1 +- **Costs:** 6,000 DAI + +> :exclamation: **The default deliverables 0a-0d below are mandatory for all milestones**, and deliverable 0e at least for the last one. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and and an **article** explaining how to use the tool to benchmark custom compute intensive functions and cross-contract calls along with a **live demo** if possible. | +| **0c.** | Testing and Testing Guide | We are building atop of the benchmarking framework that's part of the substrate-core. Some tests may be included when it comes to the functions being tested. | +| **0d.** | Docker | Not Applicable. | +| 0e. | Article | We will publish an **article** that explains how each implementation technique performs, and when to choose which. | +| 1. | Pallet CPU-intensive extrinsic | Extend a sample pallet to include a CPU-intensive extrinsic. | +| 2. | Ink! CPU-intensive function | Extend a sample Ink! contract to include a CPU-intensive function. | +| 3. | Solidity-WASM and Solidity-Native CPU-intensive function | Extend a sample Solidity contract to include a CPU-intensive function | +| 4. | CPU-intensive benchmarks | Run the benchmarks on all these implementations and compare. | +| 5. | Pallet cross-contract call | Add another pallet and invoke it from the sample pallet. | +| 6. | Ink! cross-contract call | Add another Ink! contract and invoke it from the sample Ink! contract. | +| 7. | cross-contract benchmarks | run cross-contract calls across different implementations and collect benchmarks. | +| 8. | Solidity-WASM and Solidity-Native cross-contract call | Add another Solidity contract and invoke it from the sample Solidity contract. (Note: There are [unresolved issues](https://github.com/hyperledger/solang/issues/666) questioning the feasibility of cross-contract calls in Solidity-WASM and Solidity-Native. Nevertheless, an attempt will be made to see if it's possible. | +| 9. | Pallet events | benchmark events emitted from the sample pallet. | +| 10. | Ink! events | benchmark events emitted from the sample Ink! contract. | +| 11. | Solidity-WASM and Solidity-Native events | benchmark events emitted from the Solidity-WASM and Solidity-Native contracts. | +| 12. | Benchmark events across implementations | benchmark and record events emission across implementations. | + +We are planning to submit another grant application towards Milestone 4 where we discuss our approach to maintaining this work, using some software tools to automate the process wherever possible. + +## Additional Information :heavy_plus_sign: + +Gautam Dhameja told us about the Grants program and encouraged us to apply to the same. +We have already applied for and delivered Milestones 1 and 2 against [implementation-benchmarking](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/implementation-benchmarking.md) From a571aa0845f925e49da469f05c784014ff0c3d90 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 17 May 2023 07:47:11 +0200 Subject: [PATCH 344/665] Update index.md Implementation Benchmarking Milestone 3 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index e74dc1007e6..23ed04f96cd 100644 --- a/applications/index.md +++ b/applications/index.md @@ -56,6 +56,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | [🔝](#menu) From 818a7070d7efc9c3971b24cdebd4e62431d4a666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 17 May 2023 10:49:47 +0200 Subject: [PATCH 345/665] Update index.md Galaxy M1 done --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 23ed04f96cd..92ed6993f06 100644 --- a/applications/index.md +++ b/applications/index.md @@ -45,7 +45,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | -| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☐ | ☐ | +| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | From b3a212437fda18c61377dc9dd1ab0a1d095784e7 Mon Sep 17 00:00:00 2001 From: Dennis Zoma <3930150+wottpal@users.noreply.github.com> Date: Wed, 17 May 2023 16:03:03 +0200 Subject: [PATCH 346/665] XCM Domain Service (#1733) --- applications/xcm-domain-service.md | 246 +++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) create mode 100644 applications/xcm-domain-service.md diff --git a/applications/xcm-domain-service.md b/applications/xcm-domain-service.md new file mode 100644 index 00000000000..a9117dde086 --- /dev/null +++ b/applications/xcm-domain-service.md @@ -0,0 +1,246 @@ +# XCM Domain Name Service + +- **Team Name:** Scio Labs (AZERO.ID) +- **Payment Address:** USDC (Ethereum Mainnet) to scio.eth - 0x8068a383797811734Cb4fAA1Cc8111897C461915 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +- Tagline: + +Research ink! based domain service integrated with XCM + +- Brief Description: + +Our team secured first place in the ETHWarsaw hackathon in 2022 with AZERO.ID, an on-chain domain service using ink!, by winning the Aleph Zero Foundation's bounty. The team has since developed a sophisticated on-chain NFT domain platform in ink! v4, and is set to launch on the Aleph Zero mainnet. Our next objective is to expand the platform to the Dotsama ecosystem and leverage its full potential by enhancing it with the use of XCM. Moreover, we have already challenged the potential value creation for the Polkadot ecosystem with different people at Parity. + +- An indication of how your project relates to / integrates into Substrate / Polkadot / Kusama: + +AZERO.ID is the first sophisticated on-chain domain name service natively written in ink!. Because at Scio Labs, we envision a future where Substrate smart contracts are predominantly WASM-based. Our plans include launching the initial version of our protocol on the Aleph Zero mainnet as well as our new landing page and dApp soon. We plan to enhance our platform by utilizing XCM, to evolve into a unified Dotsama/Substrate domain name service. As the shift towards WASM-based smart contracts gains momentum, we believe the Dotsama ecosystem is ready for a native on-chain domain system that offers interoperability and usability across all Parachains. + +- An indication of why your team is interested in creating this project: + +We harbor a profound interest in the domain of on-chain identity with the belief in Substrate and ink! as the leading tech stack for the future of web3. Bringing our domain platform to Dotsama will not only demonstrate the capabilities of ink! and XCM, but add a lot of utility for users in the Dotsama ecosystem. Also, we love to craft great end-to-end user-facing applications well beyond just the infrastructure layer. + +A unified on-chain domain standard significantly improves the user experience of handling cross-parachain transactions. Further, on-chain NFT domains are the key primitive of a user's on-chain identity and can be integrated into any kind of application. Our domains provide additional utility via a flexible metadata storage field to store DIDs, verifiable credentials, and subdomains to enable organizational and enterprise use cases. Further, tradeable on-chain NFT domains are a tangible product that increases demand for Polkadot block space and improves ecosystem adoption, as previously seen on Ethereum and other chains. + +### Project Details + +- The problem(s) that you want to investigate, and why these are important: + +We aim to resolve the challenge of identifying the optimal technical architecture for a Dotsama-wide on-chain NFT domain service and how XCM can be leveraged to achieve this. Thus, before we can build an XCM-based domain service in ink!, we will need an in-depth understanding of the XCM technology, currently available standards, and their limitations. Once we have developed a deep understanding, we will identify all potential levels of integration, assess their feasibility, and finally propose the technical architecture of an XCM-based domain service. + +- Research questions/hypothesis: + +Find below a list of research questions we have identified. This list is not final; other questions might arise in the research process. + + * To what extent is it possible to make XCM calls via ink! smart contracts at the moment, and what will improve in the foreseeable future? + + * Does XCM support calls between different smart contract languages? Like ink! <> Solidity. + + * What does a cross-chain domain service via XCM actually mean? + + * How can XCM be used to achieve "cross-parachain" domain-to-domain asset transfers? + + * How is the gas & registration/renewal fee payment handled? + + * Is XCM needed for cross-chain domain ↔ address resolving? + + * Can domains be registered from every parachain via XCM? How can a unique namespace be maintained across parachains? + + * Can XCM be used to enable cross-chain NFT domain trading and transfers? + + * Are domain/NFT assets stored on a single chain only? Or, if they are stored on multiple chains how are they tracked on the other ones accordingly? + + * What ink! NFT standard can be used for the best compatibility across the XCM ecosystem? Should a new one be proposed? + + * Can XCM enable smart contracts to access the metadata storage field of our domains regardless of where the smart contract is deployed, and the NFT domain is stored? + + * What general security implications must be considered when building a cross-chain domain system with XCM? + + * What happens if a domain is updated on one chain while it is being used to transfer assets on another chain at the same time? What kind of other race conditions could occur? + +- Methodology that will be applied: + + * Acquire in-depth knowledge about XCM from all available resources. + * Identify the design principles to consider while building an XCM-based dApp. + * Evaluate different ways (like teleportation vs reservation) to accomplish a given task and identify its pros & cons. + * Propose a plausible high-level architecture of a cross-chain domain service implemented in ink! and integrated with XCM. + +- Expected results and how they would be double-checked by the grants team (reproducibility of the data analysis): + + * The first milestone will yield a report on our analysis of XCM and list potential domain integration options without assessing their feasibility. + * The second milestone that concludes the scope of this research project delivers a detailed assessment of the potential ways to integrate XCM and proposes a high-level architecture of a cross-chain DNS using XCM. + +- Intended venue for results publication and the timeline for publication: + + * The results will be published for public access in the form of a Litepaper, and a reference is submitted to the `w3f/Grant-Milestone-Delivery`. Additionally, we plan to communicate the results in a dedicated blog post & our social channels. + +- What your project is _not_ or will _not_ provide or implement + + * This project's scope does not include any form of the actual development of the proposed solutions in the final deliverable. The development of a PoC and, moreover, production-ready implementation could be subject to follow-on grants. Though, we'll provide a technical deliverable in the form of a public repository that showcases some sample cross-chain contract interactions with ink! & XCM (see Milestone 2). + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + + * Our project aims to become the standard for on-chain domains on Polkadot, Kusama, and any Substrate chain such as Aleph Zero. Our protocol and NFT domains are developed with ink! and therefore prepared for the future of WASM-based smart contracts on Substrate. + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + + * There are different target audiences for our NFT domains. First and foremost, our domains target any user on Substrate chains. On-chain domains are the first step in establishing an on-chain identity and improving the UX for on-chain interactions. Second, our project addresses all wallet providers as well as dApp/UI & parachain developers who are interested in implementing the user's on-chain domains. + +- What need(s) does your project meet? + + * Having a unified NFT domain standard on the smart contract level that works across all Substrate chains and is natively developed with ink!. + * Improving the user experience for all Polkadot/Kusama and Substrate chain users + * Attracting more users to Polkadot/Kusama and Substrate chains + * Improving the security for Polkadot/Kusama/Substrate users by preventing address poisoning and other wallet address-related phishing attacks + * Reducing the likelihood of losing funds by error-prone handling of wallet addresses while transferring assets + * Demonstrating the capabilities of Substrate's user-facing application layer with great UX & Frontend. + +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + + * Polkadot Name Service + * ASTR Domains (Astar Domains Service) + +- If so, how is your project different? + + * We are developing the very first sophisticated NFT domain name service fully written in ink!. Moreover, we are focusing on creating a standard that works across the whole Polkadot/Kusama ecosystem by integrating XCM. Our NFT domains include some unique functionalities, such as a flexible metadata storage field that enables the attachment of any kind of metadata to the domain. Further, we deliberately focus on crafting great user-facing applications with unmatched UX in the space of decentralized domain name services. + + +## Team :busts_in_silhouette: + +### Team members + +- Name of team leader + + * Dennis Zollmann + +- Names of team members + + * Mike Schneider + * Nimish Agrawal + + +### Contact + +- **Contact Name:** Mike Schneider +- **Contact Email:** hello@scio.xyz +- **Website:** https://scio.xyz + +### Legal Structure + +- **Registered Address:** Am Neuen Markt 9 E-F, 14467 Potsdam, Germany +- **Registered Legal Entity:** Scio Labs UG (haftungsbeschränkt) + +### Team's experience + +**Dennis Zollmann** +- B.Sc. Computer Science, Friedrich Schiller University Jena +- 10+ years of experience in writing professional software +- Serial hackathon winner (EthAmsterdam, EthCC Paris, EthBerlin, EthWarsaw) +- Successfully worked on grants by AAVE, The Graph, Toucan Protocol, and Aleph Zero +- Co-Founder of [Scio Labs](https://scio.xyz) & [AZERO.ID](https://azero.id) + +**Nimish Agrawal** +- B.Sc. Computer Science, Indian Insitute of Information Technology +- Prev. Rust/Substrate Developer @Laguna Labs & Core Developer @Nethermind +- Serial hackathon winner (DotGlobal, ETHIndia, Polkadot APAC, Polkadot LATAM, Avalanche Developer Contest, etc. ) +- International Algorithmic computational research challenge - PACE winner +- Experience building WASM contracts, e.g., AMM, P2E gaming platform, fractional/dynamic NFTs & more. + +**Mike Schneider** +- B.Sc. Management & Economics and M.Sc. Finance, EBS University +- Hackathon winner @EthWarsaw & grant received from Aleph Zero +- Prev. worked in Venture Capital & Venture Building +- Experience in researching web3 business models, token economics, and technologies +- Co-Founder of [Scio Labs](https://scio.xyz) & [AZERO.ID](https://azero.id) + +### Team Code Repos + +- https://github.com/scio-labs +- https://github.com/azero-id +- https://github.com/wottpal +- https://github.com/realnimish + +### Team Twitter Profiles + +- https://twitter.com/dennis_zoma +- https://twitter.com/mike1third +- https://twitter.com/realnimish + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/dennis-zoma/ +- https://www.linkedin.com/in/realnimish/ +- https://www.linkedin.com/in/mike1third/ + +## Development Status :open_book: + +- https://medium.com/@azero-domains +- https://github.com/wottpal/azero.domains (hackathon project) +- https://azero.id (soon to be relaunched) +- https://github.com/azero-id/ (most repositories are still in stealth, but soon to be open-sourced) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1,5 FTE +- **Total Costs:** 30,000 USD + +### Milestone 1 — XCM & Integration Research + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 10,000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | GPLv3 | +| **0b.** | Documentation/Tutorial | We will document the entire research process | +| **0c.** | Methodology | Research XCM and derive potential integration paths | +| **0d.** | Article | We will provide a report summarizing our research on XCM and giving an overview of potential integration, paths including applicable answers to our initial research questions | +| 1. | List of resources regarding XCM, cross-chain domains/NFTs | We will provide a publicly accessible list of all sources we used for the research. | +| 2. | Information to be extracted from the resources | We will provide a breakdown of the most relevant information gathered. | +| 3. | Analysis procedures | With the information gathered above regarding XCM and our understanding of domain name services, we are going to describe potential integration verticals between both. The technical assessment and architectural explorations will be conducted in the next milestone. | + + +### Milestone 2 — Technical Assessments & Architecture Proposal + +- **Estimated Duration:** 1 month +- **FTE:** 2 +- **Costs:** 20,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | GPLV3 | +| **0b.** | Documentation/Tutorial | We will document the entire research process | +| **0c.** | Methodology | Perform technical assessment of the integration paths derived in Milestone 1 and propose a technical architecture of an XCM-based domain name service | +| **0d.** | Article | We will provide a report summarizing our assessments and will propose a high-level technical architecture of the favored solution(s) | +| 1. | Technical Assessments | We will reiterate the proposed integration options from Milestone 1 and assess their technical feasibility. | +| 2. | Architecture | Based on the assessments, we'll propose a feasible architecture for an XCM-based domain name service standard incl. sequence diagrams of the more complex cross-chain interactions, function interface definitions, and also some pseudocode-like implementations of interesting parts. This might include suggestions regarding further XCM/ink! developments or the necessity for certain new standards. Also, a separate PSP/PPP standard could be derived and then implemented in future efforts. | +| 3. | Technical Deliverable (pallet-contracts-xcm) | We'll supply a Dockerfile starting up two Substrate nodes being able to exchange XCM-messages via ink! & [pallet-contracts-xcm](https://github.com/paritytech/pallet-contracts-xcm). In the latter we're going to resolve issues [#6](https://github.com/paritytech/pallet-contracts-xcm/issues/6) & [#7](https://github.com/paritytech/pallet-contracts-xcm/issues/7) in a fork. | +| 4. | Technical Deliverable (ink!) | With 1-2 ink! smart contracts (depending on the assessed techniques from the preceding research items), we'll develop a simplified address-to-domain mapping that can be registered across these two nodes and maintains a unique namespace. | + + +## Future Plans + +- We plan to leverage the outcome of this research grant to develop this very XCM-based domain name service for the Dotsama & Substrate ecosystem and set the new standard for on-chain domains on Polkadot and Kusama. As mentioned above, this could also mean deriving a new Polkadot Standards Proposal (PSP) from this. +- We will be working together with Parachain-, wallet-, and dApp-teams to foster the adoption of our domains and create value and utility via integrations for the users. +- We envision the project to translate into a fully community-owned DAO with on-chain governance. With social consensus, we will develop AZERO.ID and its upcoming XCM-enhanced counterpart to become core pillars for on-chain identity. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc. +Recommended from several sources and contacts in the Dotsama ecosystem. + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +The initial development and audit of the first version of the AZERO.ID platform has been financed via a grant from the Aleph Zero Foundation. AZERO.ID (via Scio Labs) is a member of the [Aleph Zero Ecosystem Funding Program](https://alephzero.org/ecosystem-funding-program). The project has not yet received any additional grant funding beyond that. \ No newline at end of file From 4f0c729094b8a28b05a82e5ba52dabb6679d46a2 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 17 May 2023 15:33:33 -0300 Subject: [PATCH 347/665] Update index.md to check diffy messenger first delivery (#1747) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 92ed6993f06..20a6fb09720 100644 --- a/applications/index.md +++ b/applications/index.md @@ -99,7 +99,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | -| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☐ | ☐ | +| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | From 964e6dc144ad0db654e2cfabe1d64b1318d2d17e Mon Sep 17 00:00:00 2001 From: Deep Ink Ventures <120174523+deep-ink-ventures@users.noreply.github.com> Date: Thu, 18 May 2023 19:35:13 +0200 Subject: [PATCH 348/665] Stylograph [GenesisDAO] (#1725) * Create Stylograph.md * Update Stylograph.md * Update Stylograph.md * Update Stylograph.md * Update Stylograph.md * added tech stack * Time update --------- Co-authored-by: x-xo <99559869+x-xo@users.noreply.github.com> --- applications/Stylograph.md | 206 +++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100644 applications/Stylograph.md diff --git a/applications/Stylograph.md b/applications/Stylograph.md new file mode 100644 index 00000000000..1d9f7c52261 --- /dev/null +++ b/applications/Stylograph.md @@ -0,0 +1,206 @@ + +# Pallet Stylograph + +- **Team Name:** GenesisDAO by Deep Ink Ventures GmbH +- **Payment Address:** Ethereum Mainnet, 0x918a4363C35156c8F85F86795a79189e5A1ef557, USDC +- **Level:** 3 + +## Overview + +> **Stylograph** [ stahy-luh-graf, -grahf ] +> +> *A writing instrument for applying ink to paper.* + + +Stylograph is a framework aimed at enhancing the functionality of substrate-based chains in the Polkadot ecosystem with plugin-like functionality. + +By using the ink! programming language, third party developers can extend the core functionality, while focussing on the domain logic. + +The total ask for this proposal is $100,000 and it is planned to have a subsequent development to use this functionality within Genesis DAO (see the last grant, [future plans section](https://github.com/w3f/Grants-Program/blob/master/applications/GenesisDAO.md#future-plans)). + + +## Project Details + +### Introduction +A group of people surrounding Ken Thompson and Dennis Ritchie were quite busy at Bell Laboratories shaping the world as we know it today. They invented a milestone in programming languages — C, the breakthrough operational system Unix, the first shell, UTF-8 and a long list of others that alone would have been enough to receive a Turing award. + +How were they so productive? Of course, the density of talent at Bell Labs was as high as within the Beatles (before John married) — but one tiny detail helped drive them. And that can be summed up in one word: focus. Finding out what holds the application together in its innermost folds and excelling at that. It takes writing programs that do one thing and do it well. Today, this set of guiding principles is popularly known as the Unix philosophy. + +This fundamental building block of system design is what guides Substrate development today. The Polkadot ecosystem is a set of domain-specific chains that focus on building the infrastructure for the web3 universe. + +The ink! programming language can be run on Substrate chains, either as a [core value proposition](https://use.ink/how-it-works#use-case-1-smart-contracts-as-first-class-citizens) - with the chain being an ecosystem for protocols developed in ink! on top of it - or as [second class citizens](https://use.ink/how-it-works#use-case-2-smart-contracts-as-second-class-citizens) - with protocols being able to build on top of the domain logic. + +*Stylograph* introduces a third use-case by utilizing ink! as a configuration language to alter the domain specific language itself by introducing a simple and straightforward framework to inject loosely-coupled hook points into your pallets that will call smart contract functionality in registered contracts on the contracts pallet. + + +### Motivation +Deep Ink Ventures is building a system parachain for the Polkadot ecosystem that is building infrastructure for Decentralized Autonomous Organizations - Genesis DAO. + +At *Genesis DAO* we are committed to the Unix philosophy. + +We focus on the DAO management with the core components of creating and running DAOs, overseeing token issuance and DAO treasury and having a rock-solid proposal and voting infrastructure. + +However, DAOs can have small and granular requirements that do require small tweaks and adjustments. Sometimes on-top protocols like Yield Aggregators require additional functionality. Some of those changes may be deal breaking for technical use cases or legal reasons and therefore a hard requirement for newly founded DAOs. + +The core team ultimately has to decide what features are reasonably part of an unbloated core and there is no one-size-fits-all solution to a lot of problems. This is where Stylograph comes to the rescue. + +### Framework Components Overview + +The following is an overview of the architecture we build and is merely to sketch the scope and general concept. Implementation details may vary. + +#### pallet_stylograph +This pallet acts as an abstraction layer on top of pallet_contracts in order to conveniently create callback based implementations. + +The pallet will have initial support for *ink!*. The concept is easily extendable for other languages such as *Solidity* or *ask!* that can be added. + +![image](https://user-images.githubusercontent.com/120174523/236872194-471198c3-48d8-4acc-842b-0ac450929908.png) + + +Since Substrate does not know about the structure of smart contracts deployed in ink! beforehand, Substrate developers utilizing Stylograph need to register the function signature they want to support for callbacks. + +This is a one-liner in the chain specs: + +Stylograph is now aware of a function given by signature, function name or trait definition and knows its associated gas limit. + +![image](https://user-images.githubusercontent.com/120174523/236872381-418dacb9-e776-4f5f-af0a-1c133196c2dc.png) + +With the callback defined, the core developers now can add callback functions into their pallets that extension developers can utilize. + +For example, the function above may alter the original vote in order to come up with a more complex algorithm (and it is therefore valuable to carefully select the arguments for the callback function for extension developers to be flexible). + +An example might be something like this: + +![image](https://user-images.githubusercontent.com/120174523/236872439-2b1cc9aa-0a5f-4982-9fc2-723828e7cfb5.png) + + +The next part is the registration of extensions by accounts - the second argument given in the callback above. + +The Substrate node implementation can decide how they want to interpret this - e.g. if the extensions are per account or if the account represents an entity on the chain. The latter is true for _Genesis DAO_ where the account needs to be the owner of the DAO. Each DAO can register its own hookpoints to tweak the core to its needs. + +![image](https://user-images.githubusercontent.com/120174523/236872530-d4cd6aec-03f5-4221-8cd8-a67a2b04da5f.png) + + +The framework now has all the information at hand to execute a fully abstracted _pallet_contracts::bare_call _and to handle errors associated with it: + +1. The user calls the extrinsic of the implementing pallet. In the case of GenesisDAO that might be the _dao_votes_ pallet to intercept the voting process in order to alter the majority voting to a different decision system. +2. This pallet executes the callback that takes the information given from the _dao_votes_ panel and looks up the callback definitions registers. +3. It constructs a call to the ink! contract defined. + +![image](https://user-images.githubusercontent.com/120174523/236873188-5fc04a21-6d59-41c3-921a-37a8e2ece739.png) + +The gas fees are therefore called by the person utilizing the functionality - the user calling the initial extrinsic. + + +#### ink! Stylograph Facade Builder + +The aforementioned information is enough to automagically generate a full boilerplate contract as template that Substrate chain developers can use to deploy a sample contract and to write a macro that defines the interface that the runtime expects. + +This contract can be released to the extension developer community to use as a boilerplate template. They can as well import the trait for the contract to be sure that they are compatible with the specs defined by the runtime. + +![image](https://user-images.githubusercontent.com/120174523/236872845-248bc23e-a96b-4008-8e9e-6d6cf1756d35.png) + +We therefore are building a CLI tool to package a versioned ink! crate with installation steps and base documentation that can be published with a new runtime release of the chain to give protocol and extension developers a headstart to extension development. Both the chain and the contract will depend on those traits as dependency to identify the interface. + +![image](https://user-images.githubusercontent.com/120174523/236881416-f7d622dc-2993-4b84-99c3-4b1835970372.png) + +## Additional Development +As this is planned to be part of our to-be-planned-system-parachain, we are as well pushing the development of the main chain within this proposal. + +### Token Transfer +Currently we rely on wallet extensions and polkadot.js.org to transfer DAO tokens around that reside on Genesis DAO. We have a primitive frontend UI in our MVP but would like to expand this to a more user friendly interface. + +We have already created some designs to show the direction, but this would include full wireframes, designs + additions to our backend services and, of course, the dApp: + +![image](https://github.com/deep-ink-ventures/Grants-Program/assets/120174523/f5c0bdf2-1600-4264-bda5-75a7708c1459) + +## Council Management +We’ve already created the multisignature part of council and treasury management within our product / wireframe and design department and want to roll out a Gnosis Safe - Style interface for this as part of the treasury management. + +We are using pallet_multisig for this and currently council members need to go via polkadot.js.org, not the most user friendly interface in the world. + +This would again include the full wireframes, desings and code changes in the backend and frontend. We have already implemented the multisig part. + +![image](https://github.com/deep-ink-ventures/Grants-Program/assets/120174523/68608920-3a08-4658-bb84-2f1852b42053) + +## DAO Dashboard Add-On + +We are createing a few designs to make the DAO Dashboard more friendly and intuitive for users and want to do the frontend implementation as well as the respective adjustments to the APIs of our backend service. + +![image](https://github.com/deep-ink-ventures/Grants-Program/assets/120174523/3d1a5587-3bef-4d84-ad96-1a5c99c0d4c8) + + +## Ecosystem Fit + +While we have drafted this pallet with the next iteration of the Genesis DAO chain in mind ([here are some planned plugins and extensions for inspiration](https://docs.google.com/document/d/1yyEBa43plj-PzlrEnK6JT5CKqyvBDUrYiR1N6984fhk/edit#heading=h.nfot0twi37l)), the presented functionality is carefully abstracted into a reusable component system. + +Stylograph is to Substrate what plugins and and extensions were for CMS, Shops in web2 - a smooth way for third parties to extend the core functionality for a chain. It enables Substrate developers to concentrate on doing their domain logic well whilst their users and protocols building on top maximize flexibility and time-to-market. + +You can think of this as the inverse to chain extension. While chain extension gives plugins a way to interact with the underlying core logic, stylograph gives chain developers an easy framework to make their core extendable with plugins and extensions via smart contracts. They can be used by any chain that wants to have a growing extension ecosystem. + + + +## Team + +### Contact + +- **Contact Name:** Jakob Drzazga +- **Contact Email:** admin@deep-ink.ventures + +### Legal Structure + +- Deep Ink Ventures GmbH, registered with the commercial register at the local court of Berlin, HRB 247342 + + +## Development Roadmap + +### Overview + +- **Total Estimated Duration:** 4-5 month +- **Full-Time Equivalent (FTE):** 3-4 FTE +- **Total Costs:** $ 100,000 + + +## Development Status :open_book: + +The development will happen on https://github.com/deep-ink-ventures/genesis-dao-node as we test the functionality in a full chain, but the pallet will be released as it's own crate. + +## Development Roadmap :nut_and_bolt: +### Milestone 1 + +- **Estimated duration:** 3 month +- **FTE:** 3-4 +- **Costs:** 70,000 + +| Number | Deliverable | Specification | +| -----: |-----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a can integrate the pallet and start working with | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Benchmarking | We will provide benchmarking & weights for the pallet | +| **0e.** | State of the art Tech Stack | We will use next.js/react for all frontend components, python / django for the backend services and rust for developing the substrate components| +| 1. | Pallet Development | Develop the pallet as specified within the `pallet_stylograph` section above. | +| 2. | Frontend Integration: Dashboard Add-On | Develop full wireframes and designs + Frontend, Backend integration, deployed on https://genesis-dao.org. | +| 3. | Frontend Integration: Token Transfer | Develop full wireframes and designs + Frontend, Backend integration, deployed on https://genesis-dao.org. | + + + +### Milestone 2 + +- **Estimated Duration:** 2 month +- **FTE:** 3-4 +- **Costs:** 30,000 USD + + +| Number | Deliverable | Specification | +| -----: |------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a can integrate the pallet and start working with | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | State of the art Tech Stack | We will use next.js/react for all frontend components, python / django for the backend services and rust for developing the substrate components| +| 1. | Facade Builder | Develop the code generator for smart contracts as specified above in the `ink! Stylograph Facade Builder` section. | +| 2. | Refrence Implementation | We will provide a sample implementation alongside with `pallet_contracts` on the Genesis DAO test chain to demonstrate the functionality. | +| 3. | Frontend Integration: Councils Management | Develop full wireframes and designs + Frontend, Backend integration, deployed on https://genesis-dao.org. | + + +## Future Plans +Our future plan is to include (and therefore maintain and extend) this pallet within our Genesis DAO Chain. The exact game plan is laid out [here](https://docs.google.com/document/d/1yyEBa43plj-PzlrEnK6JT5CKqyvBDUrYiR1N6984fhk/edit). From 8d4abeb55cdc2b9477456df0dd640a29b4e01e6a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 19 May 2023 02:40:33 -0400 Subject: [PATCH 349/665] Update index.md (#1751) updated index to reflect Kuma Wallet name change. --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 20a6fb09720..a3bd4cff836 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Cross-chain Wallet - XCW](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | From f37a43566bf96c765701197a43be64bcca4aba4f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 19 May 2023 08:48:55 +0200 Subject: [PATCH 350/665] Update index.md Stylograph --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index a3bd4cff836..a962afea0b3 100644 --- a/applications/index.md +++ b/applications/index.md @@ -57,6 +57,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | [🔝](#menu) From 32640895837d6262e54bcccf2ca7aa2e72337635 Mon Sep 17 00:00:00 2001 From: Radhe Shyam Zeeve <98081359+radhe-zeeve@users.noreply.github.com> Date: Fri, 19 May 2023 12:50:05 +0530 Subject: [PATCH 351/665] Ink Playground IDE Improvements (#1731) * Create Zeeve_Parachain_deployment_zoombienet_testing_automation.md * Added mockups, technology stack and refine the deliverables as requested * url update for images * updated the milestones and grant scope * updated the milestones and grant scope * updated the milestones and grant scope * removing artical from 1st milestone * add ink playground ide improvements Signed-off-by: Jasti Sri Radhe Shyam --------- Signed-off-by: Jasti Sri Radhe Shyam Co-authored-by: gnv-zeeve <74914749+gnv-zeeve@users.noreply.github.com> Co-authored-by: arjun.chamyal --- .../ink-playground-ide-improvements.md | 154 ++++++++++++++++++ 1 file changed, 154 insertions(+) create mode 100644 applications/ink-playground-ide-improvements.md diff --git a/applications/ink-playground-ide-improvements.md b/applications/ink-playground-ide-improvements.md new file mode 100644 index 00000000000..0ef50586b16 --- /dev/null +++ b/applications/ink-playground-ide-improvements.md @@ -0,0 +1,154 @@ +# Ink Playground IDE Improvements Grant + +- **Team Name:** [Zeeve](https://www.zeeve.io) +- **Payment Address:** Ethereum (USDT/USDC) 0x5E1257E928aa42E3D0cd9E2A7537E37D108D811B +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Overview +The adoption of any technology depends on the accessibility and ease of use to both the maintainer and user, blockchain +or distributed ledger technologies are inherently a lot difficult to understand and maintain, so we have to build tools +to make the process much easier and painless. In the case of Polkadot's substrate based smart contract development we have +Ink! playground which helps smart contract developers to prototype and test it before deploying on the parachain in a +Sandboxed environment with having to do time-consuming setup of dependencies and also with ability to set up a local +environment to do development. + +## Project Details + +The community posed few challenges and issues to improve the Ink! Playground to keep up with the Ink's advancements and +have Ink's own docs with ability to execute the examples with multi version support, the following issues were proposed +by the Grant team to resolve: + +- [Support supplying ink! version in URL · Issue #427 · paritytech/ink-playground](https://github.com/paritytech/ink-playground/issues/427) +- [Update playground automatically upon new ink! release · Issue #197 · paritytech/ink-playground · GitHub](https://github.com/paritytech/ink-playground/issues/197) +- [Implement versioning for ink! playground · Issue #460 · paritytech/ink-playground · GitHub](https://github.com/paritytech/ink-playground/issues/460) +- [Support running code from crate docs · Issue #428 · paritytech/ink-playground · GitHub](https://github.com/paritytech/ink-playground/issues/428) + +The brief overview of the issue resolution: + +- **Dependency Versioning**: Provide an API and UI components to set dependency versions for the contract, which will + help developers to build for targeted systems and environments. +- Automated **Ink! Version upgrade** in Ink! Playground system when new Ink! Version releases. +- Ability to select **Ink! version** to compile the code in the IDE. +- In Ink! **Crate docs** code examples can be executed using the Ink! Playground backend with Ink! version support. + +Additionally, we would like to propose further enhancements to the Ink! Playground which will benefit the Polkadot community +by easing the development process with better Developer Experience. We are excited to work on the following enhancements +once we complete the aforementioned improvements and build upon to provide maintenance of the Ink! Playground. + +- **Local file system storage:** Use the local file system for contract storage which will help developers + to open and save the file without leaving the IDE. +- **Template contracts:** Provide contract templates similar to the Ethereum contract standards based on + the popular use cases. +- **Ability to run contract functions** based on the metadata generated for a contract, this + will help developers to prototype, test and debug the contracts faster. +- **Deploy contracts from the IDE:** Deploy the contracts to the remote contract execution environment by + providing the remote endpoint. +- **Recent contracts:** List all the recent contracts that were saved for faster access to previously edited + contracts. + +## Team :busts_in_silhouette: + +### Team members +- Ghan Vashishtha +- Sankalp Sharma +- Jasti Sri Radhe Shyam + +### Contact +- **Contact Name:** Ghan Vashishtha +- **Contact Email:** ghan@zeeve.io +- **Website:** www.zeeve.io + +### Legal Structure +- **Registered Address:** 1603 Capitol Ave Ste 310, Cheyenne 82001, WY +- **Registered Legal Entity:** Zeeve Inc. + +### Team's experience + +Founded by a team of experienced professionals and entrepreneurs from industry, Zeeve's co-founders +collectively have over 45+ years of experience in technology, product development, and various +business verticals. Zeeve has built an enterprise-grade no-code Blockchain Infrastructure Automation +platform that enables Enterprises, Blockchain Startups, Blockchain Consulting Companies and Web3 +Developers to deploy Blockchain nodes and Decentralized Apps within minutes, and manage them with +advanced analytics and real-time alerts. In June 2022, the Startup raised $2.65 Million in a Seed +Round from Leo Capital and Blu Ventures. It plans to deploy the funds towards product development, +augmenting the technology team and enhancing its reach among DApp developers and global corporations, +please consider visiting our prior [work](https://www.zeeve.io/platform). + +### Team Code Repos + +- https://github.com/Zeeve-App +- https://github.com/Zeeve-App/sawtooth-artifacts +- https://github.com/Zeeve-App/Zeeve-read-the-docs +- https://github.com/Zeeve-App/larch + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/ghan-vashishtha/ +- https://www.linkedin.com/in/sankalp-sharma-502008139/ +- https://www.linkedin.com/in/jastisriradheshyam/ + +## Development Status :open_book: + +Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps automation for Polkadot and other substrate chains, also created substrates based relay chains: + +- Automated Polkadot deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-polkadot-node/) +- Automated Kusama deployments including validator nodes, archive nodes [here](https://www.zeeve.io/blockchain-protocols/deploy-kusama-node/) +- Created a relay chain on substrate with some customizations done at the core to accommodate the tokenomics and custom reward mechanism [here](https://axscan.axiacoin.network/#/explorer) +- Published a [blog post](https://www.zeeve.io/blog/how-to-use-substrate-to-create-parachains-in-polkadot/) about the usage and implementation of parachain's +- The focus for Zeeve will be automating the parachain deployments, dedicated node setups and help with faster testing with zombie-net. +- Spoke with David Hawig, Richard Casey and Gautam Dhameja from the Parity team regarding the development of Zeeve and the Web3 Grant application +- Developed Larch, a UI for the Parity's Zombienet - [GitHub - Zeeve-App/larch](https://github.com/Zeeve-App/larch) + +## Development Road-map :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 100 working days +- **Full-Time Equivalent (FTE):** 3 FTE +- **Total Costs:** 24,000 USD. + +### Milestone 1 — Implement Ink's Dependency versioning + +- **Estimated duration:** 90 working days +- **FTE:** 3 +- **Costs:** 21,000 USD + +| Number | Deliverable | Specification | +| -----: | -------------- | ------------- | +| 0.a. | License | Apache-2.0 | +| 0.b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can open and save a file | +| 1. | On demand version specific compilation | We will add the ability to build the compiler environment if a compiler environment is not present with a specific version of Ink! | +| 2. | Dependency Version support | We will upgrade and maintain Ink! and `cargo-contract` dependencies versions up to date and have provision to have older version support | +| 3. | Ink! Upgrades | We will add the ability to add Playground's Ink! version support to latest version as soon as new version of Ink! is released without manual intervention | +| 4. | Select Ink! version from UI | We will add ability to select Ink!'s version from the IDE to compile | + +### Milestone 2 - Ink! crate docs code execution + +- **Estimated duration:** 10 working days +- **FTE:** 3 +- **Costs:** 3000 USD + +| Number | Deliverable | Specification | +| -----: | -------------- | ------------- | +| 0.a. | License | Apache-2.0 | +| 0.b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can open and save a file | +| 1. | Ink! Create docs | We will provide the API and update create docs to run the code examples | + +## Technology Stack + +- Javascript +- CSS +- HTML +- Typescript +- Rust +- Docker + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Parity team / a conversation with Richard Casey. + +### References: + +[1]: [What is Parity's ink!? | Parity Technologies](https://www.parity.io/blog/what-is-paritys-ink) + +[2]: [ink/ARCHITECTURE.md at master · paritytech/ink · GitHub](https://github.com/paritytech/ink/blob/master/ARCHITECTURE.md) From 00d2e62ffdc8cd2d2b8398b14f28aaec4f9ae48d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 19 May 2023 09:21:48 +0200 Subject: [PATCH 352/665] Update index.md Ink Playground IDE Improvements --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a962afea0b3..cb755c6ca39 100644 --- a/applications/index.md +++ b/applications/index.md @@ -58,7 +58,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | - +| [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | [🔝](#menu) From d2c76aaff62de0f8134a5f67b286948813f74158 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 19 May 2023 09:41:15 +0200 Subject: [PATCH 353/665] Update index.md XCM Domain Name Service --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index cb755c6ca39..e61eb2932ad 100644 --- a/applications/index.md +++ b/applications/index.md @@ -59,6 +59,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | [🔝](#menu) From 263e51a6d61e4c51151d95f7e14709237dd4fcee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 19 May 2023 13:55:34 +0200 Subject: [PATCH 354/665] Update and rename alternative-polkadot-js-api-console.md to alternative-polkadot-js-api-console.md --- .../alternative-polkadot-js-api-console.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/RFPs/{Open => Under Development}/alternative-polkadot-js-api-console.md (96%) diff --git a/docs/RFPs/Open/alternative-polkadot-js-api-console.md b/docs/RFPs/Under Development/alternative-polkadot-js-api-console.md similarity index 96% rename from docs/RFPs/Open/alternative-polkadot-js-api-console.md rename to docs/RFPs/Under Development/alternative-polkadot-js-api-console.md index b6be07084b4..fb2017b4f2c 100644 --- a/docs/RFPs/Open/alternative-polkadot-js-api-console.md +++ b/docs/RFPs/Under Development/alternative-polkadot-js-api-console.md @@ -1,6 +1,6 @@ # Alternative javascript console for Polkadot JS API -* **Status:** Open (anyone is allowed to apply) +* **Status:** [Under Development](https://w3f.github.io/Grants-Program/applications/sandox) * **Proposer:** [muddlebee](https://github.com/muddlebee) * **Projects you think this work could be useful for** [optional]: Javascript console at https://polkadot.js.org/apps/#/js From 393230382d9bb9c1fb37ce090e5daa7931ea91ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 19 May 2023 13:56:17 +0200 Subject: [PATCH 355/665] Update rfps.md --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index e1d63e1c666..464c776ce82 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -69,7 +69,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | | [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | -| [alternative-polkadot-js-api-console.md](RFPs/Open/alternative-polkadot-js-api-console.md) | 🟢 | 16.02.2023 | +| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 🟡 | 19.05.2023 | ## 📬 Suggest an RFP From a6a0aa5d4c909b625a0dc001752e97ffe63f43d7 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 19 May 2023 09:07:27 -0300 Subject: [PATCH 356/665] Update index.md (#1752) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e61eb2932ad..be5927fb5b2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -360,7 +360,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ruby Protocol](http://rubyprotocol.com/) | [Cryptographic Infrastructure for Data Monetization](./RubyProtocol.md) | [GitHub](https://github.com/Ruby-Protocol) | ☐ | ☒ | ☒ | | [Find Signal Studio PTE. LTD.](https://yieldscan.app/) | [YieldScan Phase 2](./yieldscan_phase_2.md) | [GitHub](https://github.com/yieldscan) | ☐ | ☒ | ☒ | | [PolkaMusic](https://polkamusic.io/) | [Operating decentralized music businesses on blockchain](./polkamusic.md) | [GitHub](https://github.com/polkamusic/PolkaMusic) | ☐ | ☒ | ☐ | -| [element36](https://element36.io) | [FIAT on-off-ramp](./FIAT-on-off-ramp.md) | [GitHub](https://github.com/element36-io) | ☐ | ☒ | ☐ | +| [element36](https://element36.io) | [FIAT on-off-ramp](./FIAT-on-off-ramp.md) | [GitHub](https://github.com/element36-io) | ☐ | ☒ | ☒ | | [Zondax](https://zondax.ch/) | Ledger Asset App | [GitHub](https://github.com/Zondax) | ☐ | ☒ | ☒ | | [Moonbeam Network](https://moonbeam.network/) | [Pallet-dPoS for Parachain Staking](./parachain-staking.md) | [GitHub](https://github.com/PureStake/moonbeam) | ☐ | ☒ | ☒ | | [Dora Factory](https://dorafactory.org/) | [MolochDAO substrate pallets v1 and v2](./dora-factory-molochdao-v1-v2.md) | [GitHub](https://github.com/DoraFactory) | ☐ | ☒ | ☐ | From 1a9e9efc1db74dc4458f15f854c89c6624b29488 Mon Sep 17 00:00:00 2001 From: Mia Barbir <49414517+miabarbir@users.noreply.github.com> Date: Fri, 19 May 2023 15:24:34 +0200 Subject: [PATCH 357/665] Update url and baseUrl config (#1754) --- docusaurus.config.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index d967c998564..01a82ffdaad 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -6,8 +6,8 @@ const mdxMermaid = require('mdx-mermaid'); module.exports = { title: 'Web3 Foundation Grants', tagline: 'Funding Software Development and Research Efforts related to Polkadot and Kusama.', - url: 'https://w3f.github.io', - baseUrl: '/Grants-Program/', + url: 'https://grants.web3.foundation', + baseUrl: '/', onBrokenLinks: 'warn', // Revert back to 'throw' once initial release is up onBrokenMarkdownLinks: 'warn', favicon: 'img/favicon-32x32.png', From c190cc632bf9c8ba652fd4c2b69cf50a870609de Mon Sep 17 00:00:00 2001 From: Mia Barbir <49414517+miabarbir@users.noreply.github.com> Date: Fri, 19 May 2023 15:39:30 +0200 Subject: [PATCH 358/665] Add CNAME (#1755) --- CNAME | 1 + 1 file changed, 1 insertion(+) create mode 100644 CNAME diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..02abf4f1322 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +grants.web3.foundation From c9583795f60262efc117853747ab9f11f4610c73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 19 May 2023 15:57:07 +0200 Subject: [PATCH 359/665] Move CNAME to static/CNAME --- CNAME => static/CNAME | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CNAME => static/CNAME (100%) diff --git a/CNAME b/static/CNAME similarity index 100% rename from CNAME rename to static/CNAME From 75d6375e9fc059cb850fc7f43da6a181ea179039 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sat, 20 May 2023 02:22:57 -0400 Subject: [PATCH 360/665] Update index.md (#1757) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index be5927fb5b2..53506bdfd95 100644 --- a/applications/index.md +++ b/applications/index.md @@ -104,7 +104,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | -| [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☐ | ☐ | +| [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | From a8719b1aadba4c3bdec37d16d55b6d6ff3b503a7 Mon Sep 17 00:00:00 2001 From: Sebastian Miasojed Date: Sun, 21 May 2023 14:44:15 +0200 Subject: [PATCH 361/665] Contracts performance measurement tool proposal (#1750) * Contracts performance measurement tool project proposal * Fixed missing field: team name added * Updated items numbering and added estimations in weeks * Updated item numbers --- applications/contracts-tool.md | 187 +++++++++++++++++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 applications/contracts-tool.md diff --git a/applications/contracts-tool.md b/applications/contracts-tool.md new file mode 100644 index 00000000000..77d17339ada --- /dev/null +++ b/applications/contracts-tool.md @@ -0,0 +1,187 @@ +# Contracts performance messurement tool + +- **Team Name:** Gloslab +- **Payment Address:** Fiat 18.05.2023, 20:22 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +The key objective of this grant is to build a tool which allows to compare contracts performance and to track its regressions. +Subject of comparison are solidity, and ink! contracts running on parachains (pallet-contract and pallet-evm). +Tool will be integrated with CI and running each night, generating measurements data and providing its visualizations. + +Our team has strong interest in contracts development on Polkadot and building Polkadot ecosystem. + +### Project Details + +#### Generating benchmarking results + +Project is based on smart-bench Parity repo https://github.com/paritytech/smart-bench and developed in rust language. +Apart of existing ink! and solidity contracts support, will be introduces support for solang compiled contract running on pallet-contract. +Finally the tool will measure performance of: +- Ink! contract run on pallet-contract (currently supported) +- Solidity contracts compiled with solc run on pallet-evm (supported but outdated) +- Solidity contracts compiled with solang and run on pallet-contract (new functionality) + +The tool is run with following command: +``` +smart-bench [OPTIONS] --instance-count --call-count [CONTRACTS] --url +``` +where as a type can be used ink-wasm, sol-wasm or evm + +example: +``` +smart-bench ink-wasm erc20 erc1155 --instance-count 10 --call-count 20 --url ws://localhost:9988 +smart-bench sol-wasm erc20 erc1155 --instance-count 10 --call-count 20 --url ws://localhost:9988 +smart-bench evm erc20 erc1155 --instance-count 10 --call-count 20 --url ws://localhost:9988 +``` + +The performance measurements are run against test network, which will be setup using Zombienet. +Required scripts, which spins network and run smart-bench, will be delivered with the tool. +Smart bench collects following stats: +``` +Block number +PoV size +Block Weight - reference time and proof size +Witness +Block size +Number of extrinsics processed in block +``` + +#### Integrating Smart-bench with CI/CD + +Architecture for performance tracking tooling is built upon the concept of [Flat Data](https://githubnext.com/projects/flat-data), whereas sets of data is stored within repository itself. Data is being created and processed for storage on a timely schedule. + +Github repository used in this architecture is self sufficient in terms of spinning up benchmarking environment, storing and processing benchmark results created within run of Github Action workflow. Repository contains all configuration files required for provisioning of benchmarking environment. Other provided utilities also allow to effortlessly start local Grafana and InfluxDB instances (available as Dockerfiles and Docker Compose configuration) for out of the box experience of running visualizations against data where all of this is part of the same repository. For syncing of most recent data standard git operations apply (sync local git repository with remote origin to get latest data). + +Github Action is responsible for running smart-bench software against Zombienet to create benchmarking results. Results are then post-processed to also include various metadata about environment used for its creation. Results are then committed and pushed to the repository. Metadata of benchmark results consists of various properties such as (consider following as draft, to be defined exactly as implementation proceeds): + +- Commit hashes of Zombienet, parachain implementation (Moonbeam or contract-pallet based) and smart-bench +- Human readable versions of above if can be determined +- Type of contract +- Contract compiler +- Parachain to run the contract + +Measurements themselves are raw data as returned by smart-bench software. + +Performance tracking is concerned with Moonbeam and pallet-contracts. Coverage of the benchmarks strives to create results for binary release of parachains. So for every binary release of parachain, results will be created and stored in the repository. + +Summary of items provided by repository: +- Dockerfiles to run grafana, influxdb, smart-bench +- Docker Compose to ease local setup of all components +- Scripts to transform smart-bench output to data format ingestible by InfluxDB +- Scripts uploading data to InfluxDB will try to parse benchmarking data from smart-bench provided format and accompany them with metadata to create contexts for visualizations. Repository will also provide configuration files for dashboards of Grafana + +The Grafana dashboard provided offers a comprehensive regression detection feature, enabling the visualization of performance comparisons between Ink! and pallet-contracts against Solidity and Moonbeam. The dashboard prominently displays the contracts' throughput as a key metric, calculated individually for each contract type. The graph within the dashboard showcases the temporal dimension on the X-axis, representing dates, while the Y-axis represents the throughput. This graph comprises three distinct data series, each corresponding to one of the contract types. The graph's are preserved as PNG dumps and stored in the repository. + +Limitations: +the project does not compile the contracts by itself, contracts are delivered in binary form. + + +### Ecosystem Fit + +The project is useful for ecosystem at contracts development stage to track its performance and regressions on Polkadot. +It is going to be used also to measure ink! language performance by Parity core team. + +## Team :busts_in_silhouette: + +### Team members + +- Sebastian Miasojed +- Karol Kokoszka + +### Contact + +- **Contact Name:** Sebastian Miasojed +- **Contact Email:** s.miasojed@gmail.com +- **Website:** + +### Legal Structure + +- **Registered Address:** Racula-Janusza Korczaka 15B, 66-004 Zielona Góra, Poland, NIP:5961572852 +- **Registered Legal Entity:** Gloslab Sebastian Miasojed + +### Team's experience + +We combine development and architecting skills from embedded world, cloud systems and apply them to crypto world. +Until now the team has shown his proficiency aligning smart-bench with newest libraries required by ink! contracts. +- https://github.com/paritytech/smart-bench/pull/32 +- https://github.com/paritytech/smart-bench/pull/31 +- https://github.com/paritytech/smart-bench/pull/28 +- https://github.com/paritytech/blockstats/pull/22 + +### Team Code Repos + +- https://github.com/smiasojed +- https://github.com/karolk91 + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/sebastian-miasojed-83b6123 +- https://www.linkedin.com/in/karol-kokoszka-a66959103 + + +## Development Status :open_book: + +Work has been started, smart bench has been updated with new libraries and is able to build and run on test net with ink! contracts. +- https://github.com/paritytech/smart-bench/pull/32 +- https://github.com/paritytech/smart-bench/pull/31 +- https://github.com/paritytech/smart-bench/pull/28 +- https://github.com/paritytech/blockstats/pull/22 + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 0.5 +- **Total Costs:** 15000 EUR + +### Milestone 1 Smart-bench updated — Basic functionality + +- **Estimated duration:** 5 weeks +- **FTE:** 0.5 +- **Costs:** 6500 EUR + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up test net and run contracts with transactions. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Create Docker and docker-compose related configurations to build and start smart-bench, Zombienet and parachains to generate benchmarking results. | +| 1. | Updated evm contracts | We will update tool with support for newest Moonbeam parachain. | +| 2. | Support for solidity-wasm contracts | We will deliver support for solidity contract compiled with solang to wasm. | +| 3. | Launch scripts | Scripts which will allow to launch the tool on Zombienet. | + + +### Milestone Smart-bench in CI/CD flow — Additional features + +- **Estimated Duration:** 7 weeks +- **FTE:** 0,5 +- **Costs:** 8500 EUR + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the performance tracking tooling to generate the graphs. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Create Docker and docker-compose related configurations to run Grafana and InfluxDB pre-configured with dashboards and measurements. | +| 0e. | Article | We will publish article on Medium that explains what was done/achieved as part of the grant. | +| 1. | Github Actions benchmark jobs | Create workflow and implement a job to utilize Dockerized benchmarking for generating results and uploading them to repository. | +| 2. | Results processing tools | Implementation of tooling to translate smart-bench output format to format of InfluxDB. | +| 3. | Github Actions workflow | Create complete workflow running parallel jobs based on matrix strategy for all missing measurements. | + + +... + + +## Future Plans + +We are going to promote the project writing article and involve other developers to maintain it in the future + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Parity team + From c7aa0d51e25543ac611be93cf79f0944d13de953 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sun, 21 May 2023 14:47:14 +0200 Subject: [PATCH 362/665] Update index.md Contracts performance measurement tool proposal --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 53506bdfd95..70efbc3ed28 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,6 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | +| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | [🔝](#menu) From 6c310036715d30c0e59ef47dee79a15447c3cebd Mon Sep 17 00:00:00 2001 From: Nikita Orlov Date: Mon, 22 May 2023 13:27:11 +0200 Subject: [PATCH 363/665] Create faucet chat based bot (#1758) * Create faucet bot chat based bot * Update faucet-bot * update faucet-bot * Update faucet-bot.md * Update faucet-bot.md * Update applications/faucet-bot.md --------- Co-authored-by: S E R A Y A --- applications/faucet-bot.md | 115 +++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 applications/faucet-bot.md diff --git a/applications/faucet-bot.md b/applications/faucet-bot.md new file mode 100644 index 00000000000..7eae5dd80c5 --- /dev/null +++ b/applications/faucet-bot.md @@ -0,0 +1,115 @@ +# W3F Grant Proposal + +- **Project Name:** Generic sybil-resistant chat based faucet bot +- **Team Name:** Nikita Orlov PR +- **Payment Address:** 0x49F19FA78C4E766b8C5592e53CC35b1411a5E11f (USDC/DAI) +- **Level:** 1 + +## Project Overview + +### Overview + +Sybil-resistant faucet is a generic chat bot based faucet solution that can be used on any existing parachain (substrate-based chain, either pallets or ink! smart contracts). + +### Project Details + +#### Mockup + + bot that handle all messages like /request {wallet_public_address}, and trying to send tokens if it eligible + +#### Technology stack + +- Golang +- Redis +- Discord sdk (go) +- Matrix sdk (go) + +#### Architecture + +![architecture](https://raw.githubusercontent.com/StringNick/sybil-resistant-chat-bot-substrate-faucet/main/arch.png) + +#### Configuration + +To make the faucet generic, it will store its configuration settings in `.env` file which will include the following settings: + +- `DRIP_CAP` - how many tokens to send per request +- `DRIP_DELAY` - how often user's can request to drip tokens (in ms) +- `REDIS_ENDPOINT` - Redis instance endpoint +- `RPC_ENDPOINT` - Substrate node endpoint +- `FAUCET_ACCOUNT_MNEMONIC` - mnemonic of faucet's wallet + +Based on addons, it can be credentials for any platform, what will be used, in based version discord/matrix. + +### Ecosystem Fit + +Many dApps are facing an issue where it’s difficult to onboard new users. Thus, the goal is to simplify the process by making it easier for parachain and dApp developers to spin up their own faucets, and give users free tokens without people exploiting the system. In order to make the system sybil-resistant, centralised solutions like Discord, Matrix and any other chat based platforms, that will uniquely identify users, and enable requesting tokens to the account only once per given time period. + +Some similar projects include: +- https://github.com/paritytech/substrate-matrix-faucet +- https://github.com/OAXFoundation/substrate-faucet + +The advantages of this project are that similar projects are implemented specifically for one platform, this project will be implemented on the interface, and the platforms (Discord, matrix and etc) will be like addons (classes) that correspond to the interface, which will allow you to easily connect new platforms, do not depend on the implementation of platforms, will allow you to run unlimited number of platforms at the same time. + +That is, to integrate a new platform, you will need to implement an interface, and cybil resist, message processing and other functionality will already work out of the box. Also, the implementation of new functionality requires only a change in one point of code, if this does not affect the interface. + +## Team + +### Team members + +- Nikita Orlov + +### Contact + +- **Contact Name:** Nikita Orlov +- **Contact Email:** stringnickq@gmail.com +- **Matrix:** rozeme@matrix.org + +### Legal Structure + +- **Registered Address:** Jurija Gagarina 231, Beograd +- **Registered Legal Entity:** Nikita Orlov PR + +### Team's experience + +ETH Waterloo 2019 hackathon prize-winner, is a engineer with over 8 years of experience in development and integration of fault-tolerant high-loaded SaaS IT solutions including relevant experience in blockchain solutions. + +### Team Code Repos + +- * https://github.com/stringnick + +### Team LinkedIn Profiles + +- * https://www.linkedin.com/in/nikita-orlov-aa6910186/ + +## Development Roadmap + +### Overview + +- **Total Estimated Duration:** 1.5 month +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 7,500 USD + +### Milestone 1 — Implement the Faucet + +- **Estimated duration:** 1.5 month +- **FTE:** 1.5 +- **Costs:** 7,500 USD + +| Number | Deliverable | Specification | +| -----: | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | I will provide both **inline documentation** of the code and a **tutorial** that explains how a developer can spin up his/her own faucet. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| 0d. | Article | I will publish an **article** that explains how the faucet works, why it was created, and how it can be used by developers. | +| 1. | Universal message interface (UMI) | Implement golang interface (contract) to unify all chat providers to one standart, so we can easily use abstraction | +| 2. | Discord | Golang implementation of discord integration using open-source SDK, that support interface of UMI module | +| 3. | Matrix.org | So same as discord, golang module | +| 4. | Wallet status | Golang module that control user/wallet faucet drip, so user will be able to receive only once in a certain period of time | +| 5. | Faucet drip | Golang module that can send token to user wallet address on substrate based chain, RPC library to substrate chain through open-source library https://github.com/centrifuge/go-substrate-rpc-client | +| 6. | Substrate demo | Implement demo example on substrate template node | + +## Future Plans + +- Keep adding another chat providers. +- Keep maintaining the project in case of potential issues. +- Analytics for owner with dashboard UI. From 4a7c188753dfd7670f2e3da4e830b024fc0ed1de Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 22 May 2023 13:29:26 +0200 Subject: [PATCH 364/665] Update index.md Faucet chat based bot --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 70efbc3ed28..df621736930 100644 --- a/applications/index.md +++ b/applications/index.md @@ -61,6 +61,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | +| [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | [🔝](#menu) From 973305e34684ab0999f91592b4589858569b4508 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 22 May 2023 13:50:11 +0200 Subject: [PATCH 365/665] Update faucet-bot.md Fix H1 --- applications/faucet-bot.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/applications/faucet-bot.md b/applications/faucet-bot.md index 7eae5dd80c5..d2f1aa7c26f 100644 --- a/applications/faucet-bot.md +++ b/applications/faucet-bot.md @@ -1,6 +1,5 @@ -# W3F Grant Proposal +# Generic sybil-resistant chat based faucet bot -- **Project Name:** Generic sybil-resistant chat based faucet bot - **Team Name:** Nikita Orlov PR - **Payment Address:** 0x49F19FA78C4E766b8C5592e53CC35b1411a5E11f (USDC/DAI) - **Level:** 1 From a3e4544e90ccbc5565fe83690f82a4e8c8c56d7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 23 May 2023 11:16:04 +0200 Subject: [PATCH 366/665] Change website announcement bar --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 01a82ffdaad..4eaf0628243 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -28,7 +28,7 @@ module.exports = { announcementBar: { id: 'announcement', content: - 'Check out our current job openings!', + 'Check out our 500 GRANTS blogpost!', backgroundColor: '#000', textColor: '#ffffff', isCloseable: true, From cb9a7a82f2b3fde3db193be28520eac5b03cfa36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 24 May 2023 12:02:24 +0200 Subject: [PATCH 367/665] Update delivery guidelines phrasing (#1761) --- .../milestone-deliverables-guidelines.md | 55 +++++++++++-------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/docs/Support Docs/milestone-deliverables-guidelines.md b/docs/Support Docs/milestone-deliverables-guidelines.md index 3b82106f770..b573c40cedd 100644 --- a/docs/Support Docs/milestone-deliverables-guidelines.md +++ b/docs/Support Docs/milestone-deliverables-guidelines.md @@ -4,11 +4,11 @@ These are the guidelines to be followed for milestones submitted for evaluation. ## Submission -Please submit all your milestones via PR to the [Grant Milestone Delivery repository](https://github.com/w3f/Grant-Milestone-Delivery). +Unless instructed otherwise, please submit all your milestones via PR to the [Grant Milestone Delivery repository](https://github.com/w3f/Grant-Milestone-Delivery). ## Invoice -Although a milestone needs to be reviewed and accepted, you can already submit your invoice through [this form](https://docs.google.com/forms/d/e/1FAIpQLSfmNYaoCgrxyhzgoKQ0ynQvnNRoTmgApz9NrMp-hd8mhIiO0A/viewform). +Although a milestone needs to be reviewed and accepted, you can submit your invoice alongside your delivery pull request through [this form](https://docs.google.com/forms/d/e/1FAIpQLSfmNYaoCgrxyhzgoKQ0ynQvnNRoTmgApz9NrMp-hd8mhIiO0A/viewform). ## Content @@ -23,12 +23,18 @@ The submission should contain the following information: - **A list of the [milestone deliverables](#milestone-deliverables)** - **Any [additional information](#additional-information)** -## License +### License -In order to successfully receive grant funding for your application it is necessary for the project to have open source code. -We prefer Apache 2.0, but MIT or Unlicense are also acceptable. If your delivery comprises multiple repositories, make sure to include the license for each of them. +Since all code developed under a grant must be open source, it is necessary to publish your code under an appropriate license. This license should already be defined in your grant application, but if you're unsure, check the [Open Source Initiative database](https://opensource.org/licenses) for available licenses. We prefer Apache 2.0, but MIT or Unlicense are also acceptable. +If your delivery comprises multiple repositories, make sure to include the license in each of them. -## Documentation +:::danger + +You should also verify that the code you submit doesn't violate any other licenses, as a failure to comply with the license of reused code will result in an immediate rejection of the milestone and termination of the grant. + +::: + +### Documentation We value high-quality open source code, but even the most performant code is of little use if it lacks proper documentation. @@ -39,14 +45,13 @@ We require that you document (where applicable): - Algorithms and protocols that are core to your project - Any other fundamental building blocks to your technology -Unless absolutely necessary, make the documentation public as well, ideally as part of the appropriate code repository. This will make it easier for the community to use or adapt your project. +Unless absolutely necessary, make the documentation public as well, ideally as part of the appropriate code repository. This will make it easier for the community to contribute to and use your project. -**Note**: Only focus on your **own** contributions. Do not write detailed explanations of already existing components, e.g. IPFS. +**Note**: Only focus on your **own** contributions. Do not write detailed explanations of already existing components, including Substrate, ink!, or IPFS. -## Formatted code +### Formatted code -A codebase that is easy to read is also easy to use. We suggest adopting one style from Day 1 and adhering to it across the entire team. -This helps to keep the commit history clean and facilitates any reviews of the introduced changes. +A codebase that is easy to read is also easy to use. We suggest adopting one style from Day 1 and adhering to it across the entire team. This helps to keep the commit history clean and facilitates any reviews of the introduced changes. For **Substrate**, we strongly recommend formatting your code according to the [official guidelines](https://github.com/paritytech/substrate/blob/master/docs/STYLE_GUIDE.md). @@ -54,13 +59,13 @@ For **Rust**, we encourage formatting any additional support libraries or helper For **any other** deliveries, please commit to a particular style & let us know which official guidelines you adopt. -## Testing Guide +### Testing Guide We require that each milestone delivery includes a comprehensive test suite, consisting of: -### A step-by-step guide demonstrating how your code achieves the milestones +#### A step-by-step guide demonstrating how your code achieves the milestones -Please provide documentation on how to install, compile, run and test the deliverable(s). Make sure to include all necessary prerequisites. Common issues while replicating test results involve, among others, undocumented dependencies, version numbers, local database setups, breaking changes in the main branch since delivery, OS- and browser-specific incompatibilities. +Please provide documentation on how to install, compile, run and test the deliverable(s). Make sure to include all necessary prerequisites. Common issues while replicating test results involve, among others, undocumented dependencies and version numbers, local database setups, breaking changes in the main branch since delivery or OS- and browser-specific incompatibilities. Depending on the deliverable, this could include (but is not limited to) @@ -69,29 +74,31 @@ Depending on the deliverable, this could include (but is not limited to) - running your web app, and - steps to complete some desired action in your mobile app. -### Unit tests +#### Unit tests As with any quality software project, each logical code component should be testable. -### Integration tests - -We prefer dockerfiles to avoid problems with versions and dependencies. +#### Integration tests +We prefer `Dockerfile`s to avoid problems with versions and dependencies. **Note**: If you are not delivering code as part of your project, such a test suite is not applicable. This mainly applies to projects centering on design, research or hardware. If that is the case, please provide detailed instructions on how else we can test/run/replicate your deliverable. -## Milestone Deliverables +### Milestone Deliverables -Please provide a list of milestone deliverables. This list should closely reflect the list of deliverables agreed on in the Pull Request for the public **Grants Program** application or in Annex 1 of the grant contract for the private applications. +Please provide a list of milestone deliverables. This list should closely reflect the list of deliverables agreed on in the pull request for grant application (or in Annex 1 of the grant contract for the private applications). Each item in the list should include a link to the deliverable itself, e.g.: -- Google Doc link - make sure anyone with the link has View access -- GitHub repository - include the appropriate file/folder in the link +- a Google Doc/Medium/blog link (make sure anyone with the link has View access), +- a link to a file in a public repository (include the appropriate file/folder in the link), +- a link to a specific commit, pull request or issue in a public repository. + +:::tip **Please highlight anything that deviates from the contract** and include further information that you think is relevant to the deliverable, either alongside the appropriate deliverable or under [Additional Information](#additional-information). -Please ensure the repo has the correct open-source license. +::: | Number | Deliverable | Link | Notes | | ------------- | ------------- | ------------- | ------------- | @@ -101,6 +108,6 @@ Please ensure the repo has the correct open-source license. | 1. | ... | ... | ... | | 2. | ... | ... | ... | -## Additional Information +### Additional Information Please add any additional comments that you consider relevant for the evaluation. From 603ab0714be05835a72cc6e68b28dcc0f9709ec8 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 25 May 2023 03:31:59 -0300 Subject: [PATCH 368/665] Update index.md (#1763) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index df621736930..b9987a6924e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -102,7 +102,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☒ | ☐ | | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☐ | ☐ | +| [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☒ | ☒ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☐ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | From 6db3e56d273ceb04e7d867973aaa3bcaec3354e8 Mon Sep 17 00:00:00 2001 From: Graeme Fox <82609877+gfox1@users.noreply.github.com> Date: Thu, 25 May 2023 09:40:00 -0700 Subject: [PATCH 369/665] societal saas pricing grant (#1671) * societal grant * update to grant * Update applications/societal_saas_pricing.md Co-authored-by: S E R A Y A * Update applications/societal_saas_pricing.md Co-authored-by: S E R A Y A * uppdated cost --------- Co-authored-by: S E R A Y A --- applications/societal_saas_pricing.md | 179 ++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 applications/societal_saas_pricing.md diff --git a/applications/societal_saas_pricing.md b/applications/societal_saas_pricing.md new file mode 100644 index 00000000000..98f86824386 --- /dev/null +++ b/applications/societal_saas_pricing.md @@ -0,0 +1,179 @@ +# Societal + + +- **Team Name:** Societal Labs Ltd. +- **Payment Address:** Ethereum - USDC: 0xcDcCF94f10d8A7165C1A336DD3795430a6CDE530 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + + +## Project Overview :page_facing_up: +This is the third grant for the Societal Labs team, after the sucessful completion of two previous grants. + +- Previous Grant 1: [Societal.md](https://github.com/w3f/Grants-Program/pull/1249) +- Milestone 1 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/628) +- Milestone 2 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/665) + +- Previous Grant 2: [societal_grant2.md](https://github.com/w3f/Grants-Program/pull/1450) +- Milestone 1 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/733) +- Milestone 2 [Submission](https://github.com/w3f/Grant-Milestone-Delivery/pull/806) + +Societal is also a member of the Substrate Builders Program. + +### Overview + +Societal is a specialized blockchain for the creation and management of internative-native organizations. Societal allows all types of groups or communities to build their own online, transparent, and decentralized organization. Societal bundles all of the tools required to create and manage a DAO in one place. Creators will be empowered to construct a DAO with fungible, non-fungible, or a combination of governance tokens. Societal also offers DAO management tooling features like treasury management, specialized governance, task boards, legal structuring, and accounting. This removes the need to use siloed platforms to manage the operations of a DAO. Whether a creator is looking to build a DAO for their organization, raise and deploy investment capital, or decentralize governance of an NFT project, Societal has the necessary tooling for a seamless end-to-end experience. + +Utilizing Polkdaot’s layer-0 infrastructure and ecosystem, Societal will provide DAOs with both maximum functionality and a cohesive user experience. With features including cross-chain governance and subscription pricing, Societal combines best-in-class features into one vertically integrated product. With integrations into DeFi, privacy, and identity protocols, Societal will enable web3 organizations to seamlessly transition and manage their DAOs into the future. + +The Societal team has been building in the Polkadot ecosystem for the past two years. While at a previous Polkadot project, the Societal team noticed a lack of integrated DAO tooling - not only in the Polkadot ecosystem, but in the broader web3 industry as a whole. After analyzing how we might transition and manage our previous project into a DAO, there was no clear path. This, along with the team being both members and council members of various DAOs and noticing the lack of infrastructure, we decided to build a solution - Societal. + +### Project Details + +Societal Labs has been designing the product vision of the Socital platform for quite some time. We will go over the project details and blockchain architecture in this application and provide references below for more in-depth context. + +In Societal's final state, it will offer four main services; Create, Transition, Transfer and Manage. Create will allow any web3 user to create their own DAO. Transition will allow protocols to progressively move towards community ownership. Transfer will allow DAOs to transfer their DAO from an expensive siloed chain to the Sociteal platform. Manage will provide DAOs all the required product features to manage their organization, whether it is a small investment club or a large community-governed protocol. + +Societal will offer a wide range of features to create and manage a DAO. The features are split into three categories; Operations, Treasury, and Governance. The Operations features are: job & task boards, payroll, customizable feeds, legal tooling, on-chain reputation, and a web & mobile application. The Treasury features are as follows: treasury wallets (multi-sig), DeFi integrations, on-chain cap table, and accounting. The governance features are: subscription based governance, proposal calendar, built-in governance systems, and private voting. + +Societal will vertically integrate with projects to advance its tech stack and product offering, something not seen in most web3 projects today. For example, Societal can integrate DeFi services by working with projects like Acala and Moonbeam, which will allow for active treasury management for DAOs managed with Societal. For private assets and voting, projects like Manta and Phala can provide privacy-enabling functions like zero-knowledge proofs and trusted execution environments to make this possible. For on-chain credentials, projects like KILT and Litentry can provide KYC and member credentialing services that can be used by DAOs for governance and recruiting. + +Finally, Societal plans to progressively transition into a DAO itself. Once the token is launched, a community-run treasury will grow over time until the entire network is owned and operated by the community. + +For more information, please refer to the following resources: + +- Societal Whitepaper [here](https://docsend.com/view/2gte2fd8wc4jp4rg) +- Societal Docs [here](https://docs.sctl.xyz/) +- Societal Protoype Demo [here](https://www.youtube.com/watch?v=Fy-0FrfUIYw) + + +### Ecosystem Fit + +As it stands today, the DAO landscape within the Polkadot ecosystem is not as mature as other ecosystems such as Ethereum. This is due to insufficient DAO creation and tooling infrastructure in the ecosystem. Currently, the Polkadot ecosystem does not have the creation, governance, and treasury management tooling products that other major blockchains do. By building these tooling products on Polkadot, both the Polkadot DAO landscape and the broader DAO management tooling space are primed for innovation by utilizing the unique technical abilities that Substrate provides. + +The target audience of the Societal application are web3 users who require a platform to easily create and manage their DAOs. Our project will meet the needs of the Polkadot community to create and managane their own DAOs and will be a governace scaling solution for ETH based DAOs. + +The projects like Societal in the Polkadot space are Polkassembly, SubDAO, and InvArch. Societal differs from these projects in multiple ways. First, Polkassembly is not building their own parachain and is only a governance platform for large Polkadot projects. Societal wants to allow any web3 user to create their own DAO - not just catering to large established protocols. SubDAO has recently been focusing on smart contract deployments on multiple chains and does not appear to be building a parachain. Societal will build its own parachain and use the technical capabilities of Substrate to be truly token agnostic, connecting with widely used wallets such as MetaMask, to avoid doing multiple chain deployments via smart contracts. InvArch Factory is similar to Societal in the sense that they are building their own parachian, however we plan to offer a SaaS based pricing model so we can change the DAOs a monthly subscription fee and eliminate the fees for the organizations members. Societal will also seek to integrate with other chains, having cross-chain governace execution. + + +## Team :busts_in_silhouette: + +### Team members + +- Graeme Fox +- Tyler Gellatly +- Oleh Kalenyk +- Alibek Sansyzbayev + + +### Contact + +- **Contact Name:** Graeme Fox +- **Contact Email:** graeme@sctl.xyz +- **Website:** https://www.sctl.xyz/ + +### Legal Structure + +- **Registered Address:** Brookfield Place, Suite 2700, 225 6 Ave SW, Calgary, AB T2P 1N2 +- **Registered Legal Entity:** Societal Labs Ltd. + +### Team's experience + +Graeme Fox is the Co-Founder & CEO of Societal, a specialized blockchain designed for the creation and management of DAOs. He was accepted to inaugural the Polkadot Blockchain Academy, held at Cambridge University. Graeme is also a volunteer at the Canadian Blockchain Consortium, where he holds a role on the web3 committee. Prior to this, Graeme has held many roles in and out of web3. In web3, he was previously Head of Product at Ruby Protocol, a privacy project implementing Functional Encryption to combat Trusted Execution Environments (TEEs) and Zero-Knowledge Proofs (ZKPs). Prior to web3 he was the Lead Product Manager at Connectus. During this time, he was in charge of both internal and external development teams that created a web-based application using a MERN stack development, along with a supporting phone application on iOS and Android. It was during this role when Graeme was first introduced to blockchain development, as the main product line integrated with the Corda Blockchain to allow for automatic and secure payments following the completion of specific KPIs. Graeme has held other engineering roles in the past and holds a Bachelor of Engineering from Dalhousie University. He lives and breathes the entrepreneurial mindset, being involved in early-stage startups for the last five years. + +Tyler Gellatly is the Co-Founder & COO of Societal and has been building and scaling early stage start-ups for the last 4+ years. He was employee #1 and Director of Operations & Partnerships at Cuboh (a YC-backed SAAS middleware operating within the ghost kitchen industry) More recently, Tyler helped found Ruby Protocol, a novel privacy protocol building on the Substrate framework, and is still involved in a strategic advisory capacity. Currently, he sits on the DAO council for the Illuminati Collective, which currently has a 1000 ETH treasury under management. Tyler holds a Bachelor of Commerce from the University of Victoria, specializing in corporate strategy and finance. A well-rounded business operations leader with a background in finance, operations, capital fundraising, and strategic partnerships, Tyler is mission driven to bring web3 communities together at scale by utilizing blockchain technology. + + +### Team Code Repos + +Org: + +- https://github.com/sctllabs +- https://github.com/sctllabs/societal-node +- https://github.com/sctllabs/societal-client + +Team: + +- https://github.com/gfox1 +- https://github.com/okalenyk +- https://github.com/asansyzb + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/graemefox/ +- https://www.linkedin.com/in/tngell/ + +## Development Status :open_book: + +Societal has already been working on our project and has completed our MVP. The two main repositories of the Societal project are the [societal-node](https://github.com/sctllabs/societal-node) and the [societal-client](https://github.com/sctllabs/societal-client). These repositories represent the societal blockchain (built with substrate) and the UI. To date or MVP includes the following features: Create a DAO with its own governance token, slecect a governance type (Gov1, ownership weighted voting, NFT voting), create and vote on proposals, and bounties. The Societal chain is also EVM compatible. + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 40,000 USDC + +The main purpose of this grant will be creating a subcription based pricing system, that can be implemented into any subsrate chain. + +Societal will use this subcription based pricing system to charge the DAOs on its network a monthly fee, which will allow the DAOs members to interact on-chain without paying gas fees. This will bring current web2 pricing models to web3, increasing user experience and ease of adoption for DAOs, as their members will not have to pay gas fees or hold the chain token to interact with it. + + +### Milestone 1 — Subscription Pricing Pallet +- **Estimated Duration:** 1.5 month +- **FTE:** 2 +- **Costs:** 15,000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Substrate module: Subscription Pricing Pallet | We will create a Substrate pallet that will require organizations on substrate chain's network to pay a monthly subscription, which will allow the organizations members to interact on-chain without paying gas fees. The pallet will do four main things. It will accept a subscription payment from a DAO to the substrate chain's treasury. It will open or lock functions for the DAOs members based on if and when the payment has been made. It will have a time limit for these functions to be open, before another payment is required. Finally, it would specify a maximum amount of function calls that can be executed before the functions are locked and another payment is required, preventing DDos attacks. | + + + +### Milestone 2 — Add Subscription Tiers to Pallet + +- **Estimated Duration:** 1.5 months +- **FTE:** 2 +- **Costs:** 15,000 USDC + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works.| +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Substrate Module: Add Subscription Tiers to Pallet | The main delivery of this milestone will be adding differnt subscription tiers to the pallet that was created in milestone 1. This milestone will allow the developer to define different subscription tiers, the price of each tier, what functions and/or pallets are allowed in each tier, and the maximum amount of function calls for each tier. Based on what subcription tier the DAO is paying for, only those functions will be allowed to be called by the DAO and its members. Finally, this milestone will also allow each tier to have a maximum amount of members allowed in the DAO. | + + +### Milestone 3 — Add Recurring Subcription Payment to Pallet + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 10,000 USDC + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish a tutorial that explains how to use and the functionality of the grant. | +| 1. | Substrate Module: Add Recurring Subcription Payment to Pallet | The main delivery of this milestone will be allowing the DAO to approve recurring subscription payments from the DAOs treasury. The approval for the automic recurring subcription approval will come in the form of a governance proposal. The subcription payment will allow for monthly recurring payments until the subscription in canceled. If funds are not avaible at the time of paymnet, all of the DAO functions except for paying the subscription will be locked. This milestone will make it easier for the DAOs to pay the subscription and not need to approve a proposal every month. | + + +## Future Plans + +Societal plans to launch its own parachain and be the go-to DAO Creation and Management platform for Polkadot and all of web3. We believe that this subscription pricing system will be a great on-ramp of DAOs from other ecosystems into Polkadot, as the organization members do not have to purchase the Societal token to participate in on-chain transactions. This will reduce the barrier for these DAOs to use a governance scaling solution for their organization, such as Societal. This subscription payment system can also be used by many substrate chains to reduce this barrier adoption as well. + + +## Additional Information :heavy_plus_sign: + +All information already included in above. \ No newline at end of file From 60e6c7b9023fddcf808e529eef92f7cb849b5b58 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 25 May 2023 19:48:43 +0200 Subject: [PATCH 370/665] Update index.md Societal Saas Pricing --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b9987a6924e..baf3dff2a57 100644 --- a/applications/index.md +++ b/applications/index.md @@ -62,6 +62,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | [🔝](#menu) From f425930996b9df5038edb9325a3727062e67b11a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sun, 28 May 2023 13:59:30 +0200 Subject: [PATCH 371/665] Cancel iris_followup.md (#1767) https://github.com/w3f/Grants-Program/pull/1365#issuecomment-1564514109 --- applications/iris_followup.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/iris_followup.md b/applications/iris_followup.md index 4ce62d754d3..c7ea591818a 100644 --- a/applications/iris_followup.md +++ b/applications/iris_followup.md @@ -3,6 +3,7 @@ - **Team Name:** Ideal Labs - **Payment Address:** 0xB7E92CCDE85B8Cee89a8bEA2Fd5e5EE417d985Ad (DAI) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1365#issuecomment-1564514109) ## Project Overview :page_facing_up: From f837b7d7e135a0f3d018834f3b16cb8f7e87e5a4 Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Tue, 30 May 2023 14:42:03 +0700 Subject: [PATCH 372/665] Amend milestone 2 of accepted grant application Hybrid Block Explorer. (#1774) --- applications/hybrid.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/hybrid.md b/applications/hybrid.md index e2b5732d82e..f11f38c7077 100644 --- a/applications/hybrid.md +++ b/applications/hybrid.md @@ -205,7 +205,7 @@ Development has not started on the project, however the codebase will largely fo | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 1. | Event subscription API | The indexer will be updated to service subscription requests via WSS. | | 2. | Live dapp | The dapp will be updated so that pages displaying results from event queries will be updated as soon as a new event appears on the chain. | -| 3. | Full Substrate & Polkadot support | All substrate & polkadot pallets & events supported | +| 3. | Full Polkadot event indexing | The indexer will be updated to index all Polkadot pallets and the following keys will be indexed in addition to those in Milestone 1: preimage_hash, era_index, session_index. | | 4. | Variant index | Additional event index by pallet, variant | | 5. | Increased decentralization | Don't store event in db - load events in front end from chain | | 6. | Asynchrous block downloading | Blocks will be downloaded as fast as possible for improved indexing speed. | From 260ce825441bb49b91fb21de4cbc0e402acb08f0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 30 May 2023 11:41:10 +0200 Subject: [PATCH 373/665] Update PolkadotSnap.md (#1776) --- applications/PolkadotSnap.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/PolkadotSnap.md b/applications/PolkadotSnap.md index e58ec8faa4c..b13d98397ea 100644 --- a/applications/PolkadotSnap.md +++ b/applications/PolkadotSnap.md @@ -4,6 +4,7 @@ * **Proposer:** @aaronisme * **Payment Address:** 3KL2HNETiLbLVbnGfpGZ6ZkyyaWUL6bfpt(BTC) * **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +* **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1166#issuecomment-1567918173) ## Project Overview :page_facing_up: From 75dd458b92bb8e784607fdac7701a52804331b44 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 30 May 2023 15:51:27 +0200 Subject: [PATCH 374/665] Update funding.md Add KodaDot Ecosystem Grants --- docs/funding.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/funding.md b/docs/funding.md index b4fb5013746..25ff1ed6d18 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -33,6 +33,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) - [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) +- [KodaDot Ecosystem Grants](https://github.com/kodadot/grants) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) From 3acc15968c4de759087b1461d72a3d85fb0499fc Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 30 May 2023 17:46:30 +0200 Subject: [PATCH 375/665] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 909cb59da8a..e96de8f3139 100644 --- a/README.md +++ b/README.md @@ -327,6 +327,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) - [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) +- [KodaDot Ecosystem Grants](https://github.com/kodadot/grants) - [Moonbeam Grants Program](https://moonbeam.foundation/grants/) - [OAK’s Developer Grants](https://oak.tech/community/grants/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) From 6955283b0360082ea3b31d477441a3d8b47eec47 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 30 May 2023 17:25:38 -0400 Subject: [PATCH 376/665] Update index.md (#1778) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index baf3dff2a57..bba2d20d468 100644 --- a/applications/index.md +++ b/applications/index.md @@ -153,7 +153,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☒ | ☐ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☒ | ☒ | -| [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☐ | ☐ | +| [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☒ | ☒ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | | [LimeChain](https://limechain.tech/) | [Research feasibility of Polkadot Host in Java](research-feasibiliy-java-host.md) | [GitHub](https://github.com/LimeChain) | ☐ | ☒ | ☒ | | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☒ | ☒ | From a1b6544027942a25adf97bc0dbd52d20c891a937 Mon Sep 17 00:00:00 2001 From: Sergej Sakac <73715684+Szegoo@users.noreply.github.com> Date: Wed, 31 May 2023 20:15:26 +0200 Subject: [PATCH 377/665] Dotflow (#1657) * Dotflow * Update Dotflow.md * Describe milestones better * Update Dotflow.md * Remove accidental empty lines * Update Dotflow.md * Update Dotflow.md --- applications/Dotflow.md | 201 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 201 insertions(+) create mode 100644 applications/Dotflow.md diff --git a/applications/Dotflow.md b/applications/Dotflow.md new file mode 100644 index 00000000000..8875dbc10d1 --- /dev/null +++ b/applications/Dotflow.md @@ -0,0 +1,201 @@ +# Dotflow + +- **Team Name:** Sergej Sakac & Oliver Lim +- **Payment Address:** 0x1e86CD18E4443B5f57b0133077954Cd84896964d (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +#### Problem +We can most certainly agree that the future is multi-chain. As such, it is not uncommon for users to hold multiple accounts across various chains for reasons such as distinct address formats and security benefits. However, this practice presents a challenge in managing multiple addresses. Adding to the complexity is the need to verify the address of the intended recipient, as it may have changed over time. + +In summary, there are two key challenges to address: the management of multiple addresses and making sure the addresses of the recepients did not change in the meantime. + +To mitigate these challenges, we aim to simplify the user experience by abstracting away the complexity of address management. + +### Project Details + +Our project will comprise two smart contracts coded in ink!, and a React.js-based user interface. + +One of the ink! contracts will store the user's address-related data in an entity called `Identity`. Each user will have their own `Identity`, containing their addresses across different chains. The Identity creators will be responsible for updating their addresses if any changes occur. Every Identity will be assigned a unique `IdentityNo`, which will serve a crucial purpose in the address book contract and UI. + +Additionally, this contract will feature a function that, based on input arguments, will return the appropriate destination address for token transfers. This function will mainly be used by the user interface. + +The second contract will be an address book that enables users to store the `IdentityNos` of the people they are most frequently engaged with. Each user will have the option to create their own address book, where they can add a nickname to each identity to differentiate them easily. Each address book will be attached to a wallet so that when a user logs in with his wallet the UI and provides the `IdentityKey` the frontend will automatically be able to display the address book to the user. + +The UI will serve the purpose of interacting with both smart contracts. Users will be able to create an identity and customize the addresses of their identity. Using the UI users will also be able to create their address book and customize it. The most important functionality the UI will provide will be the routing. +When a user wants to transfer some tokens to an identity the user will only have to worry about the token, origin and destination chain, and the identity they want to send the tokens to. Based on all of this the UI will query the identity contract and based on that create a transaction that will route the tokens to the proper address. + +In case the origin and destination chain are not the same, the UI will create an XCM message that will route the tokens to the proper blockchain. For the XCM transaction to work there has to be an existing XCM channel between the two blockchains. + +### Privacy +Most of us don't want to share all of our addresses with the rest of the world. For that reason, we are including some privacy features that will keep all our addresses private. +All of the addresses in the identity smart contract will be encrypted with a secret key. + +Users will have multiple addresses each attached to a certain blockchain. AES 128-bit ciphers will be generated by the UI per each blockchain. These ciphers will only change if the user changes them when updating an address, otherwise, they will always be the same for the associated blockchain. +Ciphers will be created when creating an identity or when adding a new blockchain address to the identity. These ciphers will be stored in a structured format so that the frontend code can associate each cipher with a blockchain. Ciphers will be stored locally in the following format: +``` +-- We will call this data the 'Identity Key' -- +blockchain_name_1:cipher_1;blockchain_name_2:cipher_2;...and so on +``` +Each address will be encrypted with the associated cipher before it gets stored in the identity contract. This will ensure that no one has access to an identity's addresses simply by reading the contract's state. + +To share an identity with someone the `Identity Key` will also be needed to be sent together with the `IdentityNo`. In case an identity doesn't want to expose all of their addresses to someone else, but only some of them, it is possible to send part of the `Identity Key` that contains the ciphers for the blockchain addresses he wants to share. +Of course, the user won't need to do this task manually, the UI will make this task very simple. The following section will show how this will work from the user's perspective. + +In case we update some of our addresses but we want to restrict access to the users that previously were granted access to that address there will be an option to regenerate the cipher. This way everyone that had access to the old address won't have access to the new one. + +### UI Design +The UI will consist of three main parts: + +- My Identity page +- Transfer page +- Address book page + +#### My Identity page +[![1-1-dashboard-2.png](https://i.postimg.cc/nLt38NpZ/1-1-dashboard-2.png)](https://postimg.cc/dh42rHhS) + +The user will be able to create his own identity and provide the addresses he owns on to his identity. + +![Add Address](https://i.postimg.cc/jdKdPQS5/1-1-create-identity.png) + +In case some of the addresses the user owns change over time he will be able to edit them. +Also, we can select the option to regenerate the cipher so that people that had access to the old address won't be able to access the new one. + +[![1-1-create-identity-4.png](https://i.postimg.cc/509Z5LX0/1-1-create-identity-4.png)](https://postimg.cc/jW9gtWQ0) + +When sharing their identity users will also be able to select which addresses will be available for the person they are sending their identity to. The user will have to copy his `identityNo` but also the `identityKey` which specifies which addresses are accessible for the user that receives this key. + +[![1-1-create-identity-2.png](https://i.postimg.cc/BnhvGMML/1-1-create-identity-2.png)](https://postimg.cc/fV9scj4D) + +#### Transfer page +[![2-1-transfer-1.png](https://i.postimg.cc/Cx9ZCHpB/2-1-transfer-1.png)](https://postimg.cc/75MYwz6w) + +Ther user will be able to transfer tokens to an identity by specifying the origin chain, destionation chain, and the receiver's `identityNo`. + +#### Address Book page +![Address book page](https://i.postimg.cc/QtXyT9kK/3-1-Address-book.png) + +The user will be able to add identities to his own address book. The identities will be added by providing the `identityNo` and some nickname for the identity. + Also by clicking on the transfer icon on one of the identities the user will be redirected to the transfer page where the `identityNo` will be automatically filled out. + +[![3-1-Address-book-3.png](https://i.postimg.cc/xT5snzHN/3-1-Address-book-3.png)](https://postimg.cc/PPLbMNSd) + +When adding an Identity to an address book the user will also be required to provide the Identity Key which will be used for decrypting the identity's addresses when sending tokens. + +### Ecosystem Fit + +This project fits perfectly with the Polkadot ecosystem because it has everything we need to make it work. Polkadot is a multi-chain network, so a lot of users have different addresses on different chains for the same reasons we mentioned earlier. That's why the problems we talked about are important in this ecosystem. + +XCM is going to be a core component of our project since it'll help us transfer tokens between the parachains and the relay chain. + +#### Target Audience +Our target audience is people who deal with sending assets frequently over the Polkadot network. + +## Team :busts_in_silhouette: + +### Team members + +- Sergej Sakac [Szegoo](https://github.com/Szegoo) +- Oliver Lim [cuteolaf](https://github.com/cuteolaf) + +### Contact + +- **Contact Name:** Sergej Sakac +- **Contact Email:** sakacszergej@gmail.com +- **Website:** https://github.com/Szegoo + +### Legal Structure +- **Registered Address:** Kanalska 7 Novi Sad Serbia +- **Registered Legal Entity:** MASTER UNION LLC. + +### Team's experience + +#### [Sergej Sakac](https://github.com/Szegoo) +- More than three years of programming experience +- Active contributor to [Substrate](https://github.com/paritytech/substrate/pulls?q=is%3Apr+author%3ASzegoo) +- Member of the [fellowship](https://github.com/polkadot-fellows/seeding/pull/36) +- Contributor to [rmrk-pallets](https://github.com/rmrk-team/rmrk-substrate/pulls?q=is%3Apr+is%3Aclosed+author%3ASzegoo) + +#### [Oliver Lim](https://github.com/cuteolaf) +- Full stack blockchain developer with 5+ years of experience +- Quick learner and active contributor to open source projects + - [Fair Squares](https://github.com/fair-squares/fair-squares) + - [Imbue Network](https://github.com/imbuenetwork) + - [Anagolay Network](https://gitlab.com/anagolay/anagolay) + - ... + +### Team Code Repos + +We will be working on two separate repos, one for the UI and the other for the ink! contracts. + +- https://github.com/TheDotflow/dotflow-ui +- https://github.com/TheDotflow/dotflow-ink + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/Szegoo +- https://github.com/cuteolaf + +### Team LinkedIn Profiles (if available) + +- http://linkedin.com/in/sergej-sakac-334a47252 +- https://www.linkedin.com/in/oliver-lim-2215a8235/ + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2,5 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 19,000 USD + +### Milestone 1 Example — Basic functionality + +- **Estimated duration:** 1 month +- **FTE:** 1,5 +- **Costs:** 8,000 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | Ink! contracts and the UI code will be well documented and open for everybody to take a look. The UI will be simple and intuitive to use. | +| **0c.** | Testing and Testing Guide | The Identity ink! contract will be well tested with unit and integration tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milesone. | +| 1. | Identity Contract | We will write the code for the Identity contract using ink! so that our contracts can be compiled to wasm and deployed to any blockchain that implements the contracts pallet. The Identity contract will provide a range of functions, including creating an identity, adding addresses that are mapped to specific blockchains, and updating these addresses as needed. The contract will automatically generate a unique identifier, referred to as `identityNo`, for each identity. To ensure maximum security, we will allow the identity creator to specify the accounts that are authorized to modify the identity's addresses. This will enable the creator to retain control of the identity even if they lose access to the account used to create it.| +| 2. | My Identity page | The My Identity page will be developed using React.js, providing users with a user-friendly interface to interact with the Identity contract. This will include the ability to create a new identity, add or remove addresses associated with an identity, and access and copy the unique `identityNo` to share with others. This UI will also generate the `Identity Key` for the user's identity and will update it every time he adds a new blockchain address. This `Identity Key` will be accessible for the identity creator when sharing his identity. The interface will be based on the mock design presented in the [UI design](https://github.com/Szegoo/Grants-Program/edit/application/applications/Dotflow.md?pr=%2Fw3f%2FGrants-Program%2Fpull%2F1657#ui-design) section. | + + +### Milestone 2 Example — Additional features + +- **Estimated Duration:** 1,5 month +- **FTE:** 1,5 +- **Costs:** 11,000 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | The contract and the website code will be well documented and open for everybody to check. The UI will have a simple UI that will be intuitive to use. | +| **0c.** | Testing and Testing Guide | The Address Book ink! contract will be well tested with unit and integration tests. The functionality for generating XCM messages will very well tested to make sure the tokens are always transfered to the proper destination. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milesone. | +| 0e. | Article | We will publish a Medium article that explains the details of our project. | +| 1. | Address Book | We will develop the code for the Address Book contract using ink! so that our contracts can be compiled to wasm and deployed to any blockchain that implements the contracts pallet. The Address Book will enable users to create an address book and populate it with the identities they interact with most frequently. The identities will be added via their identityNo since our main goal is abstracting away addresses from the users. When adding an identity to an address book the Identity Key will also be needed. The address book will be stored on chain but the `IdentityKey` will be stored in local storage. The application will expect the user to provide the `IdentityKey` when using the app from a different device for the first time. | +| 2. | Routing functionality. | The code responsible for routing tokens to the correct destination will be incorporated into the frontend code written in TypeScript. This code will incorporate the necessary logic for constructing XCM messages to route tokens to the appropriate address. In cases where the destination chain is the same as the origin, a simple transaction will be executed. Because of possible race conditions where the identity owner is trying to update an address on a parachain while another user is trying to send funds to that identity on that parachain we introduce additional checks on the frontend. Before sending a transaction that will transfer the funds, the frontend will check whether there are any pending transactions happening that would change the address on the chain the user is transferring funds to. In case there is a pending transaction the user will get a warning and will be advised to wait for a moment and try sending the transaction again. | +| 3. | Address Book page | We will write the code for the Address Book UI using React.js. The UI will be based on the provided mock design that we displayed above in the [UI design section](https://github.com/Szegoo/Grants-Program/edit/application/applications/Dotflow.md?pr=%2Fw3f%2FGrants-Program%2Fpull%2F1657#ui-design). The UI will make it possible for users to create an address book and add identities to it. | +| 4. | Transfer page | We will create a user interface using React.js that will enable users to send tokens to a designated `IdentityId`. This UI will abstract away the complexity of addresses and leverage the Routing functionality described in this table(Section 2) to handle token routing. The UI design will be based on the mock design presented in the [UI design](https://github.com/Szegoo/Grants-Program/edit/application/applications/Dotflow.md?pr=%2Fw3f%2FGrants-Program%2Fpull%2F1657#ui-design) section for optimal user experience. | + + +## Future Plans + +Our future plan is to expand our core functionality and add more features so that the tokens can be routed based on some different criteria. Some example of these ideas are: + +- Route tokens based on the amount, sender and/or the token itself +- Split the transferred amount to multiple addresses + +An exciting feature we would like to build in the future is enable token transfers between blockchains that are not part of the Polkadot network(e.g. Polkadot<->Ethereum). + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** GitHub From 15265ca97fa10b987ff4e379e6685e6b80eb0b04 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 31 May 2023 20:18:03 +0200 Subject: [PATCH 378/665] Update index.md Add Dotflow --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index bba2d20d468..d0e73a95cb8 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,6 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | [🔝](#menu) From 9bae277fabe15e427d0904146293224f669c497b Mon Sep 17 00:00:00 2001 From: Song Zhou Date: Thu, 1 Jun 2023 02:21:07 +0800 Subject: [PATCH 379/665] remove milestone2 of choko wallet (#1772) --- applications/choko_wallet.md | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/applications/choko_wallet.md b/applications/choko_wallet.md index 6d122d5965d..0101453e54b 100644 --- a/applications/choko_wallet.md +++ b/applications/choko_wallet.md @@ -114,7 +114,7 @@ Mostly described above in the Overview section. - **Total Estimated Duration:** 3 months - **Full-Time Equivalent (FTE):** 5 FTE -- **Total Costs:** $64,000 +- **Total Costs:** $36,000 ### Milestone 1 @@ -133,22 +133,6 @@ Mostly described above in the Overview section. | 2. | A Sample DApp | A sample DApp created with `@choko-wallet/sdk` to test with common functionalities. | | 3. | SDK | For `@choko-wallet/known-networks` will include a few popular Polkadot chains, `@choko-wallet/request-handler` will implements handler for "request for user public identity", "request to sign transaction", "request to sign message", "request to decrypt/encrypt message" (Note: encryption/decryption won't be a solution yet, see discussion above for details). | -### Milestone 2 - -- **Estimated Duration:** 1.5 month -- **FTE:** 4 FTE -- **Costs:** 28,000 USD - -| Number | Deliverable | Specification | -| -----: | ----------- | ------------- | -| 0a. | License | Apache 2.0 | -| 0b. | Documentation | We will provide both **inline documentation** of the code and a **live demo**. Documentation to SDK.| -| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | -| 0d. | Docker | A Dockerfile won't be much useful for a static web app. Therefore, we are not going to provide one for this milestone. | -| 0e. | Article | We will publish two **article** that explains 1. Dapp developers, how to get started and why to get started with Choko Wallet 2. How to create LinkDrop and rational behind it. | -| 1. | Reactjs WebApp | dashboard (display balance, send tokens), stake tokens on selected networks. An alternative dashboard to list assets across multiple parachains and relay chains. A built-in Dapp to teleport assets between parachains (i.e. Support for only DOT and KSM) | -| 2. | Linkdrop Pallet | A substrate pallet that enable anyone to create a linkdrop vault with X number of Y maximum recepients. The developer will create a batch of Y authorization code by `encode( signMessage(vaultId, receipientIndex) )` and distribute the authorization code to seed users. The pallet will then accept a rate limited 0 weight transaction that validate the authorization code and make transfers. | -| 3. | Linkdrop in Web App | Web App interface to create and claim LinkDrops | ## Future Plans From efcb5ac9eced413c3ccd9bbc8f83a3f225523c9f Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 1 Jun 2023 02:22:14 -0400 Subject: [PATCH 380/665] Update index.md (#1779) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d0e73a95cb8..fc0a5069693 100644 --- a/applications/index.md +++ b/applications/index.md @@ -112,7 +112,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | -| [DIA Data](https://www.diadata.org/) | [Bridges Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☐ | ☐ | +| [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | From ff20f02a5ce5e450da41260d93d7b02c5530e54d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 1 Jun 2023 10:08:49 +0200 Subject: [PATCH 381/665] choko wallet update index.md See https://github.com/w3f/Grants-Program/pull/1772 and https://github.com/w3f/Grants-Program/pull/1022 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index fc0a5069693..39abfcd2142 100644 --- a/applications/index.md +++ b/applications/index.md @@ -194,7 +194,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Uke](https://github.com/Uke-Messaging) | [Uke Messaging - PoC - Phase 1](./uke.md) | [GitHub](https://github.com/Uke-Messaging) | ☒ | ☐ | ☐ | | [Redstone Network](https://github.com/difttt) | [Redstone Network](./RedStone%20Network.md) | [GitHub](https://github.com/difttt) | ☐ | ☒ | ☐ | | [JURIMETRIC TECNOLOGIA LTDA](https://www.jurimetric.com.br/) | [Polkadart](./Polkadart.md) | [GitHub](https://github.com/rankanizer/polkadart) | ☐ | ☒ | ☒ | -| [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☐ | +| [Skye Kiwi](https://skye.kiwi/) | [Choko Wallet](./choko_wallet.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | | [Popular Coding](https://www.popularcoding.com/) | [Ventur](./ventur.md) | [GitHub](https://github.com/popular_coding) | ☐ | ☒ | ☒ | | [Asylum](https://asylum.space/) | [Asylum follow-up 1](./asylum_follow_up_1.md) | [GitHub](https://gitlab.com/asylum-space/) | ☒ | ☒ | ☐ | | [Cyril Carlier](https://github.com/CrommVardek) | [Maki](./Maki.md) | [GitHub](https://github.com/CrommVardek) | ☐ | ☐ | ☐ | From ada620568dff7c7457e9e98079ca86cbcc8e5e5a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 1 Jun 2023 12:17:55 +0200 Subject: [PATCH 382/665] Close BPF-based ink! smart contracts (#1780) --- docs/RFPs/{Open => Closed}/bpf-contracts.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Closed}/bpf-contracts.md (97%) diff --git a/docs/RFPs/Open/bpf-contracts.md b/docs/RFPs/Closed/bpf-contracts.md similarity index 97% rename from docs/RFPs/Open/bpf-contracts.md rename to docs/RFPs/Closed/bpf-contracts.md index 31a4b2e5ce3..d85483256ba 100644 --- a/docs/RFPs/Open/bpf-contracts.md +++ b/docs/RFPs/Closed/bpf-contracts.md @@ -1,6 +1,6 @@ # BPF-based ink! smart contracts -* **Status:** Open +* **Status:** [Closed](https://forum.polkadot.network/t/ebpf-contracts-hackathon/1084/13?u=david) * **Proposer:** [takahser](https://github.com/takahser) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index 464c776ce82..7e55d6c5717 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -32,7 +32,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | | [appi.md](RFPs/Closed/appi.md) | 🔴 | 20.07.2021 | -| [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 🟢 | 06.01.2023 | +| [bpf-contracts.md](RFPs/Closed/bpf-contracts.md) | 🔴 | 01.07.2023 | | [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 🔴 | 25.04.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | From 19c27f63ad26df4e02ca04cb0f8a4fe009d09a2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 1 Jun 2023 16:58:23 +0200 Subject: [PATCH 383/665] Cancel Gluon_decentralized_hardware_crypto_wallet_services.md (#1781) --- .../Gluon_decentralized_hardware_crypto_wallet_services.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/applications/Gluon_decentralized_hardware_crypto_wallet_services.md b/applications/Gluon_decentralized_hardware_crypto_wallet_services.md index 8e066128187..25c4a732ed6 100644 --- a/applications/Gluon_decentralized_hardware_crypto_wallet_services.md +++ b/applications/Gluon_decentralized_hardware_crypto_wallet_services.md @@ -6,6 +6,9 @@ * **Payment Address:** ERC20(DAI etc.):0x0cE6254832D553590349Ef7a427519d1eb8af70F +* **Status:** [Cancelled]( +https://github.com/w3f/Grants-Program/pull/182#issuecomment-1571885497) + > *The above combination of your GitHub account submitting the application and payment address will be your unique identifier during the program. Please keep them safe.* ## Project Overview :page_facing_up: From 1deb696f0bbc28cc5ace8a69811ca0aeee80abe9 Mon Sep 17 00:00:00 2001 From: Parth <97211975+ParthChaudhary31@users.noreply.github.com> Date: Fri, 2 Jun 2023 03:36:37 +0530 Subject: [PATCH 384/665] RFP/securityMarketPlace (#1726) * RFP/security * changes * Tables Updated * Links Updated * changes * WireFrames * MIlestones * Milestone * Techstack Added * Revised Price * Update applications/Security_Marketplace.md Co-authored-by: S E R A Y A --------- Co-authored-by: S E R A Y A --- applications/Security_Marketplace.md | 293 +++++++++++++++++++++++++++ 1 file changed, 293 insertions(+) create mode 100644 applications/Security_Marketplace.md diff --git a/applications/Security_Marketplace.md b/applications/Security_Marketplace.md new file mode 100644 index 00000000000..78415bc730b --- /dev/null +++ b/applications/Security_Marketplace.md @@ -0,0 +1,293 @@ +# Security Marketplace + +- **Team Name:** Antier Solutions +- **Payment Address:** 1XhNxALoCmXF86aiwZtdDJspjWZBiRX9UfbJ4jQsWN15eSu (aUSD) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: +The proposal is in response to the RFP : [Decentralised Security marketplace](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/decentralized-security-marketplace.md). + +### Overview + +The envisioned project aims to develop a decentralized security marketplace platform much to the liking of similar existing platforms like [hackenproof](https://hackenproof.com/) and [Immunefi](https://immunefi.com/), with its unique value propositions being the aim to reward users for submitting full-blown security/Functional audits instead of individual vulnerabilities. + +Our envisioned platform will be a hybrid model that combines smart contract functionality with a centralized server to optimize gas fees. We understand that paying gas fees for small transactions can cause hesitation among users and thus have come up with a solution that optimizes the platform's operation by shifting its peripheral features off-chain while retaining its decentralized nature through the use of smart contracts for implementation of its core functionality such as escrow and governance. + +The proposed platform will be designed to provide an incentivized system that rewards auditors for submitting comprehensive audit reports on schedule while also punishing those who fail to do so. + +Our platform is also envisioned to feature a reputation system that allows auditors to build and maintain their reputations based on their past auditing records. The reputation system will act as a measure of trustworthiness for auditors while facilitating the project creators in the selection process of the right auditors for their projects. Moreover, users who have earned enough reputation will be entitled to the Arbiter role, which allows them to vote in support of or against a submitted audit based on whether it meets all of the scope requirements as outlined in the project description for a share of validation fees. + +### Project Details + +**Technical Diagram** + +![Technical Architecture](https://github-production-user-asset-6210df.s3.amazonaws.com/106224868/241970938-b0e0fda7-83bb-4001-97e2-66546db2eeb5.png) + + +**Pre Script:** + +1) The below lifecycle is not a blueprint or final version of the + project, but instead, a basic outline to depict the thinking + process involved in the proposal. + +2) The mathematical figures are by no means final + and will be concluded once the production is underway after + carefully considering the market situation. + +Here is an envisioned lifecycle of a project on our platform. + +1. Users will begin their journey on our platform by registering on our sign-up page. +2. Users can then proceed to our login page and then the dashboard after completing the validation process there. +3. Users can be broadly classified as : + Patrons: Users, generally the owners of big platforms that wish to avail of the auditing services. + Auditors: Users that are willing to offer their auditing services on the platform. + Arbiters: Trusted community members that will review the auditor’s work and verify the auditor’s claim for rewards. +4. The dashboard can be used to access all the available Projects offered by patrons on the platform, the user from there can create a post (Audit Request) + for their project, bid for already existing projects, or switch to the arbiter's dashboard if authorized. +5. The patron can create a post which will entail: + A) Project Status: Whether the project is active, pending, retrieved, completed, awaiting validation, or expired. Will be active by default on creation. + B) Type of Audit: Whether it includes Smart Contract Audit or penetration testing or Performance testing. Patrons can choose multiple tags. This will help + auditors in sorting through the projects to find the project they wish to assess for auditing. + C) Project description: A description of the working of a project by owners/developers to aid auditors, can consist of document links. + D) Github link to the Project. + E) Offered Amount: The maximum amount offered for a successful audit, value in terms of stablecoins/USD pegged tokens. + F) Audit Expectations: Any expectations the project developers/owners might have from the auditors such as including suggestions, checking test coverage/quality, + expected deadline, and scope of the audit. Arbiters will evaluate the auditor’s work on its basis. +6. The Patron will have to add the promised amount to the escrow contract at the very time of posting. +7. To elaborate on project status, The initial status of any project that will be posted will be active by default and hence, will be open to offers from auditors on the platform. + Retrieved would mean that the project was retrieved by the project’s patrons, the status of a project can only be turned to retrieved if it's in active status, and the option of retrieving will be made unavailable in any other status. + Pending would mean that an auditor has been commissioned and that the audit is underway. + Awaiting Validation would mean, the submitted auditing report is currently being scrutinized by Arbiters to ascertain it meets the pre-defined scope. + If for some reason an offer is not met even after two weeks of the expected deadline, the project will be marked expired. + + ![Project Lifecycle](https://github-production-user-asset-6210df.s3.amazonaws.com/106224868/241969866-5024f3da-94a2-4efc-a436-963c70249fc6.png) + +8. An auditor can bid on projects they want to audit. A bid includes a proposed deadline they can complete the project in and an amount they wish to get in exchange for the project. + Auditors, just like any user can view all the posts and decide which one they wish to make a bid on. They can filter through the list of projects for a particular range of amounts, or for a specific Audit type. +9. At a time, a new Auditor can only work on 1 active project. This means that a new user can make multiple bids (Limited to 5 at a time) but once one of them is accepted, his other bids will be retrieved and he cannot bid on other projects until he finishes the active audit. +10. As the auditor matures on the platform, Their active audit limit will be increased by 1 for every 3rd successful audit they deliver although this will be capped at 7. So an auditor can + never have more than 7 simultaneously active audits ongoing at a time. +11. The Bids made by auditors will be publicly visible and patrons can decide on whom they wish to delegate the job to based on their offers and their profiles. +12. The user profiles will be stored off-chain in a central database allowing users to edit them as they please and keep their feats and experiences updated. This will include a unique username, a bio where they can mention their previous experiences with auditing, links to their socials, and sample audit reports. An optional KYC can be done to verify identity. + This feature will be particularly important for auditors to eliminate identity theft and impersonation threats to reputable security companies and/or well-known individual auditors. Hence helping project creators while deciding on which offer to accept. +13. Once the project’s patron accepts one of the listed bids, the project is marked pending, and the selected auditor is notified on their profile and their email address about the start of the auditing process. + Patron can not withdraw the amount at this stage. The auditor will be given a buffer of 12 hours to accept the job assuming that he has taken that much time to check the mail or website notification. +14. The auditor commissioned with the project will then have till the proposed deadline to submit a successful audit. They can upload the audit in pdf format to the platform. There will be a penalty + for late submission of the audit which will be a certain amount of the decided amount for submission later than the deadline to 1 week and an increased penalty for the second week. After two weeks + the project’s status will automatically be turned to expired, The commissioned auditor will be given a negative point, and the project’s patron will be refunded the whole amount. +15. The submitted Audit report will then be sent to the patron which he can accept, in which case after subtraction of the platform fee, the promised amount will be sent to the auditor. +16. In case, the patron isn’t satisfied with the audit report, the dispute will then be handled by randomly selected active arbiters who will vote for or against the audit report by judging it against + the expectations of the patron specified at the start of the audit. +17. In case, the submitted project is downvoted by 5 arbiters for the first time, a deadline extension of 1 day will be granted to the auditor at no penalty (for any altercations that can be quickly + made to the report), a 6-day extension will be granted the second time around at certain percentage of penalty (for major scope misses). If the audit report is downvoted for the third time, the + project status will be marked as expired, and the project creators can retrieve the whole staked amount. The auditor commissioned will be given a negative review on-chain. +18. If 5 of the arbiters are satisfied with the audit report, then the patron will have no option but to accept the report and the promised amount will be transacted to the auditor after subtracting + the platform fee and +19. The auditors will get platform Points along their profile based on their actions, for every: + 1 successful audit completion: 1XP point (Increases with more and more audits) + 1 unsuccessful audit: -3XP points (Adds up) +20. The point system is designed to help patrons identify reputable members of the community as well as alert them of newcomers and bad elements. Once a user hits a -6XP rating, he cannot bid anymore + on the platform. +21. The proposed platform will charge a certain amount as a platform fee and the arbiter’s commission, the remaining funds will be transferred to the auditor’s wallet address connected to their profile. + + + +The peripheral components in the above-suggested platform such as user +profiles, projects posted(not yet completed), and KYC procedure will be +carried out with the help of Back-end Services, and the data will be +stored in a centralised database to facilitate users to change and +update their profiles at will whereas, The core functionalities such as +escrow, auditing achievements, and records will be stored in a +decentralised manner using smart contracts developed with !ink. + +The Data in the model will be stored either in the centralised database +or on the blockchain and hence no data will be lost even if the server is +shut for some unforseen reason. + +**Proposed TechStack** +- BackEnd : NodeJs +- FrontEnd : ReactJS using Astar.js +- Smart Contracts : !ink + +**WireFrames** + +![Login Page]( https://github.com/viswatejay/RFP/assets/106224868/38a52e06-cdf9-4090-8c67-afe8796638ba ) + +--- + +![SignUp Page]( https://github.com/viswatejay/RFP/assets/106224868/820530e5-0976-49b2-8351-efb86314a21c ) + +--- + +![OTP Verification Page]( https://github.com/viswatejay/RFP/assets/106224868/ee1ddb45-cc59-4979-b4a1-e3785174b3e2 ) + +--- + +![ Dashboard Page ]( https://github.com/viswatejay/RFP/assets/106224868/40cf5cb4-5d6e-4573-9223-851f82ab40a5 ) + +--- + +![ Detail Page ]( https://github.com/viswatejay/RFP/assets/106224868/8845baea-fc9c-480a-93d7-7692c9c59020 ) + +--- + +![ Profile Page ]( https://github.com/viswatejay/RFP/assets/106224868/92b8b522-41b4-4ac9-9485-39f493056eea ) + +--- + +![ Profile-MyAudits Page]( https://github.com/viswatejay/RFP/assets/106224868/48c2b803-a68b-4613-9344-850d668f0ca4 ) + +--- + +![ Profile-PendingAudits Page]( https://github.com/viswatejay/RFP/assets/106224868/853c43b2-f3e9-4c30-91b8-6da00650c6ba ) + +--- + +![ Create Post Page ]( https://github.com/viswatejay/RFP/assets/106224868/44caf541-f311-41e3-b415-e009bcdbe37c ) + +### Ecosystem Fit + + - The escrow smart contract will be developed in a platform-agnostic manner which will make it beneficial for future use cases. + - The negative badge mapping can be used by other platforms in the ecosystem to create a bot blacklist. + - The platform helps project owners in the ecosystem to find auditors/whitehats and vice versa. + +## Team :busts_in_silhouette: + +### Team members + +- Ankit Bhatia +- Parth Chaudhary +- Niketan Saini +- Nitin Sharma +- Vishant Mittal +- Shubham Aswal +- Abhishek Dhiman + +### Contact + +- **Contact Name:** Ankit Bhatia +- **Contact Email:** ankit.bhatia@antiersolutions.com +- **Website:** https://www.antiersolutions.com/ + +### Legal Structure + +- **Registered Address:** E-221, Phase 8B, Industrial Area, Sector 74, Sahibzada Ajit Singh Nagar, Punjab 160059 +- **Registered Legal Entity:** Antier Solutions Pvt. Ltd. + +### Team's experience + +Antier solutions entered the blockchain domain in 2016, Back when one bitcoin was not even a 1000$. The path from back there +to where we stand currently has blessed our organization not only with rewards but also with an abundance of experience. +Our Smart contract Auditing team is led by some of the most experienced and competitive developers of the organization as well as the ecosystem. +The team is well-experienced in both the development side as well as the debugging side of an SDLC and has an eye for the bugs as well as respect +for standards which, we believe, makes us a perfect fit to be the practitioner of this RFP. + +Here are some of the feats, achievements our organisation boasts of: + +1) Developed validator and nominator apps for substrate-based blockchains. +2) Customised default reward mechanism in the staking pal of the substrate chain by integrating the sustainability and + reliability score of the validators in the current reward system. +4) Integrated EVM and WASM-based virtual machines natively in the substrate chain so the chain could support both EVM(Metamask, + Remix, Web3.js, etc) and WASM(WebAssembly target, INK framework, etc) tooling. +5) Replicated whole polkadot ecosystem(Relay chain, Parachains, XCM), Where parachains are use case specific chains and communicate + through XCM protocol with each other. +6) Developed several NFT Marketplace contracts both decentralized and hybrid across various blockchains such as [Hungama](https://heftyverse.xyz/), + [SkodaVerse](https://www.skoda-auto.com/world/skodaverse), [Fanverse](https://www.fan-verse.io/) just to name a few. +7) Developed many DeFi projects across multiple blockchains such as [Shido, Staking](https://dex.shido.io/staking-page), [Shido, Perpetuals](https://perp.shido.io/), [YSL](https://ysl.io/), [Lithium](https://lithium.ventures/) and many more. +8) We have also developed an Asset Tokenization solution based on ERC3643 on EVM, Aptos & Provenance chain for some of the renowned Financial Institutions. The + asset classes tokenized are Real Estate, Securities, Private Equity, and commodities such as Gold. Can't share the platform details, as we are under strict NDA. +9) We are also developing some in-house Web3 solutions such as Relayer Hub for meta-transactions, Decentralized Token Bridge, a multi-sig solution like Gnosis-safe + and we are actively researching and developing in areas such as multi-party Computation (MPC), Account Abstraction (AA, ERC4337), zk proofs and many more. + + +- Our team has also been proactively participating in the Substrate Stack exchange and we ask/answer question related to ink!, Substrate, parachain. We rank in the top 6% people in the Substrate Stack Exchange. + +- Profiles of our team: +1. https://substrate.stackexchange.com/users/2372/arunjot-singh +2. https://substrate.stackexchange.com/users/2281/amit-kumar-yadav +3. https://substrate.stackexchange.com/users/354/shubham-gupta + + +### Some Live Sites: + +- https://ysl.io/nft +- https://heftyverse.xyz/ +- https://www.fan-verse.io/ +- https://dex.shido.io/staking-page +- https://perp.shido.io/ +- https://www.skoda-auto.com/world/skodaverse +- https://collective-vault.planetinverse.com/ + + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/ankit-bhatia-b6833370/ +- https://www.linkedin.com/in/niketan-saini-5a26a0177/ +- https://www.linkedin.com/in/shubham-aswal-528462130/ +- https://www.linkedin.com/in/nitin-sharma-9b00b6188/ +- https://www.linkedin.com/in/parth-chaudhary-b5220a257/ +- https://www.linkedin.com/in/abhishek-dhiman-6368a2187/ +- https://www.linkedin.com/in/mittalv/ + + +## Development Status :open_book: + +Awaiting Response. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 12-14 weeks +- **Full-Time Equivalent (FTE):** 4,5 +- **Total Costs:** 29,920 USD + +### Milestone 1 — UI/UX designs, Smart Contracts & Backend Services + +- **Estimated duration:** 7-8 weeks +- **FTE:** 5 +- **Costs:** 19,320 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works.| +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1 | UI/UX | We will deliver complete UI/UX designs. | +| 2 | Reputation Token Contract| This will be a non-transferrable token smart contract(Soul Bound Token) that will serve as auditors' reward and as proof of reputation points after the successful completion of an Audit. | +| 3 | Escrow Contract| This will be a master contract where all tokens will be managed by patrons and distributed to the Auditors after the successful closure of the Audit. | +| 4 | Audit Directory Contract| This will be a contract that stores all hashes of the audit reports. Which can be retrieved even when the platform goes down. | +| 5 | Arbiters Contract| This contract will have specific arbiters for every audit thread where they can participate in the voting. | +| 6 | Node Services | We will deliver the backend services for login , sign up, 2FA and Profile creation | + + +### Milestone 2 — Application & Deliveries + +- **Estimated Duration:** 5-6 weeks +- **FTE:** 4 +- **Costs:** 10,600 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works.| +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e** | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | +| 1 | Node Services | We will deliver the remaining back end services including Post creation and Bidding system. | +| 2 | Front End | We will deliver the completely functional DApp integrated with the Smart contracts and backend services. The working application will have all the 9 pages as per the wireframes and above mentioned. The application will be deployed on the provided servers. | + + + +## Future Plans + +- As mentioned earlier, Our organization plans to serve as the Arbiters in the early stages of + the platform's deployment untill reliable auditors emerge on the platform who have been actively + contributing to the community to make this process decentralised in true sense. + +## Referral Program (optional) :moneybag: + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Through RFP Portal. From bb836b299ca97566bd2c3cb91a144235675b9034 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 2 Jun 2023 09:00:35 +0200 Subject: [PATCH 385/665] Update index.md Antier Solutions --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 39abfcd2142..33c128df881 100644 --- a/applications/index.md +++ b/applications/index.md @@ -64,6 +64,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | +| [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | [🔝](#menu) From 557752de6268c432effd790ac0b6d589646aa498 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 2 Jun 2023 09:19:10 +0200 Subject: [PATCH 386/665] Update Status of Security Marketplace --- .../decentralized-security-marketplace.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Under Development}/decentralized-security-marketplace.md (97%) diff --git a/docs/RFPs/Open/decentralized-security-marketplace.md b/docs/RFPs/Under Development/decentralized-security-marketplace.md similarity index 97% rename from docs/RFPs/Open/decentralized-security-marketplace.md rename to docs/RFPs/Under Development/decentralized-security-marketplace.md index 3c32c753169..f2dda7b7cd2 100644 --- a/docs/RFPs/Open/decentralized-security-marketplace.md +++ b/docs/RFPs/Under Development/decentralized-security-marketplace.md @@ -1,6 +1,6 @@ # Decentralized Security Marketplace -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/pull/1726) * **Proposer:** [Matteo Casonato](https://github.com/0xCaso), [Bhargav Batt](https://github.com/bhargavbh) ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index 7e55d6c5717..d669bff0bf7 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -36,7 +36,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 🔴 | 25.04.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | -| [decentralized-security-marketplace.md](RFPs/Open/decentralized-security-marketplace.md) | 🟢 | 23.01.2023 | +| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 🟡 | 02.06.2023 | | [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 🔴 | 21.03.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | | [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | From be59227baa891c6da742b5bc5c9abec5b20ff241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 2 Jun 2023 20:51:40 +0200 Subject: [PATCH 387/665] Organise RFPs into collapsible tables (#1783) * Organise RFPs into collapsible tables * Fix styling of tables and summary tag --------- Co-authored-by: David Hawig --- docs/rfps.md | 117 +++++++++++++++++++++++++-------------------- src/css/custom.css | 10 ++++ 2 files changed, 76 insertions(+), 51 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index d669bff0bf7..37d53440b04 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -19,57 +19,72 @@ If you find an open RFP here that you think you can address, feel free to [submi ## 📜 List of RFPs -**Status:** - -- **🟢 Open:** We are looking for (additional) teams to implement this. -- **🟡 Under Development:** One or more teams are working on this. We might be interested in additional implementations, but it’s better to double check this with the grants team. -- **🔴 Closed:** This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a [maintenance grant](maintenance.md). - -| RFP | Status | Last Updated | -| :-- | :----: | :----------: | -| [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 🟢 | 29.11.2021 | -| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 🟡 | 02.03.2023 | -| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 🟢 | 17.02.2023 | -| [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 🟢 | 29.11.2021 | -| [appi.md](RFPs/Closed/appi.md) | 🔴 | 20.07.2021 | -| [bpf-contracts.md](RFPs/Closed/bpf-contracts.md) | 🔴 | 01.07.2023 | -| [candle-auction.md](RFPs/Closed/candle-auction.md) | 🔴 | 02.02.2022 | -| [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 🔴 | 25.04.2023 | -| [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 🟢 | 25.01.2023 | -| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 🟡 | 02.06.2023 | -| [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 🔴 | 21.03.2023 | -| [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 🟢 | 07.10.2022 | -| [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 🟢 | 09.03.2023 | -| [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 🟡 | 30.05.2022 | -| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 🟡 | 16.03.2023 | -| [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 🟡 | 05.07.2021 | -| [IDE_for_ink_Smart_Contracts.md](RFPs/Open/IDE_for_ink_Smart_Contracts.md) | 🟢 | 05.04.2023 | -| [ISO_20022.md](RFPs/Open/ISO_20022.md) | 🟢 | 31.05.2022 | -| [ISO_8583.md](RFPs/Open/ISO_8583.md) | 🟡 | 31.05.2022 | -| [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 🔴 | 20.07.2021 | -| [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 🟢 | 22.12.2022 | -| [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 🟡 | 23.11.2021 | -| [on-chain-quadratic-funding.md](RFPs/Closed/on-chain-quadratic-funding.md) | 🔴 | 29.03.2022 | -| [php-api.md](RFPs/Closed/php-api.md) | 🔴 | 27.05.2022 | -| [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 🟢 | 18.01.2023 | -| [php-scale.md](RFPs/Closed/php-scale.md) | 🔴 | 23.11.2022 | -| [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 🔴 | 22.03.2023 | -| [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 🟢 | 08.05.2023 | -| [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 🟡 | 27.05.22 | -| [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 🟡 | 23.05.2023 | -| [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 🟡 | 30.05.2022 | -| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 🔴 | 03.03.2023 | -| [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 🔴 | 20.07.2021 | -| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 🟢 | 06.02.2023 | -| [sub-consensus.md](RFPs/Open/sub-consensus.md) | 🟢 | 23.11.2021 | -| [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 🔴 | 01.01.23 | -| [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 🟢 | 04.03.2023 | -| [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 🟢 | 07.01.2023 | -| [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 🟡 | 27.04.2023 | -| [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 🟡 | 07.12.2022 | -| [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 🔴 | 09.03.2023 | -| [xcm-tool.md](RFPs/Open/xcm-tool.md) | 🟢 | 20.07.2021 | -| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 🟡 | 19.05.2023 | +
🟢 Open: We are looking for (additional) teams to implement this. + +| RFP | Last Updated | +| :-- | :----------: | +| [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 29.11.2021 | +| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 17.02.2023 | +| [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 29.11.2021 | +| [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | +| [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 25.01.2023 | +| [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | +| [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 09.03.2023 | +| [IDE_for_ink_Smart_Contracts.md](RFPs/Open/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | +| [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | +| [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | +| [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | +| [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 08.05.2023 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 06.02.2023 | +| [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.11.2021 | +| [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 04.03.2023 | +| [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 07.01.2023 | +| [xcm-tool.md](RFPs/Open/xcm-tool.md) | 20.07.2021 | + + +
+ + +
🟡 Under Development: One or more teams are working on this. We might be interested in additional implementations, but it’s better to double check this with the grants team. + +| RFP | Last Updated | +| :-- | :----------: | +| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | +| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 16.03.2023 | +| [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 05.07.2021 | +| [ISO_8583.md](RFPs/Open/ISO_8583.md) | 31.05.2022 | +| [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 23.11.2021 | +| [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 27.05.22 | +| [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 23.05.2023 | +| [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 30.05.2022 | +| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 02.06.2023 | +| [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 27.04.2023 | +| [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 07.12.2022 | +| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | + +
+ + +
🔴 Closed: This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a [maintenance grant](maintenance.md). + +| RFP | Last Updated | +| :-- | :----------: | +| [appi.md](RFPs/Closed/appi.md) | 20.07.2021 | +| [candle-auction.md](RFPs/Closed/candle-auction.md) | 02.02.2022 | +| [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 25.04.2023 | +| [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 21.03.2023 | +| [ksm-tipping-button.md](RFPs/Closed/ksm-tipping-button.md) | 20.07.2021 | +| [on-chain-quadratic-funding.md](RFPs/Closed/on-chain-quadratic-funding.md) | 29.03.2022 | +| [php-api.md](RFPs/Closed/php-api.md) | 27.05.2022 | +| [php-scale.md](RFPs/Closed/php-scale.md) | 23.11.2022 | +| [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 22.03.2023 | +| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 03.03.2023 | +| [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 20.07.2021 | +| [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 01.01.2023 | +| [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 09.03.2023 | + +
## 📬 Suggest an RFP diff --git a/src/css/custom.css b/src/css/custom.css index dfd728d40c0..daabdbe71ba 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -30,6 +30,16 @@ margin-right: 0rem; } +/* Used on RFP page to minimize tables */ +.alert { + background-color: white; + --ifm-alert-border-color: rgb(28, 30, 33); + color: rgb(28, 30, 33); +} + +.alert a { + color: rgb(28, 30, 33); +} .footer__link-item { text-decoration: none; From 508ca4c6a9c3550a39861703d7424c61bb4aaee8 Mon Sep 17 00:00:00 2001 From: Ghan Vashishtha <74914749+gnv-zeeve@users.noreply.github.com> Date: Sat, 3 Jun 2023 00:59:48 +0530 Subject: [PATCH 388/665] change user management to network management (#1782) Signed-off-by: Jasti Sri Radhe Shyam Co-authored-by: Jasti Sri Radhe Shyam --- .../Zeeve_Parachain_deployment_zoombienet_testing_automation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md index aae0ff28f08..fb58dc20bec 100644 --- a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md +++ b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md @@ -174,7 +174,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps | 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start with parachain setup for the desired Zombie-net | | 3. | Node type support | Implement setup of all node types including Full node, Validator node and Collator node for the respective relay chain and parachain within the configured Zombie-net. | | 4. | Cloud agnostic setup | The larch setup will be cloud agnostic and it can be installed on the choice of cloud, instructions and documentation will be provided for the same. | -| 5. | User management | The larch will allow to setup different users with desired permissions and access controls such as add, delete zombie-net, view, delete logs and save, delete templates. | +| 5. | Network Management | Implement the larch tool with a user-friendly interface, features for execution info, network deletion, template cloning, and management, along with robust error handling, for seamless setup of networks and templates. | From 1681f011670025f631994f4c890ec6047e9f2b47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Forn=C3=B3s?= Date: Mon, 5 Jun 2023 09:51:33 +0200 Subject: [PATCH 389/665] Ocelloids Monitoring SDK grant application (#1715) --- applications/ocelloids_monitoring_sdk.md | 298 +++++++++++++++++++++++ 1 file changed, 298 insertions(+) create mode 100644 applications/ocelloids_monitoring_sdk.md diff --git a/applications/ocelloids_monitoring_sdk.md b/applications/ocelloids_monitoring_sdk.md new file mode 100644 index 00000000000..1dbde9d2289 --- /dev/null +++ b/applications/ocelloids_monitoring_sdk.md @@ -0,0 +1,298 @@ +# Ocelloids: Monitoring SDK + +- **Team Name:** SO/DA zone +- **Payment Address:** Fiat 04.05.2023, 16:37 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview + +Ocelloids is an open-source software development kit for building monitoring applications for Substrate-based networks. With Ocelloids, you can easily set up complex multi-chain monitoring logic. + +## Project Details + +The project's features are outlined in the following sections. Three primary features are planned to be delivered as part of the grant: + +1. Multi-chain support: configurable multi-chain wrapper for Polkadot.js Promise and Rx APIs to simplify setup for multi-chain monitoring. +2. Core Components: a set of reactive operators for sourcing core Substrate data, such as events and extrinsics, and reactive controls for filtering and transformation over it. The core components will encapsulate common patterns like call batching and multi-signature calls. +3. Domain logic for ink! smart contracts monitoring. + +### 1. Multi-chain Support + +Ocelloids provides a configurable multi-chain wrapper for Polkadot.js Promise and Rx APIs, simplifying setup for multi-chain monitoring. + +Example usage: + +```javascript +const substrate = new SubstrateApis(new ConfigFromFile()) + +const polkadotPipe = substrate.polkadot.pipe( + // Some monitoring logic +) + +// Subscribe to events on one chain +polkadotPipe.subscribe( + event => console.log("Something happened on Polkadot: ", event) +) + +// Pipes for different chains can be merged +const monitorOnManyChains = merge( + polkadotPipe, + kusamaPipe, + statemintPipe +) + +monitorOnManyChains.subscribe( + ({ chain, event }) => console.log(`Something happened on ${chain}: ${event}`) +) +``` + +### 2. Core Components + +Ocelloids provides a set of [reactive operators](https://rxjs.dev/guide/operators) for sourcing, transforming and filtering core Substrate data such as events and extrinsics. Additionally, the core components take care of common patterns like call batching and multi-signature calls. + +#### **Data Sourcing** + +Reusable subscriptions to events and extrinsic calls on Substrate networks. Here are some illustrative code snippets of the main functionalities: + +```javascript +import { + events, + newExtrinsics, finalisedExtrinsics, pendingExtrinsics, + flattenBatch, extractMultiSigCall, + historicEvents +} from '@ocelloids/core' + +// Subscribe to new events on Polkadot +substrate.polkadot.pipe( + events() +).subscribe( + event => console.log("New event on Polkadot: ", event) +) + +// Subscribe to new extrinsics on Polkadot and extract underlying call(s) +substrate.polkadot.pipe( + newExtrinsics(), + flattenBatch(), // Flatten batch into individual calls + extractMultiSigCall(), // Extract underlying call of multisig operations + ... // some monitoring logic over calls +).subscribe( + call => console.log("New call on Polkadot: ", call) +) + +// Subscribe to new extrinsics on finalised blocks +substrate.polkadot.pipe( + finalisedExtrinsics() +).subscribe( + ext => console.log("New finalised extrinsic on Polkadot: ", ext) +) + +// Subscribe to pending extrinsics on Polkadot +substrate.polkadot.pipe( + pendingExtrinsics() +).subscribe( + exts => console.log("Pending extrinsics on Polkadot: ", exts) +) + +// Subscribe to events on Polkadot starting from block 15192447 +substrate.polkadot.pipe( + historicEvents(15192447) +).subscribe( + event => console.log("New event on Polkadot: ", event) +) +``` + +#### **Reactive Controls** + +The control components allow the system to react to external configuration changes and other on-chain activities. + +Example usage of reactive control with JSON filter: + +```javascript +import { events, jsonFilter, ControlQuery } from '@ocelloids/core' + +// Query for filtering events +const transfersQuery = new ControlQuery({ + $and: [ + { 'event.section': 'balances' }, + { 'event.method': 'Transfer' }, + { + $or: [ + { 'event.data.from': ALICE }, + { 'event.data.to': ALICE } + ] + } + ] +}) + +// Subscribe to events of Alice creating a new proxy account +// and update transfersQuery to filter events involving +// the new proxy account instead. +substrate.polkadot.pipe( + events(), + jsonFilter(new Query({ + 'event.section': 'proxy', + 'event.method': 'ProxyAdded', + 'event.data.who': ALICE + })) +).subscribe( + // Change transferQuery to start filtering + // balance transfer events of Alice's new proxy account + event => transfersQuery.change({ + $and: [ + { 'event.section': 'balances' }, + { 'event.method': 'Transfer' }, + { + $or: [ + { 'event.data.from': event.data.delegatee }, + { 'event.data.to': event.data.delegatee } + ] + } + ] + }) +) + +// Subscribe to balance transfer events filtered using transfersQuery +// It will first monitor Alice's account for balance transfer events +// After Alice creates a new proxy account, it will switch to monitoring the proxy instead +substrate.polkadot.pipe( + events(), + jsonFilter(transfersQuery) +).subscribe( + event => console.log("Balance transfer event: ", event) +) +``` + +#### **Substrate Type Conversions** + +We will provide type conversions for necessary Substrate objects that retain both key-value mapping and primitive types, i.e. a mix between the human and primitive representation, defaulting to the human one. This conversion allows easy JSON filtering and matching operations. + +### 3. Domain Logic Components + +The above examples of balance transfer monitoring only involve JSON filtering over events. However, there will be more complex cases where it could be required to query on-chain storage and make some computations over the results along the monitoring stream. Ocelloids SDK aims to extract reusable core logic for FRAME pallets as domain logic components to simplify the development process for these use cases. + +#### ink! Smart Contracts Monitoring + +The Ocelloids SDK will provide domain logic components for monitoring ink! smart contracts which will take care of: + +- filtering Substrate events and extrinsics for contract events and calls +- resolving and loading contract metadata +- decoding contract event and call with ABI metadata +- converting decoded parameters to typed key-value mapping for easy JSON filtering + +Example usage of contract components: + +```javascript +import { jsonFilter, ControlQuery } from '@ocelloids/core' +import { contractEvents, contractCalls } from '@ocelloids/components/contracts' + +const CONTRACT_ADDRESS = "5FCqFC5xdPDv8mCkaiC2hDbRauc3pg15XDEJme98BjyCsqNU" + +// Monitor transfer events emitted by the contract +substrate.rococoContracts.pipe( + contractEvents(CONTRACT_ADDRESS), + jsonFilter(Query.of({ + 'event.name': 'Transfer', + 'event.param.from': ALICE, + 'event.param.value': { $gt: 100000000 } + })) +).subscribe( + event => console.log("New transfer event: ", event) +) + +// Monitor transfer calls +substrate.rococoContracts.pipe( + contractCalls(CONTRACT_ADDRESS), + jsonFilter(Query.of({ + 'call.method': 'Transfer', + 'call.param.value': { $gt: 100000000 } + })) +).subscribe( + call => console.log("New transfer call: ", call) +) +``` + +### Tech Stack + +We will use Typescript since we are building up upon Polkadot.js API. +We will also use [RxJS](https://rxjs.dev/) under the hood for our reactive operators and data streams. +We are considering [Mingo](https://github.com/kofrasa/mingo) or similar technology for data transformation and filtering operations using MongoDB query language. + +## Ecosystem Fit + +Ocelloids SDK provides several advantages to the ecosystem: + +1. Ocelloids is the first open-source SDK to build complex monitoring applications. Its design provides a smooth experience for developers by abstracting away the underlying complexity of the monitoring logic. +2. It provides reusable components that take care of common patterns for reactive sourcing and filtering, including call batching and multi-signature calls, which can be complex and time-consuming to implement manually. +3. Ocelloids' domain logic for ink! smart contract monitoring will be a valuable addition to the Substrate ecosystem. Smart contract monitoring is an essential infrastructural piece for Dapp developers as seen by the popularity of services such as OpenZeppelin Defender and Forta detection bots. There is currently a lack of similar sophisticated services for ink! contracts and Ocelloids SDK will provide the necessary base to build powerful ink! monitoring applications. + +## Team :busts_in_silhouette: + +### Team members + +- Marc Fornós +- Xueying Wang + +### Contact + +- **Contact Name:** Marc Fornós +- **Contact Email:** frozen.pomelo@gmail.com + +### Legal Structure + +N/A + +### Team's experience + +**Marc Fornós** has been designing and implementing software systems for 20 years. He is an expert in the area of distributed systems and data-intensive applications. His experience ranges from warehouse automation with radio-frequency terminals, to being the technical director of an airline post-sale revenue optimization software-as-a-service platform, generating millions in incremental revenue during eight years of operation. In the recent past, he was in charge of evolving a commercial Ethereum block explorer and bootstrapping an explorer for Substrate-based networks focused on the contracts pallet and ink! smart contracts. + +**Xueying Wang** pivoted to software development after completing an MSc. in Aerospace Engineering and has been in the industry for the past eight years. During this time, she pioneered conversational AI assistants for airlines, counting more than 20 assistants in production covering ten languages for customer service, FAQ and in-chat purchases. She also built a scalable publish-subscribe system to trigger actions on flight feed events for the automated agents. She participated in designing a composable Solid POD/RDF data browser and bootstrapping an explorer for Substrate-based networks focused on the contracts pallet and ink! smart contracts. + +We applied, implemented and delivered the following grants under our previous employer: +* https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_explorer.md +* https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_phase_2.md + +### Team Code Repos + +- https://github.com/mfornos +- https://github.com/XY-Wang +- https://github.com/frozenpomelo (shared account) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 28,000 USD + +### Milestone 1 + +- **Estimated duration:** 2 months +- **FTE:** 2 +- **Costs:** 28,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic guide that explains how to set up and run a monitoring application. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 1. | Core SDK | As described in [Multi-chain Support](#1-multi-chain-support) and [Core Components](#2-core-components). | +| 2. | ink! Contracts Domain Logic | As described in [ink! Smart Contracts Monitoring](#ink-smart-contracts-monitoring). | +| 3. | Example application | A Node.js CLI tool to execute the ink! smart contract monitoring logic and log the alerts. | + + +## Future Plans + +Our long-term vision is to offer an end-to-end solution accessible as a web application to allow end-users to configure monitoring agents and subscribe to on-chain activities of interest. +The web user interface exposes the domain logic components for monitoring use cases. For notifications, we will integrate with a notification centre solution, like [Novu](https://novu.co/). + +We will start with contracts monitoring for parachains and solo chains that integrate `pallet-contracts`. Later, we plan to expand the offering to other pallets and networks, including custom pallets of parachains and solo chains. The key differentiator with existing solutions is the bundling of vertical logic per pallet with complex monitoring patterns. + +Additionally, we will explore integrating the core technology into [Forta](https://forta.org/) bots. + +Other enhancements: + +- We aim to expand the domain-logic components to other FRAME pallets like `multisig`, `xcm` and `staking`. +- We aim to provide a comprehensive collection of [Node-RED](https://nodered.org/) nodes. It will allow for easy integration with thousands of existing building blocks for visual flow programming. +- Finally, we plan to support time series to aggregate data over time. This functionality will help users identify trends, such as when balance transfers exceed 100 DOT within a week. + From c6ec7e454277a4f82ddec2476b682de640c4bcd9 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 5 Jun 2023 20:59:18 +0200 Subject: [PATCH 390/665] Update index.md Ocelloids --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 33c128df881..7e5d5652f6f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,6 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | +| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | [🔝](#menu) From 5fe9f85c090388fdfb194ed2ba4a9f61ba1f4a4a Mon Sep 17 00:00:00 2001 From: Shaivik Semwal <60818312+lawmeskiviahs@users.noreply.github.com> Date: Wed, 7 Jun 2023 00:18:33 +0530 Subject: [PATCH 391/665] Grants webapp (#1766) * IDE issue resolution grant application * level changed to 2 and pricing adjusted * webapp draft 1 * Update Grant_management_webapp.md * Update Grant_management_webapp.md * ent * modified milestones --- applications/Grant_management_webapp.md | 184 ++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 applications/Grant_management_webapp.md diff --git a/applications/Grant_management_webapp.md b/applications/Grant_management_webapp.md new file mode 100644 index 00000000000..8ef3dbedc74 --- /dev/null +++ b/applications/Grant_management_webapp.md @@ -0,0 +1,184 @@ +# Grant Management Webapp + +- **Team Name:** Antier Solutions Pvt. Ltd. +- **Payment Address:** 1XhNxALoCmXF86aiwZtdDJspjWZBiRX9UfbJ4jQsWN15eSu (DOT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is in response to the open RFP: https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/grant_management_webapp.md + +### Overview + +The Grant Management Web Application is a comprehensive software solution designed to streamline and enhance the process of managing grants. It aims to provide w3f and other grant-making institutions with a centralized platform to efficiently handle grant applications, evaluation, tracking, reporting, and overall administration. By reducing the number of clicks, the web application will enable better navigation of data, better UI, greater ease and effectiveness in the grant management process. + +### Project Details + +#### Key Features: + +- Organised relevant data. +- Github API integration to carry out relevant actions. + +Technical Architecture + +![Grant Management Webapp(draft 2)-Technical Architecture (1)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/e24b6156-b755-40ae-bc09-624c75e860fc) + +- Mockups/designs of any UI components + +### Core Components: + +#### Front-End: +1. UI: +- Project Dashboard: ![image_2023_05_25T13_03_13_705Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/57801170-bdf1-4a5f-aead-05b4c2c7402b) + +- Project Details: ![image_2023_05_25T13_03_13_706Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/a2518aad-0d3c-4c39-a829-6b8d52f483b4) + +- Team Dashbard: ![image_2023_05_25T13_03_13_710Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/db6dc265-b0f2-4d87-909b-9c71803821cb) + +- Team Details (applications): ![image_2023_05_25T13_03_13_710Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/aaca6386-9f96-4f09-a93a-c3670662ffa9) + +- Team Details (projects): ![image_2023_05_25T13_03_13_709Z](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/a63aa155-5e74-4fb1-adf5-cb395f609308) + +- Application Dashboard: ![image_2023_05_25T13_03_13_703Z (1)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/0dcb6be4-2e24-4a5a-975b-c6f0ace10f51) + +The discussions, commit, and file changes pages will be designed same as they are shown on a PR in github. Approvals, reviews and rejections will be handeled in the discussions tab +- Application Details: ![image_2023_05_25T13_03_13_703Z (2)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/117f4eff-a6a4-4782-905d-f4abc62ecd1e) + +- Delivery Dashboard: ![image_2023_05_25T13_03_13_704Z (2)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/16fd5ba0-a4de-47eb-a23a-624bed68177c) + +- Delivery Details: ![image_2023_05_25T13_03_13_704Z (1)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/cd96dc63-ed61-4f80-ab8b-16aa87337321) + +2. Back-End API Integrations + +#### Back-End: +1. Front-End API Integrations +2. Github API Integrations +3. Database API Integration +4. Cron Job +5. Data Extractor - Service that extracts data from the MD files for storage +6. Web Hook Handler - Service that will listen to events and then handle the respective functionality + +#### Database +![Grant Management Webapp(draft 2)-DB final draft (1)](https://github.com/lawmeskiviahs/Grants-Program/assets/60818312/f133eaba-caca-4ceb-add4-8268d08226a7) + +### Things not included in the project: + +There is no wallet support/oracle for treasury pallet in this application but these can be integrated upon further discussion. + +### Technology Stack + +- Front-end: HTML5, CSS3, JavaScript (React) +- Back-end: Node.js (Express.js) +- Database: MongoDB +- Authentication and Authorization: Github (github apps) +- Cloud Hosting: Github Marketplace + +### Ecosystem Fit + +The W3F grants program is growing by the day. It is quite a hassle for the grants committee to browse the Grant Program Repositories. This application aims to achieve two things: 1. Consolidate releveant information from the Grant Program Repos; 2. Provide Github Actions functionality to deal with the process of the Grant Program within the app itself. + +## Team :busts_in_silhouette: + +### Team members + +- Kulwinder Singh (Backend) +- Shaivik Semwal (Frontend) +- Aanchal Kathuria (Tester) + +### Contact + +- **Contact Name:** Karan Chopra +- **Contact Email:** karan.chopra@antiersolutions.com + +### Legal Structure + +- **Registered Address:** E-221, Phase 8B, Industrial Area, Sector 74, Sahibzada Ajit Singh Nagar, Punjab 160059 +- **Registered Legal Entity:** Antier Solutions Pvt. Ltd. + +### Team's experience + +- Antier is a thought-to-finish partner for customers in their blockchain journey. We advise and consult our clients on blockchain technologies and tailor solutions utilising our powerful blockchain ecosystem. We help customers experiment and deploy proof-of-concepts on blockchain technologies and incrementally expand to scale to production releases. Our thought leaders regularly educate customers, partners, CXOs on the power of blockchain for today and tomorrow. +- Workdone by Antier in Substrate ecosystem +1. Antier worked on the validator and nominator apps for substrate based blockchains to offer a unique and better user experience . +2. We have also worked on creating an optimised and homogenised design focused on improving the navigation, information architecture, user flow tasks, content design and graphic elements for a seamless and easy browsing experience. +3. We have customised the default reward mechanism in the staking pallet of the substrate chain by integrating the sustainability and reliability score(which is calculated by ESG scores and Uptime of the validators repectively) of the validators in the current reward system. +4. We were able to run EVM and WASM machines natively in the substrate chain so that the chain will be able to support both EVM(Metamask, Remix, Web3.js, etc) and WASM(WebAssembly target, INK framework, etc) tooling. +5. We were able to replicate the whole polkadot ecosystem(Relay chain, Parachains, XCM), Where parachains are use case specific chains and communicate through XCM protocol with each other. + +- Our team has been proactively participating in the Substrate Stack exchange and we ask/answer question related to ink!, Substrate, parachain. We rank in the top 6% people in the Substrate Stack Exchange. + +- Profiles of our team: +1. https://substrate.stackexchange.com/users/2372/arunjot-singh +2. https://substrate.stackexchange.com/users/2281/amit-kumar-yadav +3. https://substrate.stackexchange.com/users/354/shubham-gupta + +- Our organisation is the technical partner for 5ire chain: https://5ire.org/ + +- Our team has worked on multiple IDE which include an EVM compatible IDE for solidity, IDE for WASM contracts for ink! based smart contracts. The EVM IDE is live and the link is : https://ide.5ire.network/ + +### Team Code Repos + +- Kulwinder Singh https://github.com/kulwindersingh-ant +- Shaivik Semwal https://github.com/lawmeskiviahs + +### Team LinkedIn Profiles (if available) + +- Kulwinder Singh https://www.linkedin.com/in/kulwinder-singh-394384130 +- Shaivik Semwal https://www.linkedin.com/in/shaivik-semwal-468a13202 + + +## Development Status :open_book: + +A minimal POC has been made wherein the basic github actions were successfully tested. +Things tested in POC: +1. Created issue in a repo +2. Fetch list of issues in a repo. +3. how to use responses. +4. Get PR list to a repo +5. Get PR by number +6. Merge a PR +7. Get comments on a PR +8. Update a comment on PR +9. Add comment on PR + +- POC (code)- [ghApi](https://github.com/lawmeskiviahs/ghApi) +- POC (tested on) [helloGhpi](https://github.com/lawmeskiviahs/helloGhapi) +- [Github API Ref Sheet](https://docs.google.com/spreadsheets/d/1RWB4XAMFj-tKU4nXEDN0ZUXXmVq1gLpEMqFp_WRPthg/edit?usp=sharing) + +Github provides REST API for a lot of github actions. The link to the API docs is [here](https://docs.github.com/en/rest?apiVersion=2022-11-28) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 8 weeks +- **Full-Time Equivalent (FTE):** 3 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 — Teams and Projects + +- **Estimated duration:** 8 weeks +- **FTE:** 3 +- **Costs:** 10000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can browse through the application and perform github actions | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Frontend | We will provide dashboard and details pages for Projects and Teams with all details | +| 2. | Backend | Database integrations and data extractor will be implemented. i.e data from the md files on github will be processed and saved to the database using API | +| 3. | Backend | Github API integrations and web hooks will be implemented so that our application can listen to events and make necessary changes in the db | +| 4. | Data Base | DB schema implementation | + + +## Future Plans + +We plan to deliver the following after receiving the Grants Committee's approval : + +Oracle for treasury pallet integration is being researched meanwhile and also looking for decentrallised alternative for github. Upon further discussions with the grants committee we shall go ahead with this + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Grants Portal \ No newline at end of file From ef2f7e18252a75886bb295f81e9df6c67f649ac4 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 6 Jun 2023 20:51:03 +0200 Subject: [PATCH 392/665] Update index.md Grants webapp --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 7e5d5652f6f..8e65467d28b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -66,6 +66,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | +| [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant) | [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | [🔝](#menu) From a3c94b172ef4934a70c229a13971cb12d5f0f8d0 Mon Sep 17 00:00:00 2001 From: CHOIX Date: Tue, 6 Jun 2023 21:23:46 +0200 Subject: [PATCH 393/665] Grantmaster (#1765) * add Grantmaster proposal * add DB schema * add data sync + milestones * Adjust interface and cost * Replan milestones --- applications/grantmaster.md | 221 ++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 applications/grantmaster.md diff --git a/applications/grantmaster.md b/applications/grantmaster.md new file mode 100644 index 00000000000..4b6a142487e --- /dev/null +++ b/applications/grantmaster.md @@ -0,0 +1,221 @@ +# GrantMaster: Web3 Grants Management Application + +- **Team Name:** Zaniyar Jahany +- **Payment Address:** 0xFCFDB7351Da159B8f53217be2a671dDa943735fc (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is in response to the RFP [Grant Management Web Application](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/grant_management_webapp.md). + +### Overview + +This project aims to create a comprehensive web application for managing grant applications (and deliveries in a possible follow-up grant) for the W3F Grants Program, based on data in the GitHub repositories. I will provide an interactive and user-friendly interface for easier navigation for the W3F grant committee. This includes a crawler for easy extraction and calculation of relevant data, a REST API for accessing said data as well as a web-based frontend with a modern look & feel. + +As a passionate developer in the field of blockchain and decentralized projects, I recognize the value that transparency and organization bring to grant management. I'm excited to create a tool that enhances the process for the Web3 Foundation. + +### Project Details + +The following components will be included in the GrantMaster: + +- Crawler: I will provide an efficient crawler that is resilient to failure and fetches the data from GitHub that is neccessary for the scope of this project. +- API: I will provide a comprehensive and efficient API. +- UI/UX components: Detailed designs can be found [here](#wireframes) for Grants Page, Grant Details, Teams, and Stats. +- Tech Stack: The web app will use a React (TypeScript) frontend that comes in [ant design](https://ant.design/docs/react/introduce), Node.js (TypeScript) crawler, Node.js (TypeScript) REST API and a MongoDB database. I'll use Mongoose to enforce the [db schema](#db-schema). For GitHub interaction, I'll use GitHub's REST API. + +#### DB Schema + +The database schema is organized into several TypeScript interfaces representing the essential entities involved in the GrantMaster application. These interfaces are a rough draft of the structure of data I'll be working with and how that data will be represented in the mongodb database. + +Please note that these interfaces are subject to change and refinement as the project progresses and more specific needs or requirements are identified. However, it is important to emphasize that such changes are expected to be additive in nature. This means that while additional attributes might be included to these interfaces as needed for the completeness and accuracy of the data representation, no existing attributes are anticipated to be removed. So, you can consider these as the minimum set of data that will be stored and managed in the system. + +```TypeScript +interface Grant { + name: string; + level: number; + paymentAddress: string; + githubPRs: string[]; + applicationLink: string; + applicationDoc: string; + status: string; + lastUpdated: Date; + committeeApprovals: string[]; + committeeRejections: string[]; + milestones: Milestone[]; + totalCosts: number; + totalFTE: number; + totalDuration: number; +} + +interface Milestone { + name: string; + grantName: string; + duration: number; + FTE: number; + costs: number; + deliverables: Deliverable[]; + codeRepos: string[]; + license: string; + githubPrs: string[]; + deliveryLink: string; // Scope: follow-up grant + deliveryDoc: string; // Scope: follow-up grant + evaluations: Evaluation[]; +} + +interface Deliverable { + name: string; + number: string; + description: string; + specification: string; +} + +interface Team { + name: string; + teamMembers: TeamMember[]; + grants: Grant[]; + contactName: string; + contactEmail: string; + website?: string; + registeredAddress?: string; + registeredLegalEntity?: string; + codeRepos: string[]; +} + +interface TeamMember { + name: string; + linkedin?: string; + github?: string; +} + +// Scope: follow-up grant +interface Evaluation { + author: string; + link: string; + doc: string; +} +``` + +For the actual implementation of the database the [Mongoose npm package](https://www.npmjs.com/package/mongoose) will be used. + +#### Data Synchronization Approach +The data synchronization is designed to seamlessly update the applications (and deliveries, as part of a possible follow-up grant), making sure we're always working with the most current information. This process will be executed using a combination of a configurable crawler and GitHub Actions. + +**GitHub Actions** + +I will deliver a set of GitHub actions that triggers the crawler whenever new comments, pull requests, or PR reviews are added. + +**Configurable Crawler** + +To support and complement the push-based system facilitated by GitHub Actions, I will also employ a configurable crawler. The crawler will be responsible for selectively updating specific applications (or deliveries, as part of a possible follow-up grant). Furthermore, the crawler will parse the data from GitHub Actions for incremental updates. This ensures a scalable system that doesn't need to process entire datasets for minor updates, enhancing the efficiency of our data synchronization strategy. + +### Ecosystem Fit + +The project fits into the ecosystem by enhancing the grant management process for the Web3 Foundation, thus contributing to the growth and development of the Dotsama ecosystem. The target audience is the Web3 Foundation grant committee and other similar grant programs. The project meets the need for efficient grant management and transparency. + +As per my knowledge, no similar projects exist within the Dotsama ecosystem. + +## Team :busts_in_silhouette: + +### Team members + +- Zaniyar Jahany + +### Contact + +- **Contact Name:** Zaniyar Jahany +- **Contact Email:** jaha@zhaw.ch +- **Website:** https://www.MetaRoom.City + +### Legal Structure + +- **Registered Address:** No registred entity +- **Registered Legal Entity:** No registred entity + +### Team's experience + +Zaniyar Jahany is a Senior science associate at ZHAW (university of applied science in Zürich) in the field of Augmented Reality and Blockchain at the Industry 4.0 Lab. Beside his research at the university he is one of the co-founders of https://swissDAO.space, the biggest Web3.0 builder community in Switzerland and the founder of https://MetaRoom.city, a swiss-made decentral, self-owned, self-hosted Metaverse for everyone which builds on top of todays web2.0 ecosystem, and enables web3.0 functionallity. + +### Team Code Repos + +- https://github.com/Zaniyar/plant2earn/ + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/zaniyar-jahany-a5224387/ + + +## Development Status :open_book: + +This application is in reply to the RFP [Grant Management Web Application](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/grant_management_webapp.md). + + +### Wireframes + +Here are some rough Lo Fi wireframes: + +![Crawler](https://github.com/Zaniyar/plant2earn/assets/4472438/0dc2a196-777e-418f-838c-d8664be3596d) +![Deliveries](https://github.com/Zaniyar/plant2earn/assets/4472438/ba8d6de7-8351-4a37-b266-569e2cf55565) +![Grants](https://github.com/Zaniyar/plant2earn/assets/4472438/9a697d9b-74c0-4593-a769-e1991d87a737) +![Stats](https://github.com/Zaniyar/plant2earn/assets/4472438/1075c353-2610-41f4-8839-f06e4d8f583c) +![Teams](https://github.com/Zaniyar/plant2earn/assets/4472438/ec9e1117-7a40-4521-9c4f-eb5ce71a692a) + + +To get a feeling how the page will look like, I prepared this Hi Fi wireframe. Keep in mind that some details are missing, due to limitations in the wireframing framework: + +![image](https://github.com/Zaniyar/plant2earn/assets/4472438/f9082c64-bf5d-4e7b-8050-b52d03aeb151) + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 0.6 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 — Development of API and Grant Frontend + +- **Estimated Duration:** 2 months +- **FTE:** 0.6 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the application and its various features. | +| **0c.** | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. I will provide a guide describing how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that explains the development process, the challenges faced and how I overcame them, and the functionalities of the GrantMaster application. | +| 1. | Crawler & REST API | I will develop a configurable crawler and a REST API that facilitates interaction with the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program). The crawler will update specific applications or deliveries on demand through the web UI (see [Data Synchronization Approach](#data-synchronization-approach) chapter). | +| 2. | GitHub Actions | GitHub Actions will be used to trigger updates in the application whenever new comments, pull requests, or PR reviews are added on GitHub (see [Data Synchronization Approach](#data-synchronization-approach) chapter). | +| 3. | Frontend Module: Grants Page | I will develop a Grants Page that will display all the grants in a tabular format. Grants will be searchable by team name, application name as well as full text search. They will be filterable and sortable by pull request status, github label, last updated timestamp, number of approvals & rejections of committee members and all this data will also be displayed in the table. The table will be customizable and attributes will be hidable by the user. It will include all grants - both active and inactive. | +| 4. | Frontend Module: Grant Details | I will create a Grant Details module that displays detailed information about a specific grant when clicked on in the Grants Page. This will include any parsable data, such as team name, level, payment address, team members, legal entity, milestones and their related info (duration, FTE, costs), etc. in a structural manner. In case an application is not fully parsable, the affected attributes will hold an indication. Finally, the application document will be displayed and the links for any related PRs will be displayed. | +| 5. | Frontend Module: Teams | This module will present all teams involved in the grants in a concise and searchable manner. | +| 6. | Frontend Feature: Grants Committee Lense | This feature will allow a user experience that is optimised to a specific grants committee member. The committee member will be able to provide his username (using simple textbox without authentication) and they'll be able to see in which pull requests for grants applications and amendments they've participated and how long it's been since they last commented on it. I think this will be useful for priorizing grant application reviews. | + +## Future Plans + +I'm planning to implement the following milestone as part of a possible follow-up grant. + +#### Additional Milestone — Development of API and Grant Frontend + +- **Estimated Duration:** 2 months +- **FTE:** 0.6 +- **Costs:** 11,600 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the application and its various features. | +| **0c.** | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. I will provide a guide describing how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that explains the development process, the challenges faced and how I overcame them, and the functionalities of the GrantMaster application. | +| 1. | Crawler & REST API | I will extend the previously developed configurable (see [Data Synchronization Approach](#data-synchronization-approach) chapter) crawler and REST API to facilitate interaction with the [Grant-Milestone-Delivery GitHub repository](https://github.com/w3f/Grant-Milestone-Delivery/). | +| 2. | GitHub Actions Integration | I will integrate GitHub Actions to trigger updates in the application for new comments, pull requests, or PR reviews in the Grant-Milestone-Delivery repository (see [Data Synchronization Approach](#data-synchronization-approach) chapter). | +| 3. | Frontend Module: Deliveries Page | I will develop a Grant Deliveries Page that will display all the deliveries in a tabular format. They will be searchable by team name, application name as well as full text search. They will be filterable and sortable by pull request status, github label, last updated timestamp. It will include all deliveries - both active and inactive. Also, the deliveries will be included in the team and grant pages that were delivered in M1. | +| 4. | Frontend Module: Stats | A Stats module will be developed to provide statistics about the grant applications and deliveries. | + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** personal recommendation \ No newline at end of file From b75b3164b7c0c7cf6b911ac3dc58ef53243ca885 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 6 Jun 2023 21:25:54 +0200 Subject: [PATCH 394/665] Update index.md Add Grantmaster --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 8e65467d28b..1a51398fdb5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,6 +67,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant) | [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | +| [Zaniyar Jahany](https://github.com/Zaniyar/plant2earn/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | [🔝](#menu) From 86f5f57787db1b019f859e3cedf3c8fc2b26d60a Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 6 Jun 2023 16:47:21 -0400 Subject: [PATCH 395/665] Update RFPs (#1792) * Update and rename grant_management_webapp.md to grant_management_webapp.md * Update rfps.md * Update rfps.md * Update and rename IDE_for_ink_Smart_Contracts.md to IDE_for_ink_Smart_Contracts.md * Update rfps.md * Update rfps.md --- .../IDE_for_ink_Smart_Contracts.md | 2 +- .../{Open => Under Development}/grant_management_webapp.md | 2 +- docs/rfps.md | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) rename docs/RFPs/{Open => Under Development}/IDE_for_ink_Smart_Contracts.md (93%) rename docs/RFPs/{Open => Under Development}/grant_management_webapp.md (96%) diff --git a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md b/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md similarity index 93% rename from docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md rename to docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md index 623b882e162..97e828261a2 100644 --- a/docs/RFPs/Open/IDE_for_ink_Smart_Contracts.md +++ b/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md @@ -1,6 +1,6 @@ # Browser based IDE for ink! Smart Contracts -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/ink-playground-ide-improvements.md) * **Proposer:** [David Hawig](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/RFPs/Open/grant_management_webapp.md b/docs/RFPs/Under Development/grant_management_webapp.md similarity index 96% rename from docs/RFPs/Open/grant_management_webapp.md rename to docs/RFPs/Under Development/grant_management_webapp.md index 0f71c53ff0b..f627fa715c4 100644 --- a/docs/RFPs/Open/grant_management_webapp.md +++ b/docs/RFPs/Under Development/grant_management_webapp.md @@ -1,6 +1,6 @@ # Grant Management Web Application -* **Status:** Open +* **Status:** Under Development [here](https://github.com/w3f/Grants-Program/pull/1766) as well as [here](https://github.com/w3f/Grants-Program/pull/1765) * **Proposer:** [randombishop](https://github.com/randombishop) diff --git a/docs/rfps.md b/docs/rfps.md index 37d53440b04..4c6c130c1ca 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -29,8 +29,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 25.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | -| [grant_management_webapp.md](RFPs/Open/grant_management_webapp.md) | 09.03.2023 | -| [IDE_for_ink_Smart_Contracts.md](RFPs/Open/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | @@ -50,8 +48,10 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | -| [implementation-benchmarking.md](RFPs/Open/implementation-benchmarking.md) | 16.03.2023 | +| [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | +| [implementation-benchmarking.md](RFPs/Under%20Development/implementation-benchmarking.md) | 06.06.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 05.07.2021 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 31.05.2022 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 23.11.2021 | From c9b69d9a25c8f9fe29caa42564c8a48b9b2abd7d Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 7 Jun 2023 14:46:41 -0400 Subject: [PATCH 396/665] Fix RFP images (#1794) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastian Müller --- docs/RFPs/Open/img/grants_details.png | Bin 198066 -> 0 bytes docs/RFPs/Open/img/grants_page.png | Bin 336802 -> 0 bytes .../grant_management_webapp.md | 7 +++++-- 3 files changed, 5 insertions(+), 2 deletions(-) delete mode 100644 docs/RFPs/Open/img/grants_details.png delete mode 100644 docs/RFPs/Open/img/grants_page.png diff --git a/docs/RFPs/Open/img/grants_details.png b/docs/RFPs/Open/img/grants_details.png deleted file mode 100644 index c18ac90f08e062452e2b1897ef3f1cdb9c1054e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198066 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%0D4%dQVlQxT@e;Xzc%F)lDq7+T4~*8 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

y@3Lw@in{tGVC{6J0r`=1}A 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 diff --git a/docs/RFPs/Open/img/grants_page.png b/docs/RFPs/Open/img/grants_page.png deleted file mode 100644 index c376cd444b61dd3e93e398b62eeefa5210110b10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336802 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 z 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

|;jW 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

T^I+~ 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

IrCU{%|+PW9P; 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 Ob5mCFYN5<+zyAdynS5jb diff --git a/docs/RFPs/Under Development/grant_management_webapp.md b/docs/RFPs/Under Development/grant_management_webapp.md index f627fa715c4..918d8d73d0d 100644 --- a/docs/RFPs/Under Development/grant_management_webapp.md +++ b/docs/RFPs/Under Development/grant_management_webapp.md @@ -50,7 +50,9 @@ Also, these are just an option, and the RFP doesn't require building from these. For example: -![screenshot_grants_page](./img/grants_page.png) +![screenshot_grants_page](https://github.com/keeganquigley/Grants-Program/assets/1389409/0eda6f0b-071d-4d44-9835-196167479c07) + + ### Grants details @@ -61,7 +63,8 @@ For example: - All documents related to the grant and links to their pull requests (application, deliveries and evaluations) For example: -![screenshot_grants_details](./img/grants_details.png) +![screenshot_grants_details](https://github.com/keeganquigley/Grants-Program/assets/1389409/098962a3-249f-4fa5-8c03-9d0dbc7f32eb) + ### Teams From 60f74d9aee1e5d3f071d2a265c862b6d4aec39cc Mon Sep 17 00:00:00 2001 From: Roman <133760597+fidiroman@users.noreply.github.com> Date: Wed, 7 Jun 2023 13:47:06 -0500 Subject: [PATCH 397/665] FiDi DotSight Analytics Proposal (#1748) * FiDi Dotsight Analytics Grant Proposal Submission * FiDi DotSight: additional technical details * FiDi DotSight: user authentication & SQL UI clarified --- applications/fidi-dotsight-analytics.md | 325 ++++++++++++++++++++++++ 1 file changed, 325 insertions(+) create mode 100644 applications/fidi-dotsight-analytics.md diff --git a/applications/fidi-dotsight-analytics.md b/applications/fidi-dotsight-analytics.md new file mode 100644 index 00000000000..dc4ebeaeb57 --- /dev/null +++ b/applications/fidi-dotsight-analytics.md @@ -0,0 +1,325 @@ + + + +# FiDi DotSight: Analytics Data Platform for DotSama + +- **Team Name:** FiDi +- **Payment Address:** 14fptYf88mjarGJ3gAjhd8YH3Cefdgx4C8Jb6chvJXFszb2i (USDT / Polkadot) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +This project is a response to Keegan Quigley’s [RFP #1539](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/analysis-website-and-data-platform.md) inspired by Rob Habermeier’s Polkadot forum [post](https://forum.polkadot.network/t/dune-analytics-style-data-service-for-polkadot-kusama/271). + +### Overview + +We propose the development of FiDi DotSight, a platform designed to facilitate interactive on-chain analysis in the Polkadot and Kusama ecosystems. Think Dune for DotSama. FiDi will achieve this by providing a scalable platform that enables users to query on-chain metrics, integrate new protocols, and build beautiful custom dashboards with the power of Subsquid’s data archives. To accomplish this, FiDi, with Subsquid’s support, will offer a SQL-like interface for developers to associate existing and newly developed squids with a dashboard of their choice, along with a suite of default ready-to-use analytical dashboards for users to visualize on-chain data. + +The ultimate goal of FiDi is to advance on-chain and portfolio analytics and accelerate data insights coverage across the Polkadot ecosystem. By creating a user-friendly platform that streamlines the process of building custom dashboards, FiDi aims to simplify the process of sharing powerful data visualizations with the community. FiDi is best positioned to deliver this level of data precision and analytics since the proposed scope is an organic extension of its portfolio tracking capabilities, and the upstream on-chain data is largely available as a result of the ongoing partnership and collaborative [expansion](https://medium.com/subsquid/subsquid-and-fidi-join-forces-to-bring-advanced-data-insights-to-web3-users-763094773676) with Subsquid. + +DotSight will support other non-Polka L0s, too. Since FiDi and its upstream data are cross-chain from day one, DotSama users will be able to build analytical dashboards spanning data from multiple ecosystems, e.g., Ethereum + Polkadot or Avalanche + Polkadot et al. With Subsquid’s data and FiDi’s analytics, we aim to enable analysts and power users to interactively query high-quality data, create custom charts, and share metrics with others, further accelerating DotSama’s on-chain activity and the breadth of nuanced insights uncovered by its users. We aim to provide the Polkadot and Kusama ecosystems with a powerful tool for on-chain analysis that will serve the community for years to come. + +### Project Details + +#### Background #### + +[FiDi](https://fidi.tech/) is a portfolio tracker offering high-precision data for 100+ chains and 2k+ protocols. It’s a non-custodial and lightweight presentation layer on top of on-chain data. [Subsquid](https://subsquid.io/) is a full-stack blockchain indexing SDK and specialized data lakes (Archives) optimized for the extraction of large volumes of historical on-chain data. We’ve been [joining forces](https://twitter.com/subsquid/status/1628827848621555712) for a while to deliver the highest quality analytics to DotSama. + +#### High-Level Architecture #### + +![FiDi DotSight Data Architecture](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20Data%20Interface%20Global.png "FiDi DotSight Architercture") + +The key components include, i.e., from the user side to the data provider: +- Basic Analytical Primitives + - Functionality: a collection of default views available for data visualization + - Audience: blockchain analyst + - Technology Choice: modular React widgets that we will evolve towards a SaaS approach: more lightweight, embeddable, thematically customizable by data streams, and sharable externally widget; with optional web components. +- Custom User Views + - Functionality: a customizable view tied to a SQL query or a pre-defined set of basic views + - Audience: blockchain analyst + - Technology Choice: same as #1 +- Developer UI and Data Interface + - Functionality: an interface where the new view is created, and its metadata is specified + - Audience: blockchain analyst or developer + - Technology Choice: The UI’s basis is the same as #1; + - (i). The user-defined SQL, GraphQL, and dashboard metadata will initially live in a public Github with CI/CD and merging logic automated. We will opt for storing all metadata in a distributed cloud database, i.e., GCP CloudSQL (PGSQL backend) or BigQuery, as the project evolves post-Milsetone 3. + - (ii). The Data Interface will manifest as a typical stateless GCP microservice mimicking the rest of our data infrastructure, i.e., a Node.js service in the Google App Engine for the execution layer; and CloudSQL (PGSQL) and BQ for the data persistence and caching layers, respectively. + - (iii). The Data Interface will have an external endpoint queryable by users willing to build on top of it and FiDI itself. +- Data Mixer + - Functionality: provides a source of truth for any served data point regardless of the upstream provider; processes the queries + - Audience: FiDi devs + - Technology Choice: similar to the data interface and query engine, the mixer is a dedicated Node.js service running in GCP’s App Engine; it currently caches recent raw data (but not aggregates) in CloudSQL, and we’ll evolve the data layer into both caching (BQ) and historical data (CloudSQL) layers covering aggregates and raw data. +- Query Engine + - Functionality: sanitizes and runs the user-specified queries and handles views production + - Audience: FiDi and Subsquid devs + - Technology Choice: same as #4; + - (i). We will enable querying via SQL with blockchain-optimized syntax, e.g., by relying on TrinoSQL or Dune’s harmonizer; and in later releases - via a JavaScript native code and no-code options. + - (ii). A typical Data Interface’s query passed to the engine will include a triplet of desired (UI Widget, Mapper, Data Source) +- Aggregates, Views, and Squids Databases + - Functionality: persistent distributed storage for user-created and internal non-materialized views + - Audience: FiDi and Subsquid devs + - Technology Choice: data layer same as #4; +- GiantSquid [API](https://docs.subsquid.io/giant-squid-api/) + - Functionality: direct access to the data lake via GraphQL + - Audience: FiDi and Subsquid devs, and blockchain devs + +**Technical Stack Overview** +- Frontend (Web): we currently rely on [React](https://react.dev/) and [Typescript](https://www.typescriptlang.org/) and will look into transitioning to [Next.js](https://nextjs.org/) as a part of this proposal +- Backend: we currently leverage Typescript, Express, and [PostgreSQL](https://www.postgresql.org/). By Milestone 4, we'll also consider leveraging [Nest](https://nestjs.com/) if it fits the project's needs +- Data Layer: [GraphQL](https://graphql.org/) and RPC for upstream providers, PostgreSQL elsewhere +- Application Layer: [App Engine](https://cloud.google.com/appengine) +- Database Layer: GCP [CloudSQL](https://cloud.google.com/sql) and [BQ](https://cloud.google.com/bigquery) +- Serving layer: rest of GCP stack, i.e., CDN and Cloud Load Balancing +- For more, see also in-line comments above in the components overview + + +#### Analytical Primitives (Default Views) #### + +We will provide a versatile suite of analytical dashboards for users, including default, advanced, and customizable views. The following analytical primitives will be surfaced to developers as a part of this proposal: +- Default dashboard: Pie Chart +``` +Sample Metrics: >, precision: int> +``` +- Default dashboard: Single Metric +``` +Sample Metrics: +``` +- Default dashboard: Assets List +``` +Sample Metrics: >, precision: int> +``` +- Advanced dashboard: Staking Rewards +``` +Sample Metrics: see below +``` +- Customized dashboard: On-Chain Metrics +``` +Sample Metrics: see below +``` +Default Dashboards: Pie Chart, List, and Metrics![FiDi Analytical Primitives](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20Analytical%20Primitives%20Default.png "FiDi Analytical Primitives") +Advanced Dashboard: Staking Rewards +![FiDi DotSight Advanced Staking Example](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20Advanced%20Staking.png "FiDi DotSight Advanced Staking Example") + + + +#### Data Interface #### + +We will design and implement the data interface with a developer flow that will include the following steps: +* specifying an upstream data source, i.e., a Squid URI +* specification of metrics to stream +* aggregation logic +* schema mapping and morphing logic +* any external sources or other parameters + +Developers will be able to deploy their new data schemas via git pull requests at the initial stages and, later, in a fully automated fashion, with the new dashboards going live after deployment. + +Additionally, developers will be able to extend the existing dashboards’ queries and augment them with any new data sources they’d see fit: first, as a Github-based form and purely through the UI at the later milestones. + +![FiDi DotSight Data Interface](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20Data%20Interface.png "FiDi DotSight Data Interface") + + +#### User authentication/authorization #### + +To ensure the security and privacy of our users, we will implement wallet-signed authentication as the initial method for contributors to engage with DotSight (See Tier 1). This approach will enable analytics developers to access new dashboards and protocol submissions, which will be reviewed by our team. Data querying and existing dashboard usage will remain public and will not require authentication. + +This approach is incremental to our existing connect-the-wallet functionality, does not require any user authentication data stored on FiDi, and overall balances the privacy/security concerns with the user experience best. + +In the future milestones and outside of the scope of this proposal, we plan to expand authentication methods to support a more diverse user population and role separation. Our roadmap includes Github OAuth (Tier 2) for dashboards and protocol deployment and other OAuth or verified email (Tier 3) for social functionality. +![FiDi DotSight Auth Protocol](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20DotSight%20Auth%20Protocol.png "FiDi DotSight Auth Protocol") + + #### From 0 to 1 #### + +We’ll rely on two parachains with sufficiently different key community metrics as our lighthouse use cases (see 4.a-c, Milestone 1). These will serve as a catalyst and feasibility demonstration for the analytics functionality. FiDi will later continue scaling to all other parachains in the DotSama ecosystem and, with Subsquid’s collaboration, incentivize both developers and users to contribute. + +The success would be a blockchain-level customized analytics dashboard with advanced analytics delivered to the community. The scope will include data interface development, specifying squid queries, data mapping, dashboard logic, and integration. We believe this will help us test developer flow, deliver analytics immediately useful to several sufficiently large parachains, spark the community interest toward building more custom views, and accelerate our future milestones. + + +As the initial candidates for the advanced metrics, we’ve so far selected Astar and Moonbeam; however, we are open to the foundation’s feedback on whether an alternative approach is preferred. You can follow our current progress in the beta analytics [sample wallet](https://beta.app.fidi.tech/portfolio?wallet_id=WGGvXmacJdPLw5abykehBb8MjsvQGomiHA79W9niHAWpDUB). + +Advanced Dashboard: Customized On-Chain Metrics +![FiDi DotSight Advanced dApp Staking Astar Example](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20DotSight%20dApp%20Staking%20Astar%20Wallet.png "FiDi DotSight Advanced dApp Staking Astar Example") + +**Metrics Breakdown** (Milestones 1-2) +| Wallet-level metrics | dApp-level metrics | +| ----------- | ----------- | +| Balances, Rewards, Values | UAW | +| Free tokens | Historical new wallets per dAapp | +| Vesting | Historical Transactions Number| +| EVM Deposits | Historical Volume | +| dApp names | Historical balance per dApp | + +**Language Agnostic Analytics** +Since DotSight aims to be a combination of presentation and querying layer on top of the higher-level metrics above, it will abstract away the smart contracts implementation details and functionality, i.e., EVM, non-EVM, Vyper, WASM, or others will be supported. + +### Ecosystem Fit + +As on-chain analysis becomes an increasingly important field, there is a growing need for a platform that enables users to access and query high-quality data easily. Our proposed project is an optimal fit for the Polkadot and Kusama ecosystems. The current options for querying data via GraphQL are limited to backend services such as Subquery and Subsquid; however, our proposed data interface will provide a user- and developer-friendly way to surface customized analytics, similar to Dune Analytics in the Ethereum community; however, with more flexibility, customization, and at a higher level of abstraction. + +Our decentralized platform will enable analysts and power users to interactively query and visualize high-quality data, creating custom charts and visualizations to share metrics with others. By easing the process of building dashboards, sharing data visualizations, and integrating data providers, we will encourage projects to create custom dashboards to share data with the Polkadot & Kusama community. + + +## Team :busts_in_silhouette: + +### Team members + +* Roman Dovgopol — CTO, Architect +* Shaun Saylor — CEO, Product +* Anton Ryabov — Eng Lead, Developer +* Kirill Suvorov — Frontend Lead, Web/Mobile +* Finn Marten — Design Lead + +### Contact + +- **Contact Name:** Roman Dovgopol +- **Contact Email:** founders@fidi.tech +- **Website:** https://fidi.tech + +### Legal Structure + +**Registered Address:** 400 NW 7th Ave, #14310, Ft. Lauderdale, FL 33311, USA + +**Registered Legal Entity:** FiDi Tech, Inc + +### Team's experience + +FiDi brings together a team of builders and venture-backed operators with expertise in distributed systems, web3, data analytics, science, and infrastructure engineering at the internet scale. + +Anton leads FiDi’s engineering, particularly the data and backend infrastructure. Most recently, he has been an Engineering Manager supporting marketplace teams at Yandex. Anton’s key expertise is in data and distributed systems at scale. + +Kirill leads FiDi’s mobile and NFT data development. Most recently, he has been a Senior SWE at Yandex, focusing on the front end. Kirill’s key expertise is in cross-platform mobile and web development at scale. + +Roman is a venture-backed founder and engineering leader passionate about building great products. He previously led the data organization at Twitter, particularly Data Engineering, Science, ML, and Analytics – scaling the core of their ad tech and analytics at scale. + +Shaun is a seasoned operator and engineering leadership recruiter. He previously supported product teams at Google, Twitter, and Meta, among others. Both Shaun and Roman are founders in the past. + +Finn leads the design at FiDi and brings in his experience supporting creative work at Riot Games and Porsche Design. He also runs his own design agency, 0xsphere, where he challenges the boundaries of visual user experience in web3. + +We all came together to found FiDi in 2022 with a mission to democratize access to data in web3, [initially](https://twitter.com/cryptofidi/status/1605927633728012288) as a portfolio tracker and, more recently, as a fully-fledged high-precision analytics platform. Our strengths lie in the ability to tackle complex technical challenges and deliver high-quality products for our users + +### Team Code Repos +- [https://github.com/fidi-tech](https://github.com/fidi-tech) + +### Team LinkedIn Profiles +- [https://www.linkedin.com/in/romandovgopol/](https://www.linkedin.com/in/romandovgopol/) +- [https://www.linkedin.com/in/shaun-fidi-2a973324a/](https://www.linkedin.com/in/shaun-fidi-2a973324a/) +- [https://www.linkedin.com/in/anton-ryabov-ab98241aa/](https://www.linkedin.com/in/anton-ryabov-ab98241aa/) +- [https://www.linkedin.com/in/finn-marten-16b792208](https://www.linkedin.com/in/finn-marten-16b792208) +- [https://www.linkedin.com/in/kirill-suvorov-93597863](https://www.linkedin.com/in/kirill-suvorov-93597863) + +## Development Status :open_book: + +The basis for the project has been established. FiDi today offers four default dashboards available for the community (one metric, three metrics, a pie chart, and an asset list) and a fully customizable [advanced analytics dashboard](https://beta.app.fidi.tech/portfolio?wallet_id=Zo7ZR8xMMSCmp7gWgp5gmmzRTwg1iaEXeghJVMeE6PRWCFz) currently under development and in open beta with ambassadors and core teams of several parachains. Subquid’s recent release of [GiantSquid API](https://docs.subsquid.io/giant-squid-api/overview/) makes surfacing metrics and deploying new squids intuitive for developers and L1 operators. + +This proposal aims at delivering (a) a data interface connecting the squids’ query code and customized dashboards and (b) both streamlining and decentralizing the productionization of new analytics queries for the community by community. + +All infrastructure deliverables belong to the teams’ domains of expertise and serve as a continuation of our previous track record. + +## Development Roadmap :nut_and_bolt: +### Overview + +- **Total Estimated Duration:** 4.5mos (~3.5mos left) +- **Full-Time Equivalent (FTE):** 3.5 FTE +- **Total Costs:** 25,000 USD + +### Milestone 1 — Data Interface API + +- **Estimated duration:** 1mo +- **FTE:** 4 +- **Costs:** 7,500 USD + +- Summary: This milestone covers a complete data interface connected to GiantSquid and FiDi dashboards. It also includes fully productionized custom Squids and FiDi views for Astar staking dApp analytics. +- Success: an open-sourced data interface as well as fully operational dashboards for two selected parachains + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 +| **0b.** | Documentation | We will provide documentation on every supported metrics class and an educational tutorial explaining the typical way to interpret the data, deploy a data interface configuration, and select the desired dashboard. | +| **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | +| **1a.** | GiantSquid data funneling | We will extend the existing data streaming infrastructure to support an arbitrary query to GS and user-built squids. | +| **1b.** | Data Aggregation module | We will provide support for user-specified (GraphQL or SQL) aggregation logic that would be inputed via the data interface and invoked at the streaming stage. | +| **1c.** | Off-chain sourced addresses support | We will provide rudimentary support for additional data materialization parameters, e.g., pricing via liquidity pool addresses. This will be extended to any off-chain data in an oracle-like fashion in future milestones. | +| **2a.** | Data Interface for developers | We will provide a configuration-based interface (initially via git pull requests, then automated in Milestone 2) with key specifications for the new views. We will leverage React and Typescript on the frontend and Typescript with Nest and PGSQL on the backend. +| **2b.** | Schema mapping and morphing | We will provide a configuration-based paradigm for specifying: the desired metrics mapping, aggregation logic, upstream GiantSquid URI, and desired materialized view.| +| **2c.** | Data interface: view construction | We will provide developers with the ability to select a desired analytical dashboard from the pre-selected collection (see five views explained in the architecture section; fully customizable views will make it to future milestones). These UI components will also be implemented via React and Typescript.| +| **2d.** | Data interface: Deployment | We will provide developers with the ability to schedule their customer view’s deployment (automatically at recurring times in the future milestones). The deployment action will be a UI module, and the propagation/consensus will occur via GitHub at first and via a PGSQL query in future milestones.| +| **3a.** | Dashboards: Default Analytical Views | We will integrate the default views, i.e., pie chat, 1/3-metrics view, and list of assets, with the data interface and make it available for the ad-hoc developer deployment. For 3a-c UI components, we will similarly rely on React + Typescript.| +| **3b.** | Dashboards: Advanced Staking View | We will integrate the advanced staking view, e.g., the dApps names, nominator TVLs, balances, rewards, and ranks, with the data interface and make it available for ad-hoc developer deployment. | +| **4a.** | Lighthouse use cases: Squids for Wallet-specific metrics | We will implement new squids in GraphQL surfacing wallet-specific metrics for two parachains with the following metrics that need to be surfaced via GiantSquid: Free tokens, Vesting, EVM Deposits, and dApp names. | +| **4b.** | Lighthouse use cases: Squids for dApp-specific metrics | We will implement new squids in GraphQL surfacing wallet-specific metrics for two parachains with wallet-specific metrics for dApps: TVL change per dApp, Active (UAW) and net new wallets per dApp (x2), historical Transactions / Volume / Balance per dApp (x3). | +| **4c.** | Lighthouse use cases: customized dApp views | As the first two use-cases, a feasibility proof and an accelerator, we will provide the community with a fully integrated customized dApp analytics dashboard leveraging the data interface (2a-2c), the advanced staking view (3b), and the data aggregation module (1a-1c). | + + +### Milestone 2 — Views with Network- and dApp-level Metrics + +- **Estimated Duration:** 1mo +- **FTE:** 2.5 +- **Costs:** 5,000 USD + +- Summary: This milestone covers support for essential metrics at the parachain and dApp level under each chain. Many would require custom squids built as a part of this scope. +- Success: developer UI supports views with newly sourced metrics. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 +| **0b.** | Documentation | We will provide documentation on every supported metrics class and an educational tutorial explaining the typical way to interpret the data, navigate the developer UI, specify the required metadata, deploy a data interface configuration, and select the desired dashboard. | +| **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | +| **1a.** | dApp-level signals: collator metrics | We will generalize prior work from Milestone 1 to span collator/nominator activity and make metrics such as uptime, block production rate, block processing time, rank/nominator rank, name, and value locked available in the views. For 1a-2a, the respective in GraphQL squid query and GiantSquid's code are also in scope; the UI components will be written in React + Typescript and the backend code in Typescript + Nest + PGSQL.| +| **1b.** | dApp-level signals: user activity | Additionally, the dApp-specific user activity metrics will be surfaced, e.g., UAW, net new wallets, historical transactions, volume, and balance per dApp. Respective squid query and GS code are also in scope. | +| **2a.** | Network-level signals | We will generalize prior work from Milestone 1 to span L1-level metrics and activity made available in the developer UI, e.g., UAW per network, number of new wallets, adoption rates, unstaked tokens currently in wallets, tokens in circulation, and tokens staked or locked. Respective squid query and GS code are also in scope. | + + +### Milestone 3 — Developer UI & Automated View Deployment + +- **Estimated Duration:** 1mo +- **FTE:** 2.5 +- **Costs:** 5,000 USD + +- Summary: This milestone covers a no-code option for developers to productionize new views on FiDi via specific squids on GiantSquid. +- Success: developer UI launched, and new users are able to productionize new views without any code. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 +| **0b.** | Documentation | We will provide documentation on every supported metrics class and an educational tutorial explaining the typical way to interpret the data, navigate the developer UI, specify the required metadata, deploy a data interface configuration, and select the desired dashboard. | +| **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | +| **1a.** | dApp-level signals: collator metrics | We will provide an intuitive web interface for specifying the desired metrics mapping, aggregation logic, upstream GiantSquid URI, and desired materialized view. The UI will be an extension of the one built in M2 and also leverage Typescript + React; and Nest + CloudSQL (PGSQL) + Typescript on the backend. | +| **1b.** | Online testing & deployment | We will provide an intuitive web interface for querying the new view for deployment and validating its configuration. The UI's part technology choices is same as 1a.| +| **2a.** | Deployment validation & View status | We will implement testing and validation layers to ensure the user-inputted configurations for newly spun-up views and GS queries are performant. We will surface the view “status,” e.g., up, down, missing data, and similar. | +| **2a.** | Automated and ad-hoc deployment | We will decouple the existing infrastructure to support ad-hoc and scheduled deployments for newly created views. The CI/CD and automation for 2a-b will rely on schedule App Engine workers. | + +### Milestone 4 — Interactive SQL Query Engine for Views + +- **Estimated Duration:** 1.5mos +- **FTE:** 4 +- **Costs:** 7,500 USD + +- Summary: This milestone covers a SQL editor as a new option for developers/users to productionize views on FiDi via specific squids on GiantSquid. +- Success: developer UI supports FiDi SQL-powered views. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 +| **0b.** | Documentation | We will provide documentation on querying methodology, e.g., functions, operators, data types, and statement reference; as well as an educational tutorial explaining the typical way to run the queries, associate them with the views, interpret the data, navigate the developer UI, and share the views. | +| **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | +| **0e.** | Article | We will publish an announcement article capturing the work completed in the grant along with the educational guides and success stories, enabling users to further leverage and expand DotSight’s functionality. | +| **1.** | FiDi SQL implementation | We will provide a query engine for blockchain data. Initially forked from [TrinoSQL](https://trino.io/) and/or [harmonizer](https://github.com/duneanalytics/harmonizer), we will extend the functionality to support variable views and embed GraphQL upstream queries. We'll simialrly rely on Typescript + Nest + CloudSQL (PGSQL) for the query engine's implementation. ![FiDi SQL Engine UI Example](https://storage.googleapis.com/fidi-tech-static1/w3f/FiDi%20SQL%20Engine.png "FiDi SQL Engine UI Example")| +| **2.** | SQL Editor View UI | We will augment the no-code view developed in Milestone 2 with SQL functionality allowing users to rehash the existing views as well as create new ones. The Editor UI will include the runner log, a tree of dependencies and suggested resources, and the editor interface itself. See the UI direction in the following wireframe:| +| **3.** | Advanced Querying Documentation | We will provide a comprehensive guide for optimizing the queries, both language- and database-specific, along with real-world examples | + + +## Future Plans +DotSight will provide a scalable, incentivized platform for developers to contribute to the Polkadot ecosystem's growth by integrating new protocols and on-chain metrics. We aim to continue extending the number of parachains with advanced analytics supported on FiDi, the breadth and depth of analytical dashboards, and the pre-developed squids available. + +For further development, we will also streamline the user/developer funnel to the point where simple SQL/GraphQL or no-code user flows suffice to seamlessly productionize and share new dashboards matching user needs. For the further go-to-market, we plan to attract content creators and crypto influencers by offering customizable portfolio views, analytical dashboards, and reward-based contributions to extend coverage and analytics on the platform. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** +Via Subsquid founders - Marcel & Dmitry and the W3F staff - Sebastian & David. + +**Follow Our Socials** +- Twitter: [https://twitter.com/cryptofidi](https://twitter.com/cryptofidi "FiDi's Twitter") +- Medium: [https://blog.fidi.tech/](https://blog.fidi.tech/ "FiDi's Medium") +- Telegram: [https://t.me/+vxA51osvNrw5NGUx](https://t.me/+vxA51osvNrw5NGUx "FiDi's Telegram") +- Discord: [https://discord.gg/fhaRzWZa2r](https://discord.gg/fhaRzWZa2r "FiDi's Discord") +- Github [https://github.com/fidi-tech](https://github.com/fidi-tech "FiDi's GitHub") +- LinkedIn: [https://www.linkedin.com/company/cryptofidi/](https://www.linkedin.com/company/cryptofidi/ "FiDi's LinkedIn") \ No newline at end of file From afedc65d40e3c2a3d11e0890daea96cecba42e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 7 Jun 2023 21:17:55 +0200 Subject: [PATCH 398/665] Update index.md Add FiDi DotSight and fix table layout --- applications/index.md | 63 ++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 31 deletions(-) diff --git a/applications/index.md b/applications/index.md index 1a51398fdb5..cc523da80a7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -40,34 +40,35 @@ Use this page for an overview of all public grants and their status. Use the sid ### 🏄‍♀️ Wave 18 - Q2 2023 -| Team | Project | Link | Terminated | First Delivery | Completed | -| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | -| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | -| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | -| [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | -| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | -| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | -| [Collective Intelligence Labs](https://collectiveintelligence.dev/) | [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | -| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | -| [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | -| [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | -| [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | -| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | -| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | -| [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | -| [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | -| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | -| [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | -| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | -| [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | -| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | -| [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant) | [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | -| [Zaniyar Jahany](https://github.com/Zaniyar/plant2earn/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | +| [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | +| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | +| [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | +| [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | +| [Collective Intelligence Labs](https://collectiveintelligence.dev/)| [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | +| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | +| [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | +| [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | +| [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | +| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | +| [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | +| [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | +| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | +| [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | +| [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | +| [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | [🔝](#menu) @@ -77,12 +78,12 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | -| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | +| [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | -| [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | @@ -98,7 +99,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☒ | ☐ | | [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | -| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | +| [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | | [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | From 8a0021368a54949cb12b2882bfe87924ef462ce2 Mon Sep 17 00:00:00 2001 From: Tony Riemer Date: Mon, 12 Jun 2023 12:51:02 -0300 Subject: [PATCH 399/665] Submit Cryptex Proposal (#1660) * add cryptex proposal * update proposal * update cryptex proposal: etf w/ IBE * update proposal * address feedback * remove q file --- applications/cryptex.md | 295 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 295 insertions(+) create mode 100644 applications/cryptex.md diff --git a/applications/cryptex.md b/applications/cryptex.md new file mode 100644 index 00000000000..1e1da2fe8e4 --- /dev/null +++ b/applications/cryptex.md @@ -0,0 +1,295 @@ +# Cryptex: EtF Network with Aura + +- **Team Name:** Ideal Labs +- **Payment Address:** 0x2CDA3C7D6e21Cc4f43C170c0dFf2e9F3B3B5E889 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +This is an EtF (encryption-to-the-future) network based on Aura. This proposal adds identity based encryption (IBE) in conjunction with a modified version of Aura to enable an EtF network, wherein messages can be encrypted to a slot in the future. + +### Overview + +This proposal presents a blockchain that uses a modified Aura in which blocks are sealed . We then implement an encryption-to-the-future (EtF) scheme, where messages can be encrypted for arbitrary slots and epochs in the future. Our proposal consists of a runtime, which modifies Aura and introduces a new pallet to enable the identity based cryptosystem (IBC), a light client, and an SDK which handles synchronization with the blockchain, slot scheduling, and offchain encryption and decryption functionality. In essence, this presents a simplified flavor of 'timelock encryption', though sacrifices full-decentralization for ease of implementation and feasibility (for the time being). + +Being the first EtF network in the ecosystem, Cryptex introduces several new cryptographic primitives which would be useful to others as well. This proposal lays the foundation for a more robust system later on, using a proof of stake consensus (Sassafras) and more sophisticated cryptographic primitives for EtF, such as [McFly](http://fc23.ifca.ai/preproceedings/189.pdf) or based on [commitment witness encryption](https://eprint.iacr.org/2021/1423.pdf). An EtF network can enable randomness beacons, sealed-bid auctions, non-interactive secret sharing, and many other use cases. + +We want to build more extensive and secure decentralized data tools, for which this proposal lays the foundation. We believe that the internet is a better place when it's more fair for all. + +### Project Details + +The major pieces: +1. [IBE Block Seals](#ibe-block-seal-in-aura) +2. [Encryption-to-Future](#encryption-to-future-slots) + +For a more in-depth (informal) look at the mathematics behind this, look at [etf_aura.pdf](https://github.com/ideal-lab5/Grants-Program/blob/ibe/applications/etf_aura.pdf) + +#### What this is not +- For the scope of the proposal, we are assuming a static, well defined validator set using PoA consensus based on Aura. +- the proposal does not highlight any specific privacy preserving tools nor does it use threshold signatures or any specific MPC protocols +- most of that is scoped for the future though + +#### Notation and Terminology + +For the following, assume that we are using curve BLS12-381. As such, we will refer to its scalar field using $\mathbb{Z}_p$. Similarly, we have the pairing friendly elliptic curve groups $\mathbb{G}_1$ and $\mathbb{G}_2$. + +#### Background + +**Threshold Secret Sharing** + Threshold secret sharing (TSS) was first introduced by [Shamir in 1979](https://web.mit.edu/6.857/OldStuff/Fall03/ref/Shamir-HowToShareASecret.pdf). Our protocol uses a TSS scheme with a semi-trusted coordinator to obtain (*not derive) a shared session secret key and shared session public key among the session validator set. We explain this below, and more in depth in [etf_aura.pdf](https://github.com/ideal-lab5/Grants-Program/blob/ibe/applications/etf_aura.pdf). + +**Identity Based Cryptography** + Identity Based Cryptography (IBC) was first introduced by [Shamir in 1984](https://link.springer.com/content/pdf/10.1007/3-540-39568-7_5.pdf). Since then, there has been significant research into identity based cryptosystems, I present an overview to the reader [here](https://csrc.nist.gov/csrc/media/Presentations/2023/stppa5-ibe/images-media/20230209-stppa5-Dan-Boneh--IBE.pdf). A complete IBC consists of six algorithms: `Setup, Keygen, Encrypt, Decrypt, Sign, Verify`. Our network will leverage the sign and verify functionalities to seal and verify blocks, and will use the encrypt and decrypt functionalities to enable encryption-to-future-slots. + + We will use the [Boneh-Franklin identity based encryption scheme](https://crypto.stanford.edu/~dabo/papers/bfibe.pdf) (BF IBE) in this proposal in order to encrypt messages to future slots. + +#### Block Seals in Aura + +The goal of this is to introduce an IBE-BLS block seal in Aura, where each slot has a unique role associated with it that we can encrypt to. In the future, we intend to migrate to [Sassafras](https://eprint.iacr.org/2023/031.pdf). This is the first step to building encryption to the future. We will do this by creating a fork of Aura where we create a DLEQ proof of a BLS signature, which is then used to sign the block using a Fiat-Shamir transform. + +Assume there is a static set of validators defined on network genesis. In Aura, each validator defined in the validator set authors a block in sequential (round robin) order. More concretely, let $A = \{A_1, ..., A_n\}$ be the well defined set of authorites. For now, we'll assume that this set is static. In Aura slots are divided into discrete slots of $t$ seconds each. For any slot $s$, the winner of the slot is determined by A[s % |A|], where $A$ is the set of authorities defined on genesis. Note that this implies, in most cases, that a validator will author more than one block during an epoch. + +**Implementation** + +We provide an overview of how the IBC can be used in the context of our blockchain using Aura. We will attempt to make this a technical treatment while omitting some of the mathematical details. For details, we again refer the reader to [etf_aura.pdf](https://github.com/ideal-lab5/Grants-Program/blob/ibe/applications/etf_aura.pdf) + +Our implementation makes use of the [SessionManager](https://paritytech.github.io/substrate/master/pallet_session/trait.SessionManager.html) trait to perform session shared public/secret key setup within a new pallet, which facilitates the identity based cryptosystem. + +**Genesis/Setup** + + Each validator generates a private key and public key for the underlying signature scheme of the blockchain. Theoretically this could be implemented on any scheme, but we use BLS12-381. Each $A_i \in A$ generates keys $(sk_i, pk_i)$, storing the secret key $sk_i$ securely (in their [keystore](https://paritytech.github.io/substrate/master/sp_keystore/trait.Keystore.html)), with the public keys used to define the initial validators. This is just standard setup. + + On genesis, each authority must have a known secret available. To make this as simple as possible, we will simply hardcode the genesis secrets within the genesis block. This is the only time the secrets will be encoded in plaintext. + + + Before a new session starts and after the initial session, a semi trusted node, the *coordinator*, is responsible for facilitating the threshold secret sharing. It does this by generating a secret polynomial and secret shares, encrypting them, and distributing them to upcoming session validators prior to the session start. To make things even simpler, the coordinator will also derive public keys for each of the authorities based on the secret shares, and publish the public keys along with the encrypted secrets. + + The coordinator also chooses system parameters for the IBC, a generator $P \in \mathbb{G}_1$, then calculates $P_{pub} = sP$, where $s$ is the secret created the the TSS scheme. Then publish $(P, P_{pub}, (k_1, Q_1), ..., (k_n, Q_n))$ on-chain, where $k_1, ..., k_n$ and $Q_i$ are the public keys. are the encrypted secrets. This will happen at the end of a session during the `new-session` function. + +**Keygen and Identity** + Each slot in any given epoch has a unique role associated with it, which is calculated from the slot schedule. For any given address, epoch, and slot number, we calculate a unique role by hashing the address, epoch, and slot number. Later on when encrypting, we will use this value to verify signatures. That is, the public key is $\hat{Q}_i = H(ID_i = (A_i || e_k || sl_r))$. + +**Block Sealing** + The winner of a slot $s$ calculates a secret key corresponding to the slot seed and uses it to sign the block. This operation aligns with the extract phase of the IBE. We implement this within the Aura client code. This works by computing a DLEQ proof $\pi = (c, r)$ where $r$ is randomly selected from the scalar field and $c = H(R_1, R_2, \hat{Q}_i, S_{slot}, b)$ where $R_1 = r G_1$, $R_2 = r G_2$ (for $G_1$, $G_2$ generators of $\mathbb{G}_1$, $\mathbb{G}_2$ resp.), and $b$ is the block hash. We then use the output to produce a proof of knowledge $pok = c s_i + r$. + +**Validation** + When other nodes import the block, they validate it by obtaining the ID for the slot and calculating the public key $Q_i$ and verifying the signature. We verify the signature by using the DLEQ proof to verify that the secret key used to seal the block was constructed by the proper slot winner. + +#### Encryption-to-Future-Slots + +##### Overview + +We propose an Encryption-to-Future (EtF) scheme on top of the modified Aura consensus proposed above. We enable two flavors of EtF, one which allows for encryption to specific slots in the future (but which relies on a single authority for decryption, who could release the key early or not at all), and another which allows for encryption to specific epochs and requires a threshold of authorities to seal blocks to enable decryption. + +The high level idea for encrypting to a specific slot is that given a duration of time, $t$, we can identify a 'slot seed', a role to which we can encrypt a message such that it will be decryptable after time $t$ passes, when the corresponding secret will be published. We accomplish this by: + - Given a duration $t$ from the current slot, calculate a future epoch and slot which will be active when that time occurs. Then, based on the order of the authorities, we calculate the slot seed. + - Encryption and Decryption: both encryption and decryption happen offchain "for free". We intend to use a symmetric flavor of encryption to accomplish this once the slow seed is known. We would also like to explore using the same approach taken in [Boneh-Franklin IBE](https://crypto.stanford.edu/~dabo/papers/bfibe.pdf) for both encryption and decryption. + +As can be seen, it will be paramount that all participants agree on the same 'time'. + +The second type of EtF that we enable uses the threshold scheme setup in the IBE Block seal section to decrypt data. We build this off of the previous result (encryption to a slot). Here, we aggregate the public keys $\hat{Q}$ derived from each authority's identity and use the same BF IBE scheme to encrypt a message for the aggregated public key. Subsequently, using the same decryption approach as BF IBE, once at least at threshold of validators have release their key share, any messages encrypted for $\hat{Q}$ can be decrypted. + +##### Implementation Details + +Since all of this functionality should happen outside the context of a runtime, we implement this as a specialized light client based on [smoldot](https://github.com/smol-dot/smoldot). + +###### Slot Scheduling + + As mentioned above, the idea is that we can take some arbitrary time in the future, $t_{fut}$, and identify a slot and epoch when that future time is expected to occur (assuming persistent liveness of the network). Very roughly, our approach will be similar to the following: + + If we assume that the current slot index is $sl_{prev}$ and the epoch is $e_k$, then we allow slots to be schedule starting from the next slot in the queue, $sl_{curr}$. Given that each slot lasts a static amount of time, say $t_{slot} \; sec/slot$, we can calculate the slot number $t$ seconds in the future with $sl_{fut} = ((t / t_{slot}) \% s) +1$ where $s$ is the number of slots per epoch. We can then identify the slot winner by calculating $A[{fut}\; \% \; |A|]$, and thus the ID. The authority slot assignments will be provided to the user from a light client, with calculations of slot seeds occuring within the SDK. + +###### Encryption-to-future-slots (EtF) + + Assuming that we have found an ID for a future slot $sl_{fut}$, we now want to encrypt for that slot. We will use the Boneh-Franklin IBE scheme to encrypt the message for the slot. We have a basic implementation of the BF IBE scheme[here](https://github.com/driemworks/BasicIdent). + + The ciphertext can be stored offchain with a reference to it published on-chain (in a pallet or contract) by calculating its sha256 hash, for example. In the future, we will replace this flavor of encryption with a more elegant solution (e.g. some type of witness encryption). + +###### Decryption + +When a slot winner's slot is active, they derive a secret key which they then use to seal the block. Additionally, the derived secret key can also be used to decrypt any messages that were encrypted for this slot. When the slot winner publishes a block, it also publishes its newly derived secret key. Offchain decryption will be possible with the BF IBE decryption mechanism. + +#### High Level Architecture + +We propose the architecture of the system at a high level. It consist of three pieces: +- **blockchain**: The PoA blockchain with modified block sealing as above. It is a substrate based runtime with a new pallet that enables the identity based cryptosystem along with our modifications to Aura. +- **user-agent: sdk & client**: A user-agent which handles slot scheduling, encryption, and decryption, as well as synchronization with the blockchain. +- **application + storage layer**: Could be anything, we will use IPFS in conjunction with a smart contract or a pallet to builds apps on the network. + +![high-level-architecture](https://github.com/ideal-lab5/Grants-Program/blob/951b2794708ec62b012b8c6a3d40e98ba4c17d65/applications/etf.drawio.png?raw=true) + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- Where and how does your project fit into the ecosystem? + - to date, there is no EtF network in the ecosystem + - our project tried to take a rigorous academic approach + - our proposal brings new primitives and capabilities to the ecosystem +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + - parachain + dapp developers: we provide primitives that can allow other chains to use EtF as well. Additionally, using XCM we can explore cross-chain EtF capabilities. + - users: We don't expect standard users to use the core implementation directly, but we will build applications and other protocols on top of the EtF network which users will find interesting and valuable, such as sealed-bid auction, voting application, and secret sharing applications. +- What need(s) does your project meet? + - It provides a flavor of 'timelock encryption' within the ecosystem + - It lays the foundation for enhancements to the network in the future, which could enable more robust, decentralized, and secure use cases, such as a randomness beacon, decentralized secret sharing, lotteries, and more. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + - [Ruby](https://www.ruby.xyz/), sponsored by a w3f grant, enables "cryptographic privacy and access control infrastructure" + - If so, how is your project different? + - Distinct from Ruby protocol, which leverages functional encryption and focuses on monetization of data, where functions can be evaluated over some encrypted data, our design enables encryption to the future 'for free', with monetization outside of the core implementation. + - Ruby incorporates zk proofs and other privacy preserving tools, which we intend to do in the future. + - If not, are there similar projects in related ecosystems? + - [Drand](https://drand.love/docs/timelock-encryption/#what-is-it): Drand, the distributed randomness beacon, uses a DKG and threshold BLS signatures in their 'league of entropy' in order to provide randomness as a service. They also enable flavors or timelock encryption described (here)[https://drand.love/docs/timelock-encryption/#the-math-bit-%F0%9F%A4%93]. + - [Lit Protocol](https://litprotocol.com/): LIT is a protocol that runs on a distributed network of mostly static nodes who each participate in a DKG to enable TSS *threshold signature scheme/threshold secret sharing. LIT, however, isn't a blockchain and it does not use IBE. + +## Team :busts_in_silhouette: + +### Team members + +- Tony Riemer +- Carlos Montoya + +### Contact + +- **Contact Name:** Tony Riemer +- **Contact Email:** driemworks@idealabs.network +- **Website:** https://idealabs.network + +### Legal Structure + +- **Registered Address:** TBD +- **Registered Legal Entity:** TBD + +### Team's experience + +Tony has worked on two, [here as "iridium"](https://github.com/w3f/Grants-Program/blob/master/applications/iris.md) and [here as "Ideal Labs"](https://github.com/w3f/Grants-Program/blob/master/applications/iris_followup.md). + +### Tony Riemer + +I am an engineer and math-lover with a passion for exploring new ideas. I studied mathematics at the University of Wisconsin and subsequently went to work at [Fannie Mae](https://en.wikipedia.org/wiki/Fannie_Mae) and then [Capital One](https://en.wikipedia.org/wiki/Capital_One), where I mainly worked on fintech products, like systems for loan servicing and efficient pricing algorithms. For the previous year and a half, I've been working exclusively in the web3 space, including having worked on two web3 foundation grants [here](https://github.com/w3f/Grants-Program/blob/master/applications/iris.md) and [here](https://github.com/w3f/Grants-Program/blob/master/applications/iris_followup.md) and as an independent consultant. Beyond the web3-sphere, I have dabbled in many open source projects as well as have built several of my own, ranging from computer vision, machine learning, to IoT and video games. Most recently, I attended the Polkadot Blockchain Academy in Buenos Aires, and this new proposal is an application of ideas I learned there applied to my previous grant. + +### Carlos Montoya +I have been doing software for more than 20 years, most recently in the startup world. +- **Blockchain Experience** +I am currently Engineering Manager at Parity's Ecosystem Development department. My passion for web3 started a couple of years ago during covid. I started my journey building smart contracts with solidity, and took part in some boot-camps and hackathons through 2021 and 2022. I built several apps, one of them a decentralized job-board protocol called [web3Jobs](https://ethglobal.com/showcase/web3jobsfevm-inz64) ([Repo](https://github.com/encode-g2-project)). Early this year I had the fortune to participate in the PBA hosted in Buenos Aires, and I have been in love with Substrate and Rust since then. Cryptex's idea emerged during my time in the academy. +- **Software Engineering Experience** + Since early 2021 I have been building [TeamClass](https://www.teamclass.com) as CTO and partner. TeamClass is a b2b marketplace for helping companies with their team-building initiatives through virtual events. We bootstrapped TeamClass ourselves and made sales by 3.8M in our first year. Previously, between 2016 and 2020 I was completely focused on building [StellarEmploy](https://www.stellaremploy.com) with my co-founders, where we had the opportunity to participate in NY ERA (Accelerator), and got institutional capital. StellarEmploy's technology was recently acquired by Learning Collider. Finally, between 2004 and 2015, I was CTO and Chief Architect at [MVM Software Engineering](https://www.mvm.com.co/?lang=en), a technology firm with a deep focus on energy solutions. During my time there I had the responsibility of defining the way of doing software for the entire company, leading very skilled people, building complex software products, and managing hundreds of initiatives for helping the company to expand its operations in Colombia, the Dominican Republic, and Mexico. +- **Carnegie Mellon University** Master of Science Information Technology, 2011 - 2013 +- **Tecnológico de Monterrey** Master in Information Technology Management, 2011 - 2013 +- **Universidad Pontificia Bolivariana** Innovation and Technology Management, 2009 - 2010 +- **Universidad Autónoma de Manizales** Systems Engineer, 1997 - 2002 + +### Team Code Repos + +The intended repos for this project are (but possibly subject to name change): + +- https://github.com/ideal-lab5/substrate +- https://github.com/ideal-lab5/cryptex-node +- https://github.com/ideal-lab5/cryptex-sdk +- https://github.com/ideal-lab5/contracts +- https://github.com/ideal-lab5/cryptex-client + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/driemworks +- https://github.com/carloskiron + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/tony-riemer/ +- https://www.linkedin.com/in/cmonvel/ + +## Development Status :open_book: +- This proposal is a result of the discussion here: https://github.com/w3f/Grants-Program/pull/1660 +- We have an implementation of BasicIdent over BLS12-381 here: [BasicIdent](https://github.com/driemworks/BasicIdent) +- There are many protocols that use some form of witness encryption to accomplish something similar, for example [time lock encryption](https://eprint.iacr.org/2015/482.pdf) or [commitment witness encryption](https://eprint.iacr.org/2021/1423). Our design is inspired by these ideas but uses a simpler approach (for now...). +- [BF IBE](https://crypto.stanford.edu/~dabo/papers/bfibe.pdf) +- [IBS Overview](https://homepage.ruhr-uni-bochum.de/eike.kiltz/papers/ibschapter.pdf) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 30,000 USD + + +### Common Deliverables + +It should be assumed that, unless specified otherwise, each deliverable also includes proper testing (e.g. deliverable (0c)) and documentation of the item, including manual testing, unit testing, and benchmarking. + +The following items are mandatory for each milestone: + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | + +Additionally, outside the scope of the specified milestones, we also intend to formalize the ideas in this proposal within a whitepaper. + +### Milestone 1 — Block Seals + +- **Estimated duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Goal: Implement the IBE block seal in Aura. We do this by creating a new pallet to facilitate the identity based cryptosystem, as well as modifying the Aura pallet and client code. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 1. | Substrate module: IBE Pallet/IBC Setup | We create a new pallet responsible for storing parameters needed for the identity based cryptosystem as detailed above. This includes param generation and distribution of the msk to authorities. The outcome of the deliverable is the pallet capable of storing system params for the IBC, including the keygen phase managed by the SessionManager. | +| 2. | Substrate module: Aura Pallet | We modify the Aura pallet to be able to calculate epk's for each known session validator. Pubkeys will be calculated *on session planning* and encoded in runtime storage. | +| 3. | Substrate module: Aura Client | We modify the Aura client to sign blocks with its secret key generated with the identity based cryptosystem as detailed above. We also modify the signature validation phase of consensus to verify the signature/DLEQ proof. For the sake of ease, the block author will publish its secret along with the block. | +| 4. | Substrate Module: Validator Incentives | We ensure that validators are rewarded when they participate honestly within the protocol (i.e. publish a secret). We do this by making our token inflationary, where each block author is rewarded in additional tokens when they correctly output a secret. | + +### Milestone 2 — Encryption to Future Slots + +- **Estimated Duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Goal: We want to enable encryption to future slots, including slot scheduling, encryption, and decryption. The following items also necesitates the development of a basic user interface, which uses the light client and SDK which we develop. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 1. | Light Client | We implement a light client (based on smoldot) with the added functionality that it: a. can open connections to specific nodes b. ensure clocks are properly set, otherwise return an error. This is to ensure proper synchronization, so that slot scheduling can be reliable/accurate. | +| 2 | User Interface: setup | We introduce a user interface which will act as a testbed for integrations between the light client and the SDK. The user interface will be a React project, will connect to the network via the light client, and will interface with IPFS (for storage and retrieval of ciphertexts). This intention is to integrated both light client and SDK and also to ensure that interactions with the chain function as intended. | +| 3. | SDK: Slot Scheduling | We implement slot scheduling logic to identify a future slot based on some future 'time' and derive its inputs. | +| 4. | SDK: Encryption | Using the output of the slot scheduler, the user agent will be able to encrypt to a future slot or epoch. Ciphertexts will be stored offchain in IPFS, and we will refer to stored ciphertexts by their CID. | +| 5. | SDK: Decryption | After a block is authored for the specified future slot, we can decrypt the secret by fetching the secret published with the block (if encrypted to a slot) or a threshold of published secrets (encrypted to epoch) and using it to decrypt the ciphertext created previously. | + +### Milestone 3: Putting it all together - Sealed-Bid NFT Auction PoC + +- **Estimated Duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 10,000 USD + +Goal: We want to put everything developed thus far into action by developing an application that runs on the EtF network. A simple use case is to create a sealed-bid auction platform, where bids are sealed until a certain slot in the future. This work will include the development of an auction contract along with a user interface. At the end of this milestone, we will have a small testnet hosted on google cloud as well as a dapp for sealed-bid NFT auctions. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 1. | Smart Contract: Auction Contract | We develop a smart contract (and host it on our blockchain) that enables an on-chain auction where participants can issue a sealed-bid which will unseal at some specific future slot. The sealed bid is stored in the contract. | +| 2. | UI/SDK: Auction Interface | We develop an interface based on the testbed created in the previous milestone. This interface will have functionality to make calls to contracts, storage, and the blockchain. We also use this milestone to 'batrtletest' our SDK and resolve any issues that could arise in a real-world use case. | +| 3. | UI + Testnet Deployment | We deploy validator nodes to google cloud and build our first testnet. We will setup telemetry and monitoring in order to gauge real-time performance. We will also host our UI production build on IPFS and setup proper certs. | + +## Future Plans + +- enhance the design to use privacy preserving mechanisms +- migrate to the new sassafras consensus instead of Aura +- investigate and implement more advanced approaches to EtF +- complete a whitepaper which details the design +- security audit should be performed +- explore and implement more use cases on the network such as: implement non-interactive rule-based secret sharing on the EtF network +- we aim to become a parachain + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc. +- Tony initially heard about this a year ago via the substrate website. Collectively, we all learned about the grants program at the polkadot blockchain academy. + +Here you can also add any additional information that you think is relevant to this application but isn't part of it already, such as: + +- As stated previously, Tony has worked on two grants previous to this one. The items in this grant are very much inspired by the Iris grant, however, it is intended to fix all of the vulnerabilities and issues (i.e. lack of scalability) that Iris failed to do. From d7f176deb7013c8155e592d5ee08e2dba8052912 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 12 Jun 2023 17:53:35 +0200 Subject: [PATCH 400/665] Update index.md Add Cryptex --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index cc523da80a7..2af7782cd9c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,6 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | +| [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | [🔝](#menu) From 3c0402413c9d81c20459ae190ad53af4041a03f3 Mon Sep 17 00:00:00 2001 From: Xcavate Date: Mon, 12 Jun 2023 19:55:54 +0100 Subject: [PATCH 401/665] XcavateDeveloperLoandApp (#1649) * New Grant Proposal: Xcavate - the future of real estate finance & property investment * Update Project_Xcavate.md hosted images on our server * Update Project_Xcavate.md correction to image URLs * Delete XCAV-WEB-3-Grant-Application-Image-1.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-2.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-3.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-4.jpg hosted elsewhere * Update Project_Xcavate.md Reduced scope of work to focus on onboarding the project in to the Polkadot eco system * Updates to grant submission Hopefully addressing the questions / issues raised * move project file requested to move file to applications folder * Add files via upload * Delete Project_Xcavate.md old project submission * Rename Project_Xcavate_feb2023.md to Xcavate.md * Update Xcavate.md Revised W3F grant to only focus on building a PoC of the lending protocol dApp * Update Xcavate.md Revised application... more details and new dev team added * Update Xcavate.md Added new member of the team * Update Xcavate.md added another team member * Update Xcavate.md added current symbol to milestone fund request + moved the milestone deliverables inline with template. updated one team members linkedin and full name. * Update Xcavate.md Adapt grant application to focus on ink! contract use case * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md --- applications/Xcavate.md | 175 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 175 insertions(+) create mode 100644 applications/Xcavate.md diff --git a/applications/Xcavate.md b/applications/Xcavate.md new file mode 100644 index 00000000000..c306efbafb0 --- /dev/null +++ b/applications/Xcavate.md @@ -0,0 +1,175 @@ +# Xcavate + +> We are building a real estate centric lending and asset minting protocol. + +- **Team Name:** Xcavate +- **Payment Address:** 5E28NSFGwYB9C39bYdRAQ79UKRsM6shxkJr3LG4hehycwfJc +- **Total Costs:** $10000 USDT (Polkadot - Statemint) +- **Level:** 1 + +## Project Overview + +Due to a combination of increased population and changing housing needs, there is global housing crisis. According to the UN, the global population is set to reach over 11.2 billion by the year 2100, therefore 2 billion new homes are required in the next 80 years. 20% of all housing is built by small to medium sized real estate developers but access to finance through traditional banks and other financial institutions is complex, time consuming and expensive. + +Xcavate is looking to solve this issue by developing a completely decentralised lending and NFT protocol governed by a DAO to help fund the building of real world real estate assets, as well as transact and manage fractions of each property as a route to a global real estate investor market. Our goal is to create a Decentralised Autonomous Organisation (DAO), which has a core Fellowship of real estate developers, investors and blockchain developers accountable to its wider community, so more houses can be built and invested in to help reach the growing demand. + +### Overview + +Xcavate will be a first-of-its-kind real-world land & property NFT platform that collateralises real world parcels of land to finance real estate development. +Xcavate facilitates digitising land and/or property title deeds through minting and bundling of NFTs, which are then linked to verifiable digital identities (DIDs) approved by government entities. +Xcavate is an ecosystem that allows real-world property developers access to finance parcels of physical land with planning permission for development. Once the land is at the final development stage, the developer will create NFTs for the individual properties to be sold/managed by a peer-to-peer marketplace (property owners, investors, trusts etc.). +The system will significantly reduce the time from real estate planning permission to build start. By simplifying the finance application process and speeding up the release of funds to the developer. Xcavate not only provides real-world property developers with a way to build quicker but, as a result, enables a more significant number of much-needed houses to be delivered to market. It also provides liquidity to static real-world assets at every stage of the property development process in a fair and risk-averse way. It will enable the real estate to be onboarded cleanly and efficiently, opening up opportunities throughout the broader Dotsama ecosystem. + +### Project Details + +We will initially build a POC of the real estate developer loan process to prove the concept. Building a simple polkadot.js wallet that allows verification of identity and creation of DIDS (through the KILT protocol). Once land ownership and build value has been identified (using Oracles) then the LAND NFT can be minted and placed in a multi-sig wallet along with the full loan amount (from the community loan pool). Each build tranche of money will be delivered to the real estate developer wallet, once real estate build evidence has been established and verified. + +![](https://xcavate.io/W3F/DeveloperLoanProcessPOCv2.jpg) + +Xcavate will adapt and build multiple Pallets to execute the functionalities. We will use the KILT SDK as well as the substrate framework and primary language Rust to create the pallets on the Polkadot ecosystem. +Token Pallet +Decentralised Identity Document pallet +User Management pallet +Loan Management pallet +Transaction management pallet +Staking pallet +Verification pallet + +This Architecture diagram shows the visual representation that maps out the physical implementation for components in the Polkadot ecosystem and how the scalability of the platform works. The diagram represents Microservices we are using to execute the functionality. API gateway will split the API calls to the respective microservices. We are using an s3 bucket to store the media files. We are using pallets to execute the functions on the Polkadot ecosystem. + +![](https://xcavate.io/W3F/XCAV-WEB-3-Grant-Application-Image-4.jpg) + +Token: +XCAV - Platforms Native Token to launch a para chain and participate in a crowd loan/slot auction. XCAV tokens are used to stake within the platform. We will create these tokens with the Transfer, Mint, Burn, Approve, and Allowance functions. +Liquidity Pool: +Xcavate creates a liquidity pool to store staked tokens, staked tokens will be queued and utilized for each loan application. XCAV tokens are swapped as GBPT through XCM and deposited on the Central Loan pool. +Central Loan Pool: +Xcavate Creates a central loan pool to manage Loan amounts and Loan repayment. The central lending pool will act as the heart of the platform to map all the transactions. + +### Technology Stack + +* React.js +* Node.js +* Express.js +* Rust +* Substrate Framework +* Polkadot + +### Third-Party + +* Kilt – SDK +* Chainlink +* AWS + +### Ecosystem Fit + +After many months of research, we initially met on a zoom with Ingo from Kilt, discussing our idea and talking through how the Kilt chain can be incorporated into the Xcavate system. A few weeks later, we contacted Acala and met with Robinson, who was very helpful and enthusiastic about us being involved in the ecosystem and our potential partnership. We also reached Centrifuge and spent many weeks looking through their docs with the initial idea of creating a dApp on their chain, but as there were some striking differences in how their chain operated, it was apparent that was not going to be the best fit for our project. Going forward, however, once the real estate has been built, there will be opportunities for us to introduce Centrifuge. + +We feel this is a great way to bring land & Property assets into the digital ecosystem to interact with the following potential partners: + +**Kilt (Identity & wallet)** +This is a crucial part of the initial process to verify; Real Estate Director, Company & Title Deed and create DID’s, which will be held in a polkadot.js wallet and used throughout the process. +**Statemint / Acala** +There are many stages of financing that will involve aUSD / USDT / GDPT… from the initial funding pool, a liquidity pool, as well as the need to exchange the locked loan value for each project in GBP stable coins (as our initial market is based in the UK). +**CRUST** +Our POC will use AWS to prove the concept, however going forward we will look to host our dApp and all the land and property related documents on the Crust network. +**Subwallet** +Integrate DID's and Real Estae NFTs in to the their wallet to improve the UI/UX + + +## Team :busts_in_silhouette: + +### Team members + +* Richard Houldsworth – CTO +* Alex Ward – COO +* Ganish Oli - Substrate Developer +* Rene Hürter - Substrate Developer +* Neeraj Choubisa - Full Stack Developer +* Victor Chukwonoso - UI/UX Designer + +### Contact + +- **Contact Name:** Richard Houldsworth +- **Contact Email:** richard@xcavate.io +- **Website:** xcavate.io + +### Legal Structure + +* H & W Investments Limited +* 17 College Road, Cheshunt EN8 9LS, United Kingdom + +### Team's experience + +Richard Houldsworth – 10 years in web 2.0 dev space – serial Entrepreneur +Alex Ward – 25 years in the global property market – serial Entrepreneur +Ganish Oli - ink! smart contract developer and substrate blockchain developer. +Rene Hürter - I am currently studying to become a blockchain developer. Alchemy University Ethereum Bootcamp 11/2022. Scaling Ethereum 2023 Hackathon 11/03/2023. Consensus 2023 Hackathon (Web3athon 2023) 17/04/2023. +Neeraj Choubisa - A Passionate Full Stack Blockchain Ethereum Based Web Developer, Third-Year student at Indian Institute of Information Technology, Dharwad + +### Team Code Repos + +https://github.com/xcavateblockchain +https://github.com/xcavate2022 +https://github.com/ganesh1233456 +https://github.com/Kali-Decoder +https://github.com/RecrafterH + +### Team LinkedIn Profiles + +https://www.linkedin.com/in/richard-houldsworth/ +https://www.linkedin.com/in/alex-ward-2350a036/ +https://www.linkedin.com/in/ganesh-oli-9285a4163/ +https://www.linkedin.com/in/neeraj-choubisa-a4952b202/ +https://www.linkedin.com/in/ren%C3%A9-h%C3%BCrter-36084b249 + +## Development Status :open_book: + +We have been heavily involved in learning all things associated with the Polkadot & Kusama Ecosystem. This has been coupled with the idea of bringing land and property from its current state into the web3 ecosystem. We have been meeting with top-level industry leads, government officials and developers. +Robin Ejsmond-Frey and Nico Morgan from Parity have been a tremendous help by supporting us with information about the W3F grant application process and recommendations to attend Hackathons and the Polkadot Decoded Event London. As well as as number of forums to help our substrate development knowledge. + +We have been taking time to play with Substrate to form initial local nodes. We feel we are now ready to build the initial POC for this project in the Rococco test environmenment. + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 4 +- **Total Costs:** $10000 USDT + +### Milestone 1 — Initial POC of lending protocol + +- **Estimated Duration:** 2 months +- **FTE:** 4 +- **Costs:** $10000 USDT + +We will build on the excellent work we have achieved developing the Real Estate NFT marketplace for the hackerearth.com hackerthon. + +In the first milestone, the features for the PoC will be implemented and tested by limited users. We will adapt FRAME pallets to create a unique structure of a central community loan pool that acts as a risk reducer to allow individual loan stakers to lock and unlock native XCAV coins quickly and easily, rather than being committed to the full term of a particular loan. This will provide an attractive low risk investment opportunity and increase community confidence in the network while eliminating any delay in providing the funds to the real estate development project, once all the necessary checks have been completed. This loan pool structure could be applied to many different chains in future projects. The execution of various stages of the dApp specific logic will built using ink! smart contracts. + +| Number | Deliverables | Specification +|:----------|:---------------------------|:------------------------ | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | The documentation will be provided to show the whole architecture of the Xcavate Network. | +| 0c. | Testing and Testing Guide | The testing guide will be provided to test each component. | +| 0d. | Docker | We will provide a dockerfile to demonstrate the full functionality of our chain | +| 0e. | Tutorial | We will write a tutorial about how to use Xcavate Network. | +| 0f. | Article | We will write an article published on media channels. | +| 1 | Xcavate Node Repo | We will create a customized chain node with Substrate 2.0 Framework. | +| 2 | Xcavate Loan App Repo | All smart contracts will be written in Ink! to handle all the on chain runtime events related pallet functions such as; 1) Assess loan application criteria 2) Creation and management of multisig wallet 3) Minting and transfer of LAND NFTs 4) Defining and executing the loan APR structure 5) Monitor and execute real estate build stage checks 5) Deliver tranches of loan amounts to wallets 6) Manage the loan repayment and NFT transfer. | +| 3. | Loan management pallet | * Manage loan application ** Land details' ** Registration * Manage loan interest percentage ** Based on land and experience * Approve/Reject request | +| 4. | Staking pallet | * User can stake native token * Calculate APR * Distribute payouts | +| 5. | Verification pallet | * Verification of user identity * Manage users identity * Manage loan request | +| 6. | DAO | The PoC will have a basic DAO structure that will be created using the OpenGov pallet to ensure rewards can be given to the real estate build stage checkers (As we progress in to the MVP stage this will be expanded to form a full governance structure). | +| 7. | Decentralized Developer Loan dApp / Front End Repo | It's a webpage working with Xcavate Network, it's implemented based on polkadot.js as planned. | + +## Future Plans + +We are talking to Subwallet about integrating the KILT protocol DIDs in to their wallet for a smoother and simpler user experience. Once we have built the initial POC then on to the MVP and GTM. We have already started the white paper as well as developed a pitch deck to demonstrate the potential of the system to; investors, partners and eventually XCAV coin holders. We have started a social media campaign in order to build a community now and through the dApp build & testing stages. + + +## Additional Information :heavy_plus_sign: + +We will be attending the 2023 Polkadot Decoded event. We are keen to network and expand our partnerships across the Dotsama Ecosystem, while helping to build much needed real estate investment opportunities to a global population. From 25896d05331c5831a7a6e1b75c7e4b7b3184121e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 12 Jun 2023 20:58:38 +0200 Subject: [PATCH 402/665] Update index.md Add Xcavate --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 2af7782cd9c..f7a92b01a02 100644 --- a/applications/index.md +++ b/applications/index.md @@ -70,6 +70,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | +| [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | [🔝](#menu) From df6ace3ec1945618dbab34a00bd67f69596b005b Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 13 Jun 2023 08:30:11 +0200 Subject: [PATCH 403/665] Update applications/index.md Complete Liberland --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f7a92b01a02..51876745e7b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -180,7 +180,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | | [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | | [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | -| [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☐ | +| [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☒ | | [Standard Protocol](https://standard.tech/) | [Signac - a monorepo plugin for developing multiple Parity ink! smart contracts](./signac.md) | [GitHub](https://github.com/standardweb3/signac) | ☐ | ☒ | ☒ | | [B-Datagray](https://www.b-datagray.com/) | [Datagen Project](./Datagen_Project.md) | [GitHub](https://github.com/Datagen-Project) | ☐ | ☒ | ☐ | | [Colorful Notion](https://polkaholic.io/#chains) | [Polkaholic.io's Multi-Chain Substrate Block Explorer](./Polkaholic.md) | [GitHub](https://github.com/colorfulnotion/polkaholic/) | ☐ | ☐ | ☐ | From 42b3fef6b2f60890ef8ee42215c267b11681e613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 13 Jun 2023 11:48:44 +0200 Subject: [PATCH 404/665] Update help.md Fix image URLs --- docs/help.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/help.md b/docs/help.md index 8653fe7dc12..012e258b4d2 100644 --- a/docs/help.md +++ b/docs/help.md @@ -36,7 +36,7 @@ It is **not** a chance to pitch your project, especially since only a small subs
-| | | | | | +| | | | | | | :-: | :-: | :-: | :-: | :-: | | [W3F Website](https://web3.foundation) | [W3F Twitter](https://twitter.com/web3foundation) | [W3F Medium](https://medium.com/web3foundation) | [Polkadot Wiki](https://wiki.polkadot.network/en/) | [W3F YouTube](https://www.youtube.com/channel/UClnw_bcNg4CAzF772qEtq4g) | From e2845033c42c5f7b726a233811d6c33c49012581 Mon Sep 17 00:00:00 2001 From: ashWhiteHat Date: Wed, 14 Jun 2023 18:11:07 +0900 Subject: [PATCH 405/665] zkwasm rollup amend timeline (#1788) * amend timeline * update estimated duration --- applications/zkwasm-rollups-transfer.md | 31 ++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/applications/zkwasm-rollups-transfer.md b/applications/zkwasm-rollups-transfer.md index 2465d830c58..b1d7b66e521 100644 --- a/applications/zkwasm-rollups-transfer.md +++ b/applications/zkwasm-rollups-transfer.md @@ -98,11 +98,11 @@ We are not on LinkedIn. We already implemented cryptographic primitives which are compatible with `parity-scale-codec`. -- [zero-crypto](https://github.com/zero-network/zero/tree/master/primitive/crypto) [![crates.io badge](https://img.shields.io/crates/v/zero-crypto.svg)](https://crates.io/crates/zero-crypto) -- [zero-jubjub](https://github.com/zero-network/zero/tree/master/primitive/jubjub) [![crates.io badge](https://img.shields.io/crates/v/zero-jubjub.svg)](https://crates.io/crates/zero-jubjub) -- [zero-bls12-381](https://github.com/zero-network/zero/tree/master/primitive/bls12_381) [![crates.io badge](https://img.shields.io/crates/v/zero-bls12-381.svg)](https://crates.io/crates/zero-bls12-381) -- [zero-elgamal](https://github.com/zero-network/zero/tree/master/primitive/elgamal) [![crates.io badge](https://img.shields.io/crates/v/zero-elgamal.svg)](https://crates.io/crates/zero-elgamal) -- [zero-pairing](https://github.com/zero-network/zero/tree/master/primitive/pairing) [![crates.io badge](https://img.shields.io/crates/v/zero-pairing.svg)](https://crates.io/crates/zero-pairing) +- [zero-crypto](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/crypto) [![crates.io badge](https://img.shields.io/crates/v/zero-crypto.svg)](https://crates.io/crates/zero-crypto) +- [zero-jubjub](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/jubjub) [![crates.io badge](https://img.shields.io/crates/v/zero-jubjub.svg)](https://crates.io/crates/zero-jubjub) +- [zero-bls12-381](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/bls12_381) [![crates.io badge](https://img.shields.io/crates/v/zero-bls12-381.svg)](https://crates.io/crates/zero-bls12-381) +- [zero-elgamal](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/elgamal) [![crates.io badge](https://img.shields.io/crates/v/zero-elgamal.svg)](https://crates.io/crates/zero-elgamal) +- [zero-pairing](https://github.com/KogarashiNetwork/Kogarashi/tree/master/primitive/pairing) [![crates.io badge](https://img.shields.io/crates/v/zero-pairing.svg)](https://crates.io/crates/zero-pairing) - [zero-plonk](https://github.com/zero-network/dusk-plonk/tree/acffa2e0af43fdaf40c0f1e4d38b6124c57f5a05) [![crates.io badge](https://img.shields.io/crates/v/zero-plonk.svg)](https://crates.io/crates/zero-plonk) ## Development Roadmap :nut_and_bolt: @@ -111,13 +111,13 @@ Through this grant, we are going to implement the **zkwasm** which supports tran ### Overview -- **Total Estimated Duration:** 6 months +- **Total Estimated Duration:** 11 months - **Full-Time Equivalent (FTE):** 2 FTE - **Total Costs:** 40,000 USDT ### Milestone 1 | Crypto Primitive -- **Estimated duration:** 1.5 month +- **Estimated duration:** 2 month - **FTE:** 2 - **Costs:** 10,000 USDT @@ -136,7 +136,7 @@ In `Milestone 1`, we are going to implement `RedDSA`, optimize `Jubjub` curve an ### Milestone 2 | Plonk Extension -- **Estimated duration:** 1.5 month +- **Estimated duration:** 3 month - **FTE:** 2 - **Costs:** 10,000 USDT @@ -191,6 +191,15 @@ In `Milestone 4`, we are going to implement rollup node. This can aggregate tran | 2. | client transactor implementation | We are going to implement client library to request transfer transactions to rollup node. This is the combination of Redsa wallet and proof generator. | | 3. | integrate network | We are going to integrate network. There are four actor mainchain, rollup node and transactor, prover. The transactor generates the transaction and delegate proof generation to prover. The prover generates proof and send it back to transactor. The transactor send transaction to rollup node. The rollup node aggregates these transaction and commit the state to mainchain. | +## Timeline + +| Milestone | Deliverable | Estimated Duration (month) | Deadline | +| -----: | ----------- | ------------- | ------------- | +| 1 | Crypto Primitive | 2 | 2023 7/31 | +| 2 | Plonk Extension | 3 | 2023 10/31 | +| 3 | Zk Wasm Transfer Prover and Verifier | 1.5 | 2023 12/14 | +| 4 | Zk Wasm Transfer Rollup Node | 1.5 | 2024 1/31 | + ## Future Plans - Fully zkwasm rollup @@ -209,9 +218,9 @@ In `Milestone 4`, we are going to implement rollup node. This can aggregate tran - [zero-elgamal](https://crates.io/crates/zero-elgamal) - [zero-pairing](https://crates.io/crates/zero-pairing) - [zero-plonk](https://crates.io/crates/zero-plonk) - - [pallet-plonk](https://github.com/zero-network/zero/tree/master/pallets/plonk) - - [pallet-encrypted-balance](https://github.com/zero-network/zero/tree/master/pallets/encrypted_balance) - - [pallet-confidential-transfer](https://github.com/zero-network/zero/tree/master/pallets/confidential_transfer) + - [pallet-plonk](https://github.com/KogarashiNetwork/Kogarashi/tree/master/pallets/plonk) + - [pallet-encrypted-balance](https://github.com/KogarashiNetwork/Kogarashi/tree/master/pallets/encrypted_balance) + - [pallet-confidential-transfer](https://github.com/KogarashiNetwork/Kogarashi/tree/master/pallets/confidential_transfer) - [above documentation](https://zero-network.github.io/zero/) - Wheter there are any other teams who have already contributed (financially) to the project. - No. From b5ac65871dc324a8228ec3fcb988678184b9caf2 Mon Sep 17 00:00:00 2001 From: Denis Cavalli Date: Wed, 14 Jun 2023 20:21:38 +0200 Subject: [PATCH 406/665] Updating staff and timeline (#1803) --- applications/odyssey_momentum.md | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/applications/odyssey_momentum.md b/applications/odyssey_momentum.md index 5e486586a61..2e6cde46550 100644 --- a/applications/odyssey_momentum.md +++ b/applications/odyssey_momentum.md @@ -145,7 +145,6 @@ OVERALL ARCHITECT: Anton Starikov (CTO) **TOKEN TRACK TEAM** - TRACK LEAD: Dave Hoogendoorn - RUST DEVELOPER: Denis Cavalli -- RUST DEVELOPER: Raghuvar Vijayakumar - WEB3ANALYST: Tim Jansen *All team members are solely dedicated to the token Track.* @@ -170,8 +169,6 @@ OVERALL ARCHITECT: Anton Starikov (CTO) *Denis Cavalli* is a Senior Rust Software Engineer with a background on embedded systems and R&D. Since 2021 engaged with the WEB3 environment, has experimented on Ethereum/Solidity, Solana and worked professionally with Helium in 2022. Now is focused on building the metaverse that will empower people collaboration on the Dotsama ecosystem, using Substrate as the main framework. -*Raghuvar Vijayakumar* is a Rust Software Engineer with experience in building Custom Substrate Pallets and optimizing runtime storage. In addition to this Raghuvar has experience in developing smart contracts using solidity. - *Tim Jansen* is a Polkadot Ambassador and has been working on crypto and blockchain for over 7 years. He has developed smart contracts on Ethereum, implemented decentralized storage solutions such as swarm and IPFS, consulted on blockchain at [ISO](https://www.iso.org/member/2027.html), audited smart contract code of [TNO](https://www.tno.nl/en/about-tno/), launched several live applications using blockchain for auditing, supply chain and SSI at Visma and has a deep understanding of cryptography including zero knowledge proofs. In his free time he researches and experiments with new crypto technologies. @@ -192,7 +189,6 @@ Organisation: Team: - https://www.linkedin.com/in/deniscavalli/ -- https://www.linkedin.com/in/raghuvarvijayakumar/ - https://www.linkedin.com/in/timjanssen89/ - https://www.linkedin.com/in/antst/ - https://www.linkedin.com/in/dhoogendoorn/ @@ -216,8 +212,8 @@ Other channels are [YouTube](https://www.youtube.com/Intobitcoin) and [our found ### Overview -- **Estimated duration:** 6 Weeks -- **FTE:** 2,5 +- **Estimated duration:** 15 Weeks +- **FTE:** 1,5 - **Costs:** 30,000 USD _Note: Please follow the disussion [github](https://github.com/w3f/Grants-Program/pull/1221) for details on the costs._ @@ -225,8 +221,8 @@ _Note: Please follow the disussion [github](https://github.com/w3f/Grants-Progra ### Milestone 1 Stake Pallet -- **Estimated duration:** 6 Weeks -- **FTE:** 2,5 +- **Estimated duration:** 15 Weeks +- **FTE:** 1,5 - **Costs:** 30,000 USD This milestone delivers at least one (but maybe more) pallets to enable staking in Momentum's User Profile, World, Space and Subspace NFTs (or possibly any asset) in order to incentivize the creators/ owners and reward the stakers. From 0a972ba78c8b0946afa63d34c472896e31f91598 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 15 Jun 2023 21:05:36 +0200 Subject: [PATCH 407/665] Update index.md Solidity Verifier for Accountable Light Clients M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 51876745e7b..f766679cf68 100644 --- a/applications/index.md +++ b/applications/index.md @@ -123,7 +123,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | -| [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☐ | ☐ | +| [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | [🔝](#menu) ## 2022 From 73b4a5eb7f76225eb74114c391e3ac55b5f16760 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 15 Jun 2023 21:08:54 +0200 Subject: [PATCH 408/665] Update index.md Fix top links --- applications/index.md | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/applications/index.md b/applications/index.md index f766679cf68..43095953d6d 100644 --- a/applications/index.md +++ b/applications/index.md @@ -124,7 +124,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | - [🔝](#menu) + +[🔝](#menu) ## 2022 @@ -171,7 +172,8 @@ Use this page for an overview of all public grants and their status. Use the sid | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 15 - Q3 2022 @@ -216,7 +218,8 @@ Use this page for an overview of all public grants and their status. Use the sid | ALPHA LABS | [Binary merkle tree](./binary_merkle_tree.md) | [GitHub](https://github.com/frisitano) | ☐ | ☒ | ☐ | | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☒ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 14 - Q2 2022 @@ -258,7 +261,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Codelight](https://massbit.io/) | [Massbit Route](./massbit_route.md) | [GitHub](https://github.com/massbitprotocol/massbitroute) | ☐ | ☒ | ☒ | | [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☒ | | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 13 - Q1 2022 @@ -296,7 +300,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | - [🔝](#menu) + +[🔝](#menu) ## 2021 @@ -325,7 +330,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [UNIVERSALDOT FOUNDATION](https://universaldot.foundation) | [A freelancing decentralized application](./universaldot.me.md) | [GitHub](https://github.com/UniversalDot) | ☐ | ☒ | ☒ | | [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 11 - Q3 2021 @@ -357,7 +363,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [UNI-ARTS](https://app.uniarts.network/) | [Ruby Substate Client](./rb_substrate_client.md) | [GitHub](https://github.com/uni-arts-chain/sr25519) | ☐ | ☒ | ☐ | | [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | | [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 10 - Q2 2021 @@ -392,7 +399,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stake Technologies](https://stake.co.jp/) | [ZK Plonk Pallet](./zk-plonk.md) | [GitHub](https://github.com/PlasmNetwork) | ☐ | ☒ | ☒ | | [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | | [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 9 - Q1 2021 @@ -446,7 +454,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bit.Country](http://bit.country/) | [A decentralized world - Phase 2](./bit_country_m2.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | | [Vera](https://veraprotocol.org/) | [NFT Lending + Exchange](./vera_defi.md) | [GitHub](https://github.com/veraprotocol) | ☐ | ☒ | ☒ | | [Parallel Finance](https://parallel.fi/#/) | [Decentralized lending/borrowing and staking protocol](./Parallel.md) | [GitHub](https://github.com/parallel-finance/parallel) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ## 2020 @@ -497,7 +506,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Evanesco](https://evanesco.org/) | [Private network protocol](./evanesco_networks.md) | [GitHub](https://github.com/Evanesco-Labs) | ☐ | ☒ | ☒ | | [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | | [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 7 - Q3 2020 @@ -534,7 +544,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Adoriasoft](https://adoriasoft.com/) | Cosmos-SDK Parachain Development Kit Phase 2 | [GitHub](https://github.com/adoriasoft/cosmos-sdk) | ☐ | ☒ | ☒ | | [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | | [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 6 - Q2 2020 @@ -573,7 +584,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [FlexDapps](https://flexdapps.com/) | Gantree Phase 4 | [GitHub](https://github.com/flex-dapps) | ☐ | ☐ | ☐ | | [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | | [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ### 🏄‍♀️ Wave 5 - Q1 2020 @@ -616,7 +628,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [SelfKey](https://selfkey.org/) | SelfKey DIDs & Claims as Ink! Smart Contracts | [GitHub](https://github.com/SelfKeyFoundation) | ☐ | ☐ | ☐ | | [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | | [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | - [🔝](#menu) + +[🔝](#menu) ## 2019 @@ -650,6 +663,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stacktical](https://stacktical.com/) | [Performance Management Runtime Modules](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/predictive_performance_management_runtime_module.md) | [GitHub](https://github.com/Stacktical) | ☐ | ☒ | ☐ | | [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | | [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | + [🔝](#menu) ### 🏄‍♀️ Wave 3 - Q3 2019 @@ -670,6 +684,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DappForce](http://dappforce.io) | [SubSocial - Substrate module and web UI for decentralized communities](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Subsocial.md) | [GitHub](https://github.com/dappforce/dappforce-subsocial) | ☐ | ☒ | ☒ | | [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | | [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | + [🔝](#menu) ### 🏄‍♀️ Wave 2 - Q2 2019 @@ -688,6 +703,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [HOPR](https://hopr.network/) | [Substrate integration with this P2P messaging protocol](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/messaging.md) | [GitHub](https://github.com/validitylabs/HOPR-PL-Substrate) | ☐ | ☒ | ☒ | | [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | | [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | + [🔝](#menu) ### 🏄‍♀️ Wave 1 - Q1 2019 @@ -705,3 +721,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | | [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | +[🔝](#menu) From c09707cf7e048ea1100265d97eb461ff90777501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 15 Jun 2023 21:10:26 +0200 Subject: [PATCH 409/665] Update index.md Fix top links: Fix harder --- applications/index.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/applications/index.md b/applications/index.md index 43095953d6d..c48cde5e3ac 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 17 - Q1 2023 @@ -125,7 +125,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | -[🔝](#menu) +[🔝](#2023) ## 2022 @@ -173,7 +173,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 15 - Q3 2022 @@ -219,7 +219,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Standard Protocol](https://standard.tech/) | [New Order - a full onchain orderbook dex with indexers](./Standard_Protocol.md) | [GitHub](https://github.com/standardweb3) | ☒ | ☐ | ☐ | | [hack-ink](https://github.com/hack-ink) | [Subalfred](./subalfred.md) | [GitHub](https://github.com/hack-ink/subalfred) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 14 - Q2 2022 @@ -262,7 +262,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Hypha Hashed Partners](https://hypha.earth/) | [Social Recovery Wallet](./social_recovery_wallet.md) | [GitHub](https://github.com/hypha-dao) | ☐ | ☒ | ☒ | | [MangoBOX labs](http://mangobox.xyz/) | [MangoBOX Protocol](./MangoBOX-Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 13 - Q1 2022 @@ -301,7 +301,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | -[🔝](#menu) +[🔝](#2023) ## 2021 @@ -331,7 +331,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [AdMeta](https://admeta.network/) | [A privacy-preserving Ad Platform](./AdMeta.md) | [GitHub](https://github.com/AdMetaNetwork/admeta) | ☐ | ☒ | ☒ | | Crypto Pay Lab (CPL)) | [Dotpay a github paid task platform using DOT](./DotPay.md) | [GitHub](https://github.com/bytepayment) | ☐ | ☒ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 11 - Q3 2021 @@ -364,7 +364,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Skye Kiwi](https://skye.kiwi/) | [SkyeKiwi Protocol](./skyekiwi-protocol.md) | [GitHub](https://github.com/skyekiwi) | ☐ | ☒ | ☒ | | [Evercity](https://evercity.io/) | Sustainable Finance Protocol | [GitHub](https://github.com/EvercityEcosystem) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 10 - Q2 2021 @@ -400,7 +400,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CryptoLab](https://www.cryptolab.network) | [Staking Reward Collector](./cryptolab-staking-reward-collector-front-end.md) | [GitHub](https://github.com/cryptolab-network) | ☐ | ☒ | ☒ | | [Yatima Inc](https://github.com/yatima-inc/yatima) | [Lambda-VM and programming language for Substrate](./yatima.md) | [GitHub](https://github.com/yatima-inc/yatima) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 9 - Q1 2021 @@ -455,7 +455,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Vera](https://veraprotocol.org/) | [NFT Lending + Exchange](./vera_defi.md) | [GitHub](https://github.com/veraprotocol) | ☐ | ☒ | ☒ | | [Parallel Finance](https://parallel.fi/#/) | [Decentralized lending/borrowing and staking protocol](./Parallel.md) | [GitHub](https://github.com/parallel-finance/parallel) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ## 2020 @@ -507,7 +507,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [HugoByte](https://hugobyte.com/) | [Project Aurras: Event Manager](./project_aurras_mvp_phase_1.md) | [GitHub](https://github.com/HugoByte) | ☐ | ☒ | ☒ | | [Bounce Protocol](https://bounce.finance/) | [Decentralized Auction Protocol](./bounce-protocol.md) | [GitHub](https://github.com/bouncefinance/bounce-network) | ☐ | ☐ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 7 - Q3 2020 @@ -545,7 +545,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [sup](https://github.com/clearloop/sup) | [Command line tool for generating or upgrading a Substrate node](./sup.md) | [GitHub](https://github.com/clearloop/sup) | ☐ | ☒ | ☒ | | [Shard Labs](https://shardlabs.io) | [Tip or Donate KSM Embeddable Button](./KSM-embeddable-tip-or-donate-button.md) | [GitHub](https://github.com/Shard-Labs) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 6 - Q2 2020 @@ -585,7 +585,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zondax](http://zondax.ch/) | Ledgeracio: A command-line tool and Ledger app designed for staking operations | [GitHub](https://github.com/paritytech/ledgeracio) | ☐ | ☒ | ☒ | | [Dipole Tech](https://www.dipole.tech) | [Dipole Oracle: Distributed energy resource management](./DipoleOracle.md) | [GitHub](https://github.com/DipoleTech/dipole-oracle) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 5 - Q1 2020 @@ -629,7 +629,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Lyken](https://lyken.rs/) | [Rust trait system revamp](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/rust_trait_system_revamp.md) | [GitHub](https://github.com/LykenSol) | ☐ | ☒ | ☐ | | [Chorus One](https://chorus.one/) | Grandpa light client in Tendermint | [GitHub](https://github.com/ChorusOne) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ## 2019 @@ -664,7 +664,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Sean Young](https://www.mess.org/) | Solidity to WASM compiler | [GitHub](https://github.com/hyperledger-labs/solang) | ☐ | ☒ | ☒ | | [Chain Security](https://chainsecurity.com/) | Tool for validating correctness of Polkadot runtimes | [GitHub](https://github.com/ChainSecurity/polpatrol) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 3 - Q3 2019 @@ -685,7 +685,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Phala.Network](https://phala.network/) | [pLibra, Privacy Bridge between Polkadot and Libra chain](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/pLIBRA.md) | [GitHub](https://github.com/Phala-Network/) | ☐ | ☒ | ☐ | | [Wiv](http://wiv.io/) | Supply chain modules and front-end UI | [GitHub](https://github.com/wivtech) | ☒ | ☐ | ☐ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 2 - Q2 2019 @@ -704,7 +704,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Mailchain](https://mailchain.xyz/) | a Multi-Blockchain Messaging Application | [GitHub](https://github.com/mailchain) | ☐ | ☒ | ☒ | | [Usetech](http://usetech.com/blockchain.html) | [Polkadot C++ API](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/cpp_api.md) | [GitHub](https://github.com/usetech-llc/polkadot_api_cpp) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) ### 🏄‍♀️ Wave 1 - Q1 2019 @@ -721,4 +721,4 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protos](http://protosmanagement.com/) | Open Source Node Explorer | [GitHub](https://github.com/protos-research/polkadot-node-explorer) | ☒ | ☒ | ☐ | | [Supercomputing Systems](https://www.scs.ch/) | [Substrate Transaction Privacy using Intel SGX](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/substrate_sgx_proposal.md) | [GitHub](https://github.com/scs/substraTEE) | ☐ | ☒ | ☒ | -[🔝](#menu) +[🔝](#2023) From b9be6224749804c81f5148fe481772a595407c98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 15 Jun 2023 21:27:07 +0200 Subject: [PATCH 410/665] Update index.md Substrate Tutorials complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index c48cde5e3ac..def97b6b1b4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -240,7 +240,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Kami Ekbatanifard](https://github.com/Nick-1979/) | [Polkadot js plus / Nomination pools](./Plus-follow-up.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☒ | | [Afloat Inc](https://stayafloat.io/#/) | [Tax Infrastructure Polkadot Integration](./Afloat.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [SCALE Codec Comparator](./scale-codec-comparator.md) | [GitHub](https://github.com/gmajor-encrypt) | ☐ | ☒ | ☒ | -| [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☐ | +| [Rusty Crewmates](http://rustycrewmates.com/) | [Substrate Tutorials](./substrate-tutorials.md) | [GitHub](https://github.com/rusty-crewmates/substrate-tutorials) | ☐ | ☒ | ☒ | | [Sequester](https://github.com/SequesterChain) | [A Common-Good Carbon Sink on Polkadot](./sequester.md) | [GitHub](https://github.com/SequesterChain/pallets) | ☐ | ☒ | ☒ | | [Keysafe Network](https://github.com/keysafe-protocol) | [A decentralized protocol for private key custody and crypto asset management](./keysafe_network.md) | [GitHub](https://github.com/keysafe-protocol) | ☒ | ☒ | ☐ | | [Fennel Labs](https://fennellabs.com/) | [Whiteflag on Fennel Protocol](./Fennel_Protocol.md) | [GitHub](https://github.com/fennelLabs) | ☐ | ☒ | ☒ | From 090cc409e7c174a551c401badc66a0a7caa57b65 Mon Sep 17 00:00:00 2001 From: KowalewskiPawel <53332984+KowalewskiPawel@users.noreply.github.com> Date: Fri, 16 Jun 2023 17:46:34 +0200 Subject: [PATCH 411/665] Syncra - No Code DAO Maker and ZK Powered Private Voting Solution (#1762) * add Syncra application * add payment address * update payment * add images * add onchain automation part * update numeration * update milestones * Add Project Details * some minor fixed * Update applications/Syncra.md Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> * add more governance info * update DB model info --------- Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- applications/Syncra.md | 289 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 289 insertions(+) create mode 100644 applications/Syncra.md diff --git a/applications/Syncra.md b/applications/Syncra.md new file mode 100644 index 00000000000..20f2ea99ba2 --- /dev/null +++ b/applications/Syncra.md @@ -0,0 +1,289 @@ +# Syncra x Web3 Foundation + +- **Team Name:** Syncra +- **Payment Address:** 15Geo1RfLLM1PmPsD4uggts1Ht5LrWUChBDruLPqt5EgFKPB (PolkaDOT - USDT) +- **Level:** 2 + +## Project Overview + +### Intro + +Building DAOs requires a lot of heavy, complex work and commitment to create a solution, even when using templates such as OpenZeppelin. As a protocols owner, the cost of development, voting mechanisms, and legal structure can be significant. On substrate such templates like ones in OpenZeppelin aren’t even available yet for DAO development. This means even more time required for research and development in this technology. + +### Project Details + +Syncra simplifies this process. We're working on a no-code solution to create, manage, and build your decentralized organization. Our goal is to provide a seamless process where protocol owners can launch the DAO within 5 minutes or even less. + +![](https://i.imgur.com/Pe1Z26r.png) + +Transparency is inherent in blockchain technology, but many situations require privacy, especially in DAOs when it comes to tough decisions. Also in times when connecting particular wallet address to a person or entity can by relatively easy, or even required (KYC, ID verification, Identity providers). With Syncra, we want to provide a solution for confidential voting where votes are hidden by default, but everything happens on-chain. Leveraging a modular approach, we want to enhance privacy, provide an easy way for treasury management, and offer on-chain automation, ultimately providing this service for the entire Substrate ecosystem. + +Having Syncra in the PolkaDOT ecosystem is a necessary piece of the puzzle. Just as Tally, Aragon, and Snapshot exist on EVM, Syncra exists on Substrate. + +### Product overview + +We've already prepared and begun implementing some of our product designs. Our team is hard at work on product development, constantly refining and streamlining flows through research and product fit. + +Our goal is to make everything as simple as possible, while maintaining modularity and providing an excellent user experience. + +![](https://i.imgur.com/GXzugeC.png) +### Key Functionalities + +- DAO management, +- On and off-chain voting, +- Treasury management, +- Prepared and custom strategies, +- Undisclosed voting, +- Modular approach, +- Software Development Kit. + +## Architecture and overview of common interfaces + +Syncra implements modular-dao concept. + +### What is it? + +Modular-dao is a set of traits with default implementations built using [ink!](https://github.com/paritytech/ink) and [OpenBrush](https://github.com/727-Ventures/openbrush-contracts) that can be used to create customized DAOs. Be aware that this is just a concept, none of the contracts have been properly tested and/or audited, and all the work is still experimental. + +### How does it work? + +The traits with default implementations consists of: + +- **Votes** - trait that provides 3 basic methods that allow to get voting power for of an address and delegate votes. The default implementation is done with combination of PSP22 token. However, **Votes** can represent any type of the "strategy" (for example PSP34-based). +- **Governor** - extends **Votes** and **AccessControl**. The base for the DAO. Provides proposal creation and execution functionalities. +- **Timelock** - extends **Governor**. Allows scheduling operations, for example to allow some time between voting end-time and proposal execution. +- **ShieldedVoting** - extends **Governor**. Allows to represent the "votes" by PSP22 token that can be shielded using Shielder contract. + +![](https://i.imgur.com/aRwOgbR.png) + +In the future, we plan to develop multi-chain treasury module to increase functionality and customisability. + +### How does voting work? + +For not shielded voting process, users can simply call `cast_vote(proposal_id)` method on the **Governor** contract. The vote power is calculated by `get_votes(account)`. + +For shielded voting, users have to first "register" for voting to mint the PSP22 tokens representing their votes. Then, the tokens representing the votes can be simply transferred to an address representing one of the voting options or the transaction can be "shielded" using the Shielder contract. + +### How does on-chain automation work? + +Smart Contracts, Blockchain, and DAOs are very often promoted as Autonomous solutions. However, there is still a need for a manual trigger from user, to execute a given action onchain. + +At Syncra, we aim to deliver a complete automation with automatic Smart Contracts call execution. For this purposes we have started working a tool called Polkadot Smart Contracts Caller, which source code can be found here: https://github.com/KowalewskiPawel/Substrate-Polkadot-Smart-Contracts-Caller + +With Polkadot Smart Contracts Caller, we can easily create a relayer service, for delegating Smart Contracts calls. In this scope, we are planning to add scheduler, and frontend implementation, so that tasks such as execution of the proposal can be scheduled, and called automatically after the end of voting period. + +Moreover, we are also planning to integrate this tool in the Private Voting feature, so that "withdraw" function can be called from a neutral account, without revealing any sensitive info about the original caller. + +Known drawbacks are the security concerns, related with storing private keys on the cloud. We are currently conducting the Security research, on a possible solution to this problem. Therefore, for the scope of the grant, we treat this feature rather more like a Proof of Concept, than final product or even MVP. + +### Data Model + +Syncra uses IPFS as well as MongoDB for storing additional data about DAOs, proposals, and user stats. The purpose is to minimise the data footprint on the blockchain itself, as storing data onchain is costly, and not very performant. Only the critical data is stored inside of the the DAO Smart Contract’s. + +DAOs, Proposals titles, and descriptions are stored on the IPFS, and then corresponding IPFS hashes are set on the DAO contract's storage. In this way, users can be sure that the data about the given DAO or Proposal won’t be modified, nor fade-away if the server ever goes down. The same applies to storing images, as we use web3 storage for image upload. + +To sum up, on the Syncra MongoDB side, general info about user/platform stats are stored, such as number of DAOs created, DAOs that the given user is involved in, etc. In this way, everyone can use our SDK or even connect directly with the DAO previously deployed via Syncra platform, and build own frontend dedicated to the given DAO, without losing the critical data, and need to connect with Syncra's database. + +## Project Details + +In the scope of this grant, several core parts will be implemented, as the extension of the pre-grant MVP product, built under AlephZero grant. + +### MVP (Pre-Grant) + +The MVP of the Syncra Platform, that we are going to start with, will consist the following parts: + +1. Frontend Application with the connection to Wallet, Smart Contracts, and Backend +2. Set of Smart Contracts based on PSP22 voting strategy +3. Backend for storing off-chain data, such as DAO and proposal's additional info stored on IPFS. It's done for the purpose of minimizing storage footprint on-chain +4. Complete workflow of DAO creation, that allows users to create DAO, manage it, as well as create proposal and vote directly from the web application +5. Proof of Concept for Private voting, using AlephZero's Liminal Shielder - This one will require to start up a local custom AlephZero node, with ZK Verifier pallet implemented, as currently this functionally is not available on any AlephZero live chain + +### Scope of W3F Grant + +Based on the MVP described above, our team will deliver several extensions that will make our solution more universal, accessible, and possibly transferable to other Polkadot based chains, that implement Contract pallet. + +* **OpenZeppelins’ like Governance Standards** + Ideally, we plan to split the possible functionalities of a DAO into separate Rust traits, so that one can "bootstrap" the desired modules/functionalities and easily customize them. Moreover, our goal is to keep the project open for extension so in the future new modues/features could be added without the need to change existing standard. We will refactor the Smart Contracts code for creating DAOs and voting strategies, improve them, make more universal, and customizable so that they can be easily implemented. Additionally, we will prepare a documentation of each part, so that custom DAO contracts can be easily build from the ready puzzles. OpenZeppelins standards are the inspiration for this part, as there isn't any similar standard on Polkadot ecosystem yet. +* **On-chain Automation System Template** + Smart contracts, even though considered autonomous, require a manual trigger from the user to execute certain functions. In ecosystems such as DAO, automatic execution of the proposals is something that is still missing. For this part we will create a template tool, that will work as off-chain worker for scheduling Smart Contracts calls. It will work as a simple application, with the Scheduler, and some relayer accounts, that contain tokens for covering gas costs. Scheduling certain actions, like for example mentioned above - executing proposal once they reach the deadline, will be possible by simply setting the call on the Smart Contract. The off-chain relayer, will read the state from the given smart contract, and then schedule the Smart Contract call. + +* **SDK** + Our platform Syncra, is just one of the examples of how our infrastructure can be used, that is why we will create a set of ready solutions, so that a new platform (ex. frontend, mobile app, etc.) can be build, upon the pillars created by Syncra. In this part, a bundle for NPM and Yarn will be created, wrapping all core functionalities of Syncra. Developer will be able to simply install the SDK library in their project, setup the endpoints, and API KEYs for accessing our backend services, and then simply call given functions inside of their custom application. + +* **SDK Documentation** + + Dedicated documentation for the SDK will be created, so that the whole tool can be implemented with ease. We will also provide instructions for obtaining the necessary configuration keys, and other variables necessary to connect with our services. + +#### Technology stack + +Each of the core elements will be developed with certain set of technologies, and programming languages. + +1. **Smart Contracts as Governance Standards** + Written in Rust with the use of [ink!](https://github.com/paritytech/ink) framework and [OpenBrush](https://github.com/727-Ventures/openbrush-contracts) library for PSP22 standard of tokens, as well as additional helper functions, such as modifier for checking the roles. The documentation will be developed using [Docusaurus](https://docusaurus.io/) framework, that leverages JavaScript and TypeScript. +2. **On-chain Automation System Template** + Main technology stack here will be TypeScript, and Node.js Express for creating a server that can be deployed and hosted on most of the available hosting services. The reason behind this is the ease of implementation, and the availability of various libraries and technologies that can be added on top of it. This service won't receive many calls, rather act as a relayer that reads data on-chain, and then submits data/send calls to Smart Contracts on-chain, without further need for external calls. As a core tool for creating calls to Smart Contracts, we will leverage [Polkadot.js Contracts API](https://polkadot.js.org/docs/api-contract). +3. **SDK** + JavaScript and TypeScript will be fundamental programming languages of this part, while [NPM](npmjs.com) registry will be used for publishing the package itself. The SDK will be basically a wrapper of the certain functions that call Smart Contracts, and Backend. It will require the developer to add configuration, such as API Key to access our backend, Smart Contract Factory address, as well as the ABI files, that will serve as an instruction for calling each Smart Contract. We are not going to hardcode those in the SDK, as in the future, the platform may be deployed on different chains in the Polkadot ecosystem. Moreover, the Smart Contracts can be upgraded, or created with different set of rules and methods. +4. **SDK Documentation** + The entire documentation for implementing SDK in the given project, will be built using [Docusaurus](https://docusaurus.io/) that leverages JavaScript and TypeScript. + +#### Hosting and Infrastructure + +All of the code will be open-source, and available under our organizational repositories address + +[Syncra Repositories](https://github.com/orgs/SyncraDAO/repositories) + +Frontend application from the MVP part will be available under the address below + +[syncra.xyz](https://syncra.xyz/) + +Example demo of on-chain automation service is going to be hosted most probably on the [Railway](https://railway.app/) service, and it will connect with one of the instances of Data Base, hosted on the [Atlas MongoDB](https://www.mongodb.com/atlas/database) service. The files stored on IPFS will leverage [Web3 Storage](https://web3.storage/) services. + +SDK bundle on the other hand, will be published on the [official npmjs registry](npmjs.com) + +Documentation will published on the [GH Pages](https://pages.github.com/) + +#### Risks + +There are several known risk that we are aware of, and will try our best to find solutions to prevent those scenarios from happening. Nevertheless, it is worth noticing those potential fields, which could have been improved for better safety. + +* Storing Account Private Keys for Off-Chain Automation Relayer - since for sending transactions to the Smart Contracts, we need an actual on-chain Address, the seeds for that account, has to be stored somewhere on the Cloud. In this way, no human interaction is needed to create a signature. In our solution, we have no other option then just store those keys on one of the Cloud services. In such scenarios, there is always a risk of a data breach, that could compromise the access to the account, with the access to the funds stored for covering gas fees on it. + +* Smart Contracts Security Hole - we expect our Smart Contracts to be initially audited by [Kudelski Security](https://kudelskisecurity.com/) as a part of AlephZero grant. However, there is still a risk that something will not be caught during the audit, and we will also extend those Smart Contracts during this Project as for the purpose of creating OpenZeppelins like standards. During the development, some additional security issues may occur. + +* Off-Chain Automation Relayer Operational Failure - Automation relayer work as a centralized service for executing the calls, if for some reason, it will stop operating, the scheduled action may not be executed. For that reason, we are considering deploying several instances of this relayer, on multiple services, with multiple accounts. In this way we should minimize the risk of the scheduled action, not being executed due to the relayer's operational failure. + +## Ecosystem Fit + +Given the importance of scalable, and customisable DAO infrastructure, which many protocols needs, we want to introduce Syncra. As a easy to use, modular, reliable, and customisable platform we believe, that is crucial element of the ecosystem. Leveraging undisclosed voting, treasury management, on-chain automation, and many others we might bring a real value. + +Our project aim to be the ecosystem standard for DAOs on Polkadot, Kusama, Aleph Zero and any Subsrate based ecosystem. + +## Team + +### Team members + +- **Name of team leader:** Przemysław Paczoski +- **Names of team members:** Paweł Kowalewski, Krzysztof Kuczma, Jan Kuczma + +### Contact + +- **Contact Name:** Przemysław Paczoski +- **Contact Email:** przemek@syncra.xyz +- **Website: https://syncra.xyz** + +### Legal Structure + +- **Registered Address:** TBD +- **Registered Legal Entity:** TBD + +### Team's experience + +**Przemysław Paczoski** + +*Lead, front-end, and quality engineer with more than 6 years of experience in the field. Working on numerous projects with companies like XTB, Docplanner, Dfns, and others. He participated in a few NFT initiatives in addition to his professional activities, where he received practical expertise in creating projects from the ground up. He actively participate in hackathons and won awards in various categories.* + +**Krzysztof Kuczma** + +*Software engineer with over than 5 years of experience. Knowledgeable in front-end, and backend technologies, alongside Azure and GCP ecosystems. Working on projects for large financial institutions. Since 2020, exploring web3 projects, participating in hackathons in which winning awards. Passionate about knowledge sharing, in which he is running the YouTube channel about programming.* + +**Paweł Kowalewski** + +*Software Engineer, with experience in several blockchain technologies including projects based on Lightning Network. Prior to his software engineering career, he was an Academician and an Automotive Technician. The co-host of the YouTube channel “Devs in Chains”, focused on topics related to web3, web development, and Blockchain. He has attended numerous hackathons and won awards in various categories.* + +**Jan Kuczma** + +*An Alumni of the University of Sussex with Bachelor’s at Computer Sciences with focus on AI and Computer Architectures. In the academic course, he participated in several hacking events and I developed various software projects including developing a 3D game in Unity and designing and implementing Machine Learning models in Python. His final year he become interested in Blockchain technologies and started learning smart contracts development. He quickly become proficient in this matter.* + +### Team Code Repos + +Syncra Organization: https://github.com/SyncraDAO + +Smart Contracts: https://github.com/SyncraDAO/modular-dao + +Backend: https://github.com/SyncraDAO/Liberum-Backend + +All developments within the Web3 Foundation Grants Program will be open-sourced from day one on GitHub. +### Team GitHub Profiles + +- Przemysław Paczoski: https://github.com/Kodziak +- Krzysztof Kuczma: https://github.com/KrzysiekKuczma +- Paweł Kowalewski: https://github.com/KowalewskiPawel +- Jan Kuczma: https://github.com/jsk28 +### Team LinkedIn Profiles + +- Przemysław Paczoski: https://www.linkedin.com/in/ppaczoski/ +- Krzysztof Kuczma: https://www.linkedin.com/in/krzysztof-kuczma/ +- Paweł Kowalewski: https://www.linkedin.com/in/kowalewskipawel/ +- Jan Kuczma: [https://www](https://www.linkedin.com/in/kowalewskipawel/)[.linkedin.com/in/jkuczma](http://www.linkedin.com/in/jkuczma) + +## Development Status + +The project is currently in early-stage development. We achieved a proof-of-concept solution during the HackOnChain hackathon in Berlin, and then decided to rebuild it from scratch, aiming for a minimum viable product soon. + +Part of the MVP is almost finished. We aim to deploy the solution on the Aleph Zero testnet within a couple of weeks. The landing page, designs, and part of the application are almost complete. + +We are currently focusing on legalising the entity, marketing, pitch decks, whitepapers, and many other things. + +## Development Roadmap + +### Overview + +- **Total Estimated Duration:** 12 weeks +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** Requested amount in USD for the whole project 30,000 USD. + +### Milestone 1 + +- **Estimated duration:** 6 weeks +- **FTE:** 2 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | A clear overview of the software's architecture and components, as well as its main functions and capabilities. Technical details, including programming language, technologies, frameworks, libraries, and services. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an article that introduces to the solution with all the guidelines included. | +| 1. | DAO Smart Contracts (OpenZeppelins’ like) Governance Standards | Set of traits with default implementation for basic DAO feature such as voting power mechanisms based on psp22 and psp34, proposal creation and execution, quorum, proposal creation threshold and role-based proposal creation and execution. Both Smart Contracts written in ink! with OpenBrush will be provided, as well as the documentation explaining each part, with the tutorial of creating a new custom Governance Smart Contract. | +| 2. | On-chain Automation Tool | Source code as a Template with the Scheduler, and Smart Contracts caller will be provided. Moreover, as an example at least one instance of such a relayer will be deployed, and prepared for testing. | + +### Milestone 2 + +- **Estimated duration:** 6 weeks +- **FTE:** 2 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | A clear overview of the software's architecture and components, as well as its main functions and capabilities. Technical details, including programming language, technologies, frameworks, libraries, and services. | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Article | We will publish an article that introduces to the solution with all the guidelines included. | +| 1. | SDK | NPM package with ready wrapped functions, for creating custom GUI for the DAO platform based on Syncra will be provided. The package will be also published on the NPM registry. It will cover the workflow of connecting with our services, and creating the whole workflow, from creating the DAO, to adding proposals, and voting on them. | +| 2. | SDK Documentation | Clear overview, instructions, and explanation of each SDK's part will be documented in the documentation that will be available publicly for everyone. | + +## Future Plans + +After completing the grant, our goal is to establish a seamless process for creating and managing DAOs, with a great user experience. Additionally, we aim to enable protocols to integrate our solution into their systems using an SDK. + +Our next steps include: + +- Providing para-chain support, with the goal of allowing protocols across all Substrate-based blockchains to use Syncra's solution. +- Improving the security of the solutions provided in the scope of this grant + +## Additional Information + +### **How did you hear about the Grants Program?** + +Web3 Foundation Website, and Personal Recommendation. + +### Work you have already done + +- Platform MVP +- Designs +- Started to build brand recognition on Twitter and Discord community + +### Previous grants you may have applied for + +- Aleph Zero Grants program \ No newline at end of file From 8646af8a68a119581406b6a2d4cec70c04b36977 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 16 Jun 2023 17:48:59 +0200 Subject: [PATCH 412/665] Update index.md Syncra --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index def97b6b1b4..1023b5492da 100644 --- a/applications/index.md +++ b/applications/index.md @@ -71,6 +71,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | +| [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | [🔝](#2023) From 336378e9e75fdceaa0e7b777272affd0d8d3f95a Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Mon, 19 Jun 2023 16:18:27 +0900 Subject: [PATCH 413/665] Fix typo in xbi-format-psp-t3rn.md (#1807) mulitple -> multiple --- applications/xbi-format-psp-t3rn.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/xbi-format-psp-t3rn.md b/applications/xbi-format-psp-t3rn.md index cfa6f614d40..1d7678558d3 100644 --- a/applications/xbi-format-psp-t3rn.md +++ b/applications/xbi-format-psp-t3rn.md @@ -173,7 +173,7 @@ XBI payload lifecycle can be directed by developers using metadata. XBI Executor ### Ecosystem Fit -t3rn is a cross-chain smart contracts registry that enable smart contracts execution on mulitple blockchians. The XCM-based Interface will come in a form of a FRAME pallet and will be used by t3rn and any other Substrate-based project that wishes to use it. +t3rn is a cross-chain smart contracts registry that enable smart contracts execution on multiple blockchians. The XCM-based Interface will come in a form of a FRAME pallet and will be used by t3rn and any other Substrate-based project that wishes to use it. The XBI Format and XBI Executors for cross-chain smart contracts will be tested live in a XCM Environment, such as the Rococo network with other selected Substrate builders. @@ -232,7 +232,7 @@ Please also provide the GitHub accounts of all team members. If they contain no This is the research-focused grant proposal on XBI which is assumed to be followed up with the grant focused solely on its implementation. -XBI will help contribute to the t3rn vision of a fully connected cross-chain ecosystem, rooted in Polkadot. For the context, t3rn is building a cross-chain smart contract hosting platform that enable smart contracts execution on mulitple blockchians. +XBI will help contribute to the t3rn vision of a fully connected cross-chain ecosystem, rooted in Polkadot. For the context, t3rn is building a cross-chain smart contract hosting platform that enable smart contracts execution on multiple blockchians. ## Additional Information :heavy_plus_sign: From 1132e2f4bde58555a27d4ec84c0174d8235c229f Mon Sep 17 00:00:00 2001 From: Alexander Tishin Date: Mon, 19 Jun 2023 13:09:30 +0400 Subject: [PATCH 414/665] Add Validator_Monitoring_Service proposal (#1791) --- applications/Validator_Monitoring_Service.md | 190 +++++++++++++++++++ 1 file changed, 190 insertions(+) create mode 100644 applications/Validator_Monitoring_Service.md diff --git a/applications/Validator_Monitoring_Service.md b/applications/Validator_Monitoring_Service.md new file mode 100644 index 00000000000..a2ccdb01c73 --- /dev/null +++ b/applications/Validator_Monitoring_Service.md @@ -0,0 +1,190 @@ +# Validator Monitoring Service + +- **Team Name:** [P2P.ORG](http://p2p.org/) Validator +- **Payment Address:** 0xE22211Ba98213c866CC5DC8d7D9493b1e7EFD25A (USDC) +- **Level:** 2 + +## Project Overview :page_facing_up: + +Our application seeks to fund the development of a monitoring platform for validator operators. + +### Overview and Ecosystem Fit + +Validator Monitoring Service is a monitoring platform designed to track the performance of validators in the Polkadot and Kusama networks. + +In the existing ecosystem of the Polkadot network, there is a lack of comprehensive historical information available about how validators perform as ParaValidators and their participation in consensus. Public scanners like Subscan offer limited insights into validator performance, with scarce information such as earned points and rewards displayed only after an era's end. This limitation prevents the use of existing scanners as real-time monitoring tools. + +However, active participation in consensus is crucial for upholding network security. Each consensus round relies on obtaining 2/3 precommits, and validators failing to reach this threshold cannot contribute to blockchain security. If numerous validators encounter participation issues, it can reduce block production speed, adversely affecting the overall network. + +**We truly believe that every validator operator should understand their role and significance in ensuring blockchain security.** + +Furthermore, the information provided by public scanners predominantly focuses on individual addresses and specific events. At the same time, it allows for retrieving on-chain data such as reward payments and rewards points for a particular account. Scanners generally lack the capability to compare these rewards with those of other validators. This limitation hinders a comprehensive understanding of a chosen validator's performance relative to others in the network. + +**Our monitoring service effectively addresses this challenge by providing real-time data on validator performance and enabling performance comparisons with other validators.** + +Moreover, besides public scanners, there are several existing solutions available for validator monitoring, such as [P.A.N.I.C.](https://github.com/SimplyVC/panic_polkadot), [Polkalert](https://github.com/galacticcouncil/polkalert), [B-Harvest](https://github.com/nodebreaker0-0/substrate/tree/prometheus_v0.3), [nmonpolkadot](https://github.com/stakezone/nmonpolkadot), [Polkadot-K8s-Monitor](https://github.com/ironoa/polkadot-k8s-monitor), [Polkadot-Watcher](https://github.com/w3f/polkadot-watcher), [ex-1KV Telegram Bot](https://github.com/helikon-labs/polkadot-kusama-1kv-telegram-bot), as well as, grant-supported dashboards [Cyclops](https://github.com/w3f/Grants-Program/blob/master/applications/cyclops.md). Our solution stands out due to several significant differences: + +1. **Out-of-the-box Solution:** Unlike many existing applications that require hosting arrangements, our platform offers a hassle-free experience. Users can effortlessly try our product and assess its suitability for their needs by simply interacting with our Telegram bot and setting up a live dashboard. This accessibility enhances the popularity and adoption of our solution. +2. **Comprehensive Data:** While most solutions provide standard on-chain data such as reward points, reward amounts, and on-chain events like offences or payouts, our platform goes beyond that. We offer unique data, including information on participation in the consensus, the selection of a para-validator, and para-validator points per session (not just per era). This granular data provides users with a more comprehensive understanding of validator performance. +3. **Ongoing Support:** Many existing applications are developed by small teams and may need more ongoing support, with some repositories needing to be updated. In contrast, we are one of the largest validators in the network, and we commit to supporting and maintaining our validator monitoring platform. Additionally, we utilize the same system for our internal purposes, ensuring its reliability and continuous improvement. + +### Potential users + +Our monitoring system caters to various parties within the community who can derive significant benefits from its usage: + +1. **Validator Operators:** Our service is a valuable tool for validator operators, particularly small teams and independent validators who may lack the time and resources to develop their monitoring systems. For instance, meeting the strict requirements of programs like the 1KV program can be challenging for small and independent validators. With our monitoring system, they gain the ability to track an extensive range of metrics. By leveraging our service, validator operators can thrive within the decentralized ecosystem and enhance performance. +2. **Nominators:** Nominators play a crucial role in the network by selecting validators to nominate. Our service provides nominators with detailed performance comparisons among different validators. They can evaluate critical metrics such as consensus participation, and block production efficiency relative to other validators. Our service empowers nominators to make informed decisions when choosing validators to nominate, optimizing their returns, and actively contributing to the network's health. +3. **Foundation:** By having access to comprehensive information on validator participation in consensus, block production efficiency, and other crucial metrics, the Foundation can identify and address any security vulnerabilities or potential risks promptly. This proactive approach helps to maintain a robust and secure network for all participants. Moreover, the Foundation can offer greater transparency to the community regarding validator performance + +Lastly, our team possesses extensive experience in maintaining validators within the Polkadot and Kusama networks, and we have developed the necessary monitoring and maintenance tools. **We firmly believe that this knowledge should be shared for the benefit of the entire network rather than being kept private.** Therefore, we seek a grant to further develop our monitoring system and contribute to the network's advancement. + +### Project Details + +We have developed a comprehensive monitoring platform as a service. This platform provides validator operators with an effortless monitoring solution, saving them valuable time and effort. With our service, operators can focus on other critical aspects of validator operations, knowing that their monitoring needs are taken care of. + +**Our system could be depicted in the following picture:** + +![](https://github.com/avtishin/maas/blob/main/pic_7.png) + +Our current solution already offers a Grafana instance, which serves as a powerful dashboard. This dashboard displays real-time metrics of validators, enabling users to access and analyze the data easily. To simplify the setup process, we have integrated our platform with a user-friendly Telegram bot, @p2pvalidator_monitoring_bot. Through this bot, users can quickly configure their personal dashboards by selecting the validators they wish to monitor. + +The live dashboard provides users with a comprehensive overview of all essential metrics related to their validators. These metrics are updated automatically every 20-40 seconds, ensuring real-time visibility into the performance of validators. This rapid update frequency enables users to respond to any changes or issues that may arise promptly. + +Furthermore, we understand the importance of historical data in analyzing validator behavior and identifying potential issues. Therefore, our platform collects and stores data on all active validators for up to one month. This means that users have access to historical performance data, allowing them to conduct in-depth analyses of their validators over time. Such insights are invaluable for optimizing performance and addressing any emerging concerns. + +In conclusion, our monitoring platform provides validator operators with a hassle-free solution, streamlining the monitoring process and offering real-time and historical data to support informed decision-making and efficient operations. + +### System workflow + +A user initiates a conversation with a Telegram bot and selects from options such as creating a new dashboard or connecting to support. When the user inputs the validator addresses they wish to monitor on the dashboard, our system verifies the authenticity of these addresses, confirming that they belong to validators. Then, the system generates the dashboard and sends the user their access credentials. Subsequently, the system resets the client's session to prevent potential 'double' events. This involves preserving the user's current position in the workflow, for instance, preventing the triggering of a dashboard deletion before its creation. + +![](https://github.com/avtishin/maas/blob/main/pic_9.png) + +Upon receiving a user's request to deploy a dashboard, their specified validator addresses are recorded in a key-value file (values.yaml) associated with their Telegram ID and subsequently committed to Git. ArgoCD, set to check the repository every 5 minutes, will recognize if there isn't a Grafana instance associated with the particular Telegram ID and proceed to deploy a new instance. As ArgoCD prepares the dashboard, GitHub Actions concurrently monitors the availability of this new instance. Once the instance is fully operational, GitHub Actions triggers a notification to the client, providing them with their login credentials. + +![](https://github.com/avtishin/maas/blob/main/pic_11.png) + +Our data collection process is anchored on utilizing exporters from the Blockchain. These exporters operate incessantly, amassing raw data directly from the Blockchain. Each exporter functions as an HTTP web endpoint for the scrapper, supplying plain text with specific metric values. Subsequently, this data is channeled into the Victoria Metrics cluster using VM insert, which timestamps each value. Ultimately, designated data is selected by a specific dashboard (Grafana instance) using VM select. + +![](https://github.com/avtishin/maas/blob/main/pic_8.png) + +In our current implementation, we provide insights on the following key metrics: + +- General indicators: we track session/era progression and staking data. + + ![](https://github.com/avtishin/maas/blob/main/pic_6.png) + +- Validator data per epoch: we provide information on rewards points, active validators, and their position in the active set. + + ![](https://github.com/avtishin/maas/blob/main/pic_5.png) + +- Era and epoch points for ParaValidators: we monitor ParaValidator points earned and their relation to the network's average, median, and 95th percentile. + + ![](https://github.com/avtishin/maas/blob/main/pic_4.png) + + ![](https://github.com/avtishin/maas/blob/main/pic_3.png) + +- Finality metrics (GRANDPA): we track blocks' prevotes and precommits, and their ratio to ideally processed blocks. + + ![](https://github.com/avtishin/maas/blob/main/pic_2.png) + + ![](https://github.com/avtishin/maas/blob/main/pic_1.png) + + +## Team :busts_in_silhouette: + +### Team members + +- Aleksandr Tishin, product manager, https://github.com/avtishin +- Anton Zhbanov, tech team lead, https://github.com/base1217 +- Sergey Radchenko, SRE Engineer and Developer, https://github.com/SergeyRadchenkoP2P +- Boris Simonov, SRE Engineer and Developer, https://github.com/xxbbxb + +### Team Code Repos + +Project repo: + +- https://github.com/p2p-org/polkadot_monitoring_service + +### Team's experience + +The P2P development team, part of the reputable validator and non-custodial staking platform P2P, is the main driving force behind our monitoring solution. P2P is well-known for its expertise in validating Substrate-based networks such as Polkadot, Kusama, Moonbeam, and Moonriver, as well as other networks like Solana (Lido in Solana) and Cosmos (Neutron). + +As a team, we have already successfully completed a grant for the development of [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md), an indexer specifically designed for substrate-based networks. This indexer allows for the efficient indexing of events, extrinsics, blocks, and staking data from the on-chain environment. We actively maintain and update the Multiblockchain ETL indexer, ensuring its reliability and functionality. The code for this project is publicly available on [GitHub](https://github.com/p2p-org/polkadot-profit-transformer). + +Given P2P's established expertise and solid reputation in the industry, we are well-equipped to carry out further development of our monitoring tool. Our focus remains on delivering a monitoring solution that brings significant benefits to the community, promoting transparency and empowering validator operators and stakeholders. + +### Contact + +- **Contact Name:** Aleksandr Tishin +- **Contact Email:** [aleksandr.tishin@p2p.org](mailto:aleksandr.tishin@p2p.org) +- **Website:** [p2p.org](http://p2p.org/) + +### Legal Structure + +- **Registered Address:** P.O. box 2775, 67 Fort Street, Grand Cayman, KY1-1111, Cayman Islands +- **Registered Legal Entity:** P2P Staking, a Cayman Islands Company, registration number 381601 + +## Development Status :open_book: + +Current service already offers a convenient and user-friendly experience through a Telegram bot named @p2pvalidator_monitoring_bot. This bot serves as the gateway to our comprehensive validator monitoring capabilities, covering various aspects of validator performance. + +At the core of our product, we have developed an exporter that takes raw data and translates it into a format compatible with Victoria Metrics, our chosen data storage solution. The data is securely stored for one month, during which it is transformed into meaningful metrics. These metrics are then transmitted to Grafana dashboards, providing users with a visually appealing and informative monitoring interface. + +Through the Telegram bot, users have access to a range of features. On the user's side, they can deploy a personal dashboard, allowing them to monitor their validators efficiently. They also have the ability to destroy their personal dashboard when needed. Additionally, the bot provides support options, enabling users to seek assistance and receive prompt replies. + +On the admin side, there are several options available for managing the system. These include the ability to deploy/destroy Grafana instances, and ban/unban specific users. Admins can also engage in support-related tasks, such as replying to support inquiries and closing support conversations as necessary. + +By utilizing our Telegram bot, users can easily interact with our monitoring tool, deploy personalized dashboards, access support, and enjoy a seamless monitoring experience. Meanwhile, admins have the necessary tools to manage the system and provide timely assistance to users efficiently. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** $29,000 + +### Milestone 1 — Events and Dashboard UX + +- **Estimated duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 14,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide a documentation page about how to self-host events exporter, grafana setup dashboard instance. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to run events exporter locally, set up Grafana instance, and auto-removing tool. | +| 1. | Events exporter | We will create an events exporter (all on-chain events) to show events in the dashboard related to the selected validator addresses. This feature will track all on-chain events and present related events in the user's dashboard for their selected validator addresses. | +| 2. | Improve UX Dashboard | We plan to streamline Grafana's interface by removing surplus controls, enhancing the quality of our charts, and implementing Kiosk mode. We aim to bolster security through provisioning measures, such as enforcing password changes for users. | +| 3. | Create a landing page | We will create a landing page to ease user onboarding to the service. | +| 4. | Auto-remove instances | We will develop a system that identifies and removes inactive Grafana instances. | + +### Milestone 2 — Expand the functionality + +- **Estimated Duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide a tutorial page that explains how a user can set up monitoring for selected validators. We show how our functionality works and give reasoning and explanations for all metrics that are shown to the user. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to self-host the telegram bot and check the functionality. | +| 0e. | Article | We will publish an article that explains the user flow of our system and promotes using monitoring for validators operators. | +| 1. | Telegram bot adding alerting based on events | We will introduce a feature that allows users to subscribe to specific events. This means users can opt to receive Telegram notifications when their chosen validators receive rewards, are elected into the active set, and more. | +| 2. | Telegram bot UI + support chat upgrades | We aim to rebuild user inference of a bot to add more interaction opportunities with the service. As well as we will improve communication with support. Instead of the current one-message ticket system, we will implement a more interactive conversation mode allowing for multiple messages dialog. | +| 3. | Cover monitoring for parachains | We will add the support of the most popular parachains such as Moonbeam, Moonriver, Acala, Karura, Astar, Shiden | + +## **Referral Program (optional) 💰** + +Not applicable + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website and previous grants: [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md) From 005777bbceadf16c01861fbce9c6b392dd60abe5 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 19 Jun 2023 11:12:58 +0200 Subject: [PATCH 415/665] Update index.md Add Validator Monitoring Service --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 1023b5492da..da8a3485930 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,6 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | +| [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | [🔝](#2023) From fb3f98005778d2098b27da30e9b2db033fdaf083 Mon Sep 17 00:00:00 2001 From: Sourabh Niyogi Date: Mon, 19 Jun 2023 04:53:35 -0700 Subject: [PATCH 416/665] Deep Account Analytics in Three Tiers for the Polkadot Data Alliance (#1768) --- ...epAccountAnalytics-PolkadotDataAlliance.md | 307 ++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 applications/DeepAccountAnalytics-PolkadotDataAlliance.md diff --git a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md new file mode 100644 index 00000000000..9fe64a06d89 --- /dev/null +++ b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md @@ -0,0 +1,307 @@ +# Web3 Foundation Deep Account Analytics in Three Tiers for the Polkadot Data Alliance + +- **Team Name:** Colorful Notion, Inc. +- **Payment Address** `0xEaf3223589Ed19bcd171875AC1D0F99D31A5969c` +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Abstract :page_facing_up: + +This proposal addresses outstanding [deep account analytics problems for the Web3 Foundation](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/data_analysis_tools.md). +We propse 3-tier solution: + + - Tier 1. _raw indexing_: Google BigQuery Public Datasets + - Tier 2. _deep indexing_: shared datasets delivered with Google Analytics Hub + - Tier 3. _dashboards_: the above indexed data in Apache Superset + +This proposal seeks to develop the above solution with the support of a Web3 Foundation grant, but critically addresses +future maintainance a [Polkadot Data Alliance Bounty](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#) +that can support work on all 3 tiers with _child bounties_ for Polkadot Data Alliance contributors. + +## Project Overview :page_facing_up: + +This proposal is in response to the RFP [Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/data_analysis_tools.md) +which seeks to answer deep account analytics questions of: + +**Account References**: +* Which transactions/accounts were responsible for the reserved balance in an account? +* What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references? +* What are the pallets responsible for reserves/holds and locks/freezes on an account? + +**Democracy**: +* Which accounts have delegated OpenGov votes to an account or to which accounts the account in question has delegated their votes to for each track? + +**Staking/Nomination Pools**: +* Who are all the nominators that nominated Validator X? (an inverse mapping basically of staking.nominators from validator -> nominators) +* Who are the top 10 nominators with the highest APR, and which validators do they have in common? + +We call these _deep analytics_ questions because to answer them requires significant "deep indexing" beyond "raw indexing", which cannot be done without intricate knowledge of Substrate. Currently, these questions are difficult to answer without going through many pages in a block explorer like Polkaholic.io, and nearly impossible without doing some amount of data engineering. The answers to the above questions _could_ be treated as new features to be developed in the context of block explorer like Polkaholic, or within special purpose UIs like polkassembly or staking.polkadot.network. + +We propose a different style of solution that we believe properly factorizes the following _three_ tiers: +* Tier 1. raw indexing - raw indexing of decoded blocks (blocks, extrinsics/calls, events, traces) +* Tier 2. deep indexing - post-processing of raw indexed data +* Tier 3. dashboards - situating the above with BI tools -- speci that does not require deep knowledge of the structure of the indexed data + +Typically, a block explorer or special purpose UI concerning chain +data blends all of these three tiers together -- and the maintainer of +the block explorer enjoys a community following (etherscan.io ). But +often when new deep analytics questions arise are not directly +available in an explorer, users with deep account analytics questions +are left struggling and need custom answers only provided by data +engineers and analytics engines -- covered by dashboard systems like +Dune Analytics. In Dune Analytics, Tier 2 is covered by Dune Wizards +and Tier 3 is covered with a customized front-end. + +The solution we develop here is _not_ to make a long list of feature +requests for either block explorers or special purpose UIs to answer +with new functionality. + +Instead, our solution to this problem is to separate the THREE TIERS within a _genuinely collaborative_ Polkadot Data Alliance: + +* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here]() + +* Tier 2: deep indexing can then be done by doing some amount of data engineering with the above raw deata, resulting in tables, views or materialized views that can also be shared with new datasets, which can also be shared with Analytics Hub. + +* Tier 3: front-end engineering: given the above dataset, an open source BI tool (Apache Superset) can access _multiple_ datasets contributed by _multiple_ Polkadot Data Alliance members. Recently, Parity Data shared this dataset of _their_ index of Polkadot, which enables a simple comparison between Parity Data's index and Colorful Notions' index. + +We consider our approach a _genuinely collaborative_ approach, because anyone can contribute at any of the 3 tiers -- providing raw indexes, deep indexes, or dashboards. All dataset deliverables are public and the data processing itself is also reproducible in a "ETL" flow. This should be contrast to a _non-collaborative_ approach where dataset is kept locked away unshared with the community, closed source and thus irreproducible. + +However, because all three tiers involve a certain amount of storage, compute and data engineering/data analyst man power, it is critical to not _just_ build the above three tiered solution, +but recognize that it needs **maintainence**. The Web3 Foundation supports maintainence, but does not support the considerable cloud computing costs that Tier 1 and 2 require, nor the sort of solution that Tier 3 requires. We thus propose that the above three tier architecture be situated _in conjunction with_ a [Polkadot Data Alliance bounty](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#), not just for ourselves at Colorful Notion, but for everyone equally commited to genuine collaboration a Polkadot Data Alliance. + +It is believed that this collaborative framework can address many different problems other than deep analytics, and result in a more efficient allocation of Treasury funds and parachain resources: including an industry-wide multichain block explorer, ecosystem-wide XCM indexing, tracing tools, to name a few that our team has explored with some depth of seriousness. + +Much Tier 1 foundation has already been laid through our work and other indexers (Subquery, Subsquid, Subscan, web3go) in the ecosystem, who we hope will be able to contribute at Tier 1 [ideally within BigQuery so as to be directly usable as another source for Tier 2 and Tier 3]. + +But Tier 1 is not enough -- it is necessary to address Tier 2 and Tier 3 as well, and the Web3 Foundation RFP questions clearly illustrate the inadequacy of stopping with raw indexes and the need for deep indexing. We believe a strong collaborative mindset is required to fully address these questions and numerous others the Substrate ecosystem asks comprehensively. + +The goal of this proposal is to: +* address the Web3 Foundation's specific deep account analytics questions fully, specifically with three-tiered deliverables at Tier 1+2+3, using widely used tools of Google BigQuery and Apache Superset +* demonstrate a viable financial path for our own maintainence for the above solution within the Web3 Foundation grant structure and the structure of the Polkadot Treasury using the Polkadot Data Bounty system +* form an alternate kind of deliverable for Web3 Foundation other than code that everyone can use: _datasets_ and _dashboards_ that everyone can use + +### Project Details + +The "Account References" questions of +* Which transactions/accounts were responsible for the reserved balance in an account? +* What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references? +* What are the pallets responsible for reserves/holds and locks/freezes on an account? + +are largely answerable through traces. At the heart of every +blockchain is a state transition function, where the state transitions +for any block are commonly called "traces" in blockchain engineering. +Substrate makes every trace visible through a +[state_traceBlock](https://polkadot.js.org/docs/substrate/rpc/#traceblockblock-hash-targets-optiontext-storagekeys-optiontext-methods-optiontext-traceblockresponse) +RPC function, which outputs every storage key-value map change in a +re-execution of a single block. This RPC call is considered "unsafe" +as it requires compute time to regenerate. + +Polkaholic.io's indexer, when traces are available from an internal archive node, fetches traces and exposes them in the block explorer. +For example, here is the trace for [Polkadot Block 15723663](https://polkaholic.io/trace/polkadot/15723663/) + + + +The raw keys (e.g. `0x26aa394eea5630e0...f1dbd372bbe532b1f8702b2a7e`) and values (e.g. `0x01ab50050...000000000000`) are decoded using the chains type spec into + +``` +Key: [ "12xtAYsRUrmbniiWQqJtECiBQrMn8AypQcXhnQAc6RB6XkLW" ] +Value: { + "nonce": 348331, + "consumers": 2, + "providers": 1, + "sufficients": 0, + "data": ⊖{ + "free": "0x000000000000000005785a9c9f9ad21b", + "reserved": 0, + "miscFrozen": "0x00000000000000000058d15e17628000", + "feeFrozen": "0x00000000000000000058d15e17628000" + } +} +``` + +and loaded into BigQuery as part of a publicly available [substrate-etl](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/974572213039/locations/us/dataExchanges/substrate_18804f88005), recently added to Google BigQuery's Public Datasets in May 2023. + + + +In Milestone 1, we will provide a 3 tier solution to deep account analytics on Account References. Here is how the 3 tiers: + +* Tier 1 requires *raw indexing* of traces. Traces are critical to Colorful Notion's [XCM Indexing](https://polkaholic.io/xcmtransfers?xcmType=xcmtransfer) and are important for parachain engineers to understand how the execution of a block, and are critical to the model producers, consumers and sufficients. As raw traces form a very large dataset, to keep storage costs low, the indexer filters out pallets section/method that and exposes them in `crypto_polkadot.traces0` ([see schema](https://github.com/colorfulnotion/polkaholic/blob/main/substrate/schema/substrateetl/traces.json)). In particular, given how central accounts and native and non-native tokens are to blockchain usage, the indexer further decodes accounts and asset state into many additional columns like free, reserved and frozen. + +* Tier 2 requires *deep indexing* of the above trace data, to analyze how certain attributes changed in [System:Account](https://docs.google.com/spreadsheets/d/1jywN--pONmJqmbuASWDLNdBvsB86OuizJnQ72ijAXSU/edit#gid=704412439) holding account reference counters, account balance reserved provenance (see: https://docs.substrate.io/reference/account-data-structures/). We have some preliminary work on this (see [this sheet](https://docs.google.com/spreadsheets/d/1gZZOvH4BYk2QYlhzz9AvRxiR6mcYtgRz9VZluz1lwuU/edit#gid=1313769699)) and proved that, yes, it is indeed possible to uniquely identify the extrinsic id (but not call id) for every trace, and that the changes can be identified to build a new dataset every day. + +* Tier 3 requires situating the above dataset into an Account Analysis Dashboard of [Apache Superset](https://analytics.polkaholic.io/dashboard/list/). Here we have a WASM Contract Explorer prototype: + + + +We envision Milestone 1 focussed on Account References and then extended in Milestone 2 to Democracy+Staking deep analysis. This will result in an Account Analysis Dashboard, with 3 or more account tabs exploring: + +* "Account References" concerning deep indexing developed in Milestone 1 + +* "Democracy" concerning deep indexing about [Democracy:VotingOf](https://docs.google.com/spreadsheets/d/1hdvW5Kw3gwBnXqFskALX1_szdTf4pYL-SlbOqJ8tlO0/edit#gid=1803912396) developed in Milestone 2 + +``` +{"direct":{"delegations":{"capital":0,"votes":0},"prior":[0,0],"votes":[[113,{"standard":{"vote":"0x81","balance":10000000000}}],[119,{"standard":{"vote":"0x82","balance":50000000000}}]]}} +``` + +OR + +``` +{"delegating":{"balance":15000000000,"conviction":"Locked4x","delegations":{"capital":0,"votes":0},"prior":[0,0],"target":"15ZvLonEseaWZNy8LDkXXj3Y8bmAjxCjwvpy4pXWSL4nGSBs"}} +``` + +* "Staking" concerning deep indexing about Staking and Nomination Pools, with the added complexity of stashing controller/accounts, developed in Milestone 2. + +It is straightforward to link these dashboards directly to polkaholic.io based the key (accountID/extrinsicID/...) and add filtering on any column present in the table with Apache Superset. + +Any UI can then link to this dashboard with the account ID, and the dashboard can link back to a block explorer. + +Once the dataset is made available, end users can build charts and dashboards with the same ease as they do in Excel or Google Sheets. + +The community dashboard can be used in the same way as Dune Analytics dashboards serves the EVM community. + + +### Ecosystem Fit + +While this proposal does not explicitly require collaboration on any of the 3 tiers, our intention is to: +1. set up a foundation where the Web3 Foundation could ask other teams to contribute datasets (Tier 2) and build dashboards (Tier 3) in the same way. +2. set up a repeatable model between Web3 Foundation and a Polkadot Data Alliance support data-oriented research (W3F) and ongoing maintenance ([Polkadot Data Bounty](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#)) with child bounties + +## Team :busts_in_silhouette: + +### Team members / Contact + +- **Contact Name:** Sourabh Niyogi / Michael Chung +- **Contact Email:** sourabh@colorfulnotion.com / michael@colorfulnotion.com +- **Website:** https://colorfulnotion.com + +### Legal Structure + +- **Registered Address:** 55 E 3rd Ave, San Mateo, CA 94401, USA +- **Registered Legal Entity:** Colorful Notion, Inc. + +### Team's experience + +* Key engineers Sourabh Niyogi and Michael Chung have developed Polkaholic.io since Fall 2021 and substrate-etl since December 2022. + +* Prior to building Polkaholic.io, Sourabh and Michael worked in decentralized social networking protocol development + privacy-preserving contact tracing (Wolk), +mobile advertising real-time bidding algorithm design and analytics (CrossChannel/MdotM). + +* Sourabh spent time doing computational cognitive science and machine vision research at MIT, including +in [Bayesian learning of verb meaning and causal laws](https://scholar.google.com/citations?user=HHmGYdEAAAAJ&hl=en]. + +* Michael hails from UC Berkeley with a degree in statistics and economics and leads deep indexing at Colorful Notion. + +### Team Code Repos + +- [substrate-etl](https://github.com/colorfulnotion/substrate-etl) +- [Polkaholic.io](https://github.com/colorfulnotion/polkaholic) +- [XCM Global Asset Registry](https://github.com/colorfulnotion/xcm-global-registry) +- [Sourabh Niyogi](https://github.com/sourabhniyogi) | [Michael Chung](https://github.com/mkchungs) + +## Development Status :open_book: + +* Summer 2022: Released Polkaholic.io, a fully working Substrate-first multichain block explorer. +* Fall 2022: Increased XCM Transfers Coverage, Improved UI + API based on feedback from users. Added EVM/WASM support. +* Winter/Spring 2023: Developed substrate-etl and XCM Global Asset Registry. +* May 2023: Google included Polkadot + Kusama in [Google Public Datasets](https://cloud.google.com/bigquery/public-data). + +## Development Roadmap :nut_and_bolt: + +This proposal aims to deliver on the three-tier architecture outlined in two milestones: + +* Milestone 1 will develop `System:Account` deep analytics. +* Milestone 2 will develop `Democracy`, `Staking` and `NominationPools` deep analytics. + +For each Milestone, there are 3 kinds of deliverables corresponding to the 3 tiers: +- 1. Raw indexes, in the form of BigQuery datasets which are delivered +- 2. Deep indexes, in the form of BigQuery dataset +- 3. Dashboard publication, in the form of Apache Superset Dashboard + +All raw and deep indexing code will be made open source within the polkaholic and substrate-etl repo. + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 300 FTE hours [100 USD/hr] +- **Total Costs:** 30,000 USD + +### Milestone 1 — Three Tier Deep Account Analytics on Account References + +- **Estimated duration:** 8 weeks (ending 8/31/23) +- **FTE:** 150 FTE hours [100 USD/hr] +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | GNUv3 - polkaholic + substrate-etl repo | +| 0b. | Documentation | Provide README on construction of 1+2+3 | +| 0c. | Manual Testing Guide | Manual testing guide with steps for using the application, with examples including expected inputs and outputs | +| 1. | Raw Indexing | substrate-etl:crypto_polkadot.traces0 for 7/1/23 - 8/31/23 | +| 2. | Deep Indexing | substrate-etl:substrate.accountreference0 and supporting datasets | +| 3. | Dashboard Publication | Superset dashboard tab: "Account Reference" | + +We will take this opportunity to deliver raw indexes on traces, deep indexes on account references and a dashboard on Account References hosted at https://analytics.polkaholic.io. + +Indexing + Dashboard Publication must be able to support deep analysis of **Account References**: +* Which transactions/accounts were responsible for the reserved balance in an account? +* What modules currently depend on consumers, providers, and sufficients reference counters for a certain account, and which transactions introduced/removed those references? +* What are the pallets responsible for reserves/holds and locks/freezes on an account? + + +### Milestone 2 — Three Tier Deep Account Analysis of Democracy+Staking+Nomination Pools + +- **Estimated duration:** 8 weeks (ending 10/31/23) +- **FTE:** 150 FTE hours [100 USD/hr] +- **Costs:** 15,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | GNUv3 - polkaholic + substrate-etl repo | +| 0b. | Documentation | Document substrate-etl README on 1+2+3 | +| 0c. | Manual Testing Guide | Manual testing guide with steps for using the application, with examples including expected inputs and outputs | +| 1. | Raw Indexing | BigQuery Index substrate-etl.crypto_polkadot.traces0 9/1/2023-10/31/23 -- stashing accounts | +| 2. | Deep Indexing | BigQuery substrate-etl:substrate.democracy_* substrate-etl:substrate.staking_* substrate-etl:substrate.nomination_pools_* | +| 3. | Dashboard Publication | Superset dashboard tabs: "Democracy", "Staking", "Nomination Pools" | + +We will take this opportunity to address the complexity of stashing accounts by: +* Deep Indexing. Using the above tables in the views referencing `storage_staking_*, storage_nominationpools_*` tables +* Dashboard Publication. Using the above, we can develop dashboards for Democracy+Staking+Nomination Pools + +Indexing + Dashboard Publication must be able to support deep analysis of Democracy and Staking/Nomination Pools pallets: +* Democracy: Which accounts have delegated OpenGov votes to an account or to which accounts the account in question has delegated their votes to for each track? +* Staking/Nomination Pools: Who are all the nominators that nominated Validator X? (an inverse mapping basically of staking.nominators from validator -> nominators) Who are the top 10 nominators with the highest APR, and which validators do they have in common? + +## Future Plans + +Broadly, this proposal sets up a path for the Web3 Foundation to have Polkadot Data Alliance contributors deliver results for the Web3 Foundation itself and the community in the following ways: + +1. within the three-tier architecture, Polkadot Data Alliance contibutors can collaborate with Web3 Foundation and others in the Substrate community using raw indexes, published deep indexes, or building and extending dashboards. Our technical choice for collaboration is BigQuery and Apache Superset but other choices may be equally viable or appropriate, by other teams. + +2. with the [Polkadot Data Alliance Bounty](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#) and the [Web3 Foundation Maintance Grants](https://github.com/w3f/Grants-Program#hammer_and_wrench-maintenance-grants), there is a clear path to support both software maintainence _and_ hosting / data indexing infrastructure + +In followup work, we would expect to address the 3 tiers: +* raw indexing: cover traces on a regular basis defined in child bounties +* deep indexing: support the dataset deliverables on a regular basis +* dashboards: maintain published dashboards developed, and host the Apache Superset + +We would welcome the challenge of doing followon high impact work, but hope that others in the Polkadot Data Alliance can follow this model as well. + +We propose a child bounty to host Apache Superset instance at https://analytics.polkadot.network or transfer this responsibility to a parent bounty curator. + +## Additional Information :heavy_plus_sign: + +We request suitable Web3 Foundation members be identified as parent +and child bounty curator candidates, and that the charter for the +Polkadot Data Alliance be developed in a collaboration with Parity. +The Polkadot Data Alliance charter is [here](https://docs.google.com/document/d/1fA5ARHy-frzgZC66rniKZ5o7CSbDvCTkS--kWaMzuMs/edit#). + +We do not believe our participation (or anyone else's participation) +in a Polkadot Data Alliance in providing deliverables at any of the +three tiers eliminates the possibility of doing further data +processing for other sources of additional revenue. Our goal is to be +self-sufficient and not dependent on W3F Grants or Treasury funding, +but we hope our value and commitment to sharing and collaboration is +recognized by the community so we can be productive high impact +contributors. + + + From 1af43b94cf9a50404b92fe268a7d20b0e1ec0b91 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 19 Jun 2023 14:04:14 +0200 Subject: [PATCH 417/665] Update index.md Add Colorful --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index da8a3485930..d9ff7193282 100644 --- a/applications/index.md +++ b/applications/index.md @@ -73,6 +73,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | +| [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | [🔝](#2023) From 062d98092093c404cd44819a35f432296951875b Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 19 Jun 2023 14:17:50 +0200 Subject: [PATCH 418/665] fix website --- applications/DeepAccountAnalytics-PolkadotDataAlliance.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md index 9fe64a06d89..1b139b05c17 100644 --- a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md +++ b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md @@ -57,7 +57,7 @@ with new functionality. Instead, our solution to this problem is to separate the THREE TIERS within a _genuinely collaborative_ Polkadot Data Alliance: -* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here]() +* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here] * Tier 2: deep indexing can then be done by doing some amount of data engineering with the above raw deata, resulting in tables, views or materialized views that can also be shared with new datasets, which can also be shared with Analytics Hub. @@ -98,7 +98,7 @@ as it requires compute time to regenerate. Polkaholic.io's indexer, when traces are available from an internal archive node, fetches traces and exposes them in the block explorer. For example, here is the trace for [Polkadot Block 15723663](https://polkaholic.io/trace/polkadot/15723663/) - + The raw keys (e.g. `0x26aa394eea5630e0...f1dbd372bbe532b1f8702b2a7e`) and values (e.g. `0x01ab50050...000000000000`) are decoded using the chains type spec into @@ -120,7 +120,7 @@ Value: { and loaded into BigQuery as part of a publicly available [substrate-etl](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/974572213039/locations/us/dataExchanges/substrate_18804f88005), recently added to Google BigQuery's Public Datasets in May 2023. - + In Milestone 1, we will provide a 3 tier solution to deep account analytics on Account References. Here is how the 3 tiers: @@ -130,7 +130,7 @@ In Milestone 1, we will provide a 3 tier solution to deep account analytics on A * Tier 3 requires situating the above dataset into an Account Analysis Dashboard of [Apache Superset](https://analytics.polkaholic.io/dashboard/list/). Here we have a WASM Contract Explorer prototype: - + We envision Milestone 1 focussed on Account References and then extended in Milestone 2 to Democracy+Staking deep analysis. This will result in an Account Analysis Dashboard, with 3 or more account tabs exploring: From de399e3b79deb9be7d6e9a05677e46735a6ebe5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 19 Jun 2023 14:25:58 +0200 Subject: [PATCH 419/665] Update DeepAccountAnalytics-PolkadotDataAlliance.md Fix markdown link issue --- applications/DeepAccountAnalytics-PolkadotDataAlliance.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md index 1b139b05c17..def68a8ed1b 100644 --- a/applications/DeepAccountAnalytics-PolkadotDataAlliance.md +++ b/applications/DeepAccountAnalytics-PolkadotDataAlliance.md @@ -57,7 +57,7 @@ with new functionality. Instead, our solution to this problem is to separate the THREE TIERS within a _genuinely collaborative_ Polkadot Data Alliance: -* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here] +* Tier 1: raw indexing results in all blocks, extrinsics, events, traces delivered in Google Bigquery Public Datasets. In May 2023, Colorful Notion, under the curation of Parity Data, onboarded a complete index of 70+ chains of Polkadot+Kusama into Google Public Datasets. This is in the "crypto_polkadot" and "crypto_kusama" dataset, which anyone can access with this Analytics Hub link [here](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/974572213039/locations/us/dataExchanges/substrate_18804f88005/listings/polkadot_188057df28c?project=github-integration-295917) and [here](https://console.cloud.google.com/bigquery/analytics-hub/exchanges/projects/974572213039/locations/us/dataExchanges/substrate_18804f88005/listings/kusama_1880581b627?project=github-integration-295917). * Tier 2: deep indexing can then be done by doing some amount of data engineering with the above raw deata, resulting in tables, views or materialized views that can also be shared with new datasets, which can also be shared with Analytics Hub. From 789ab0e59b6328cc8976807bb07460231f156d6c Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Mon, 19 Jun 2023 15:37:47 +0200 Subject: [PATCH 420/665] Update xcm-tool.md fix typo --- docs/RFPs/Open/xcm-tool.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RFPs/Open/xcm-tool.md b/docs/RFPs/Open/xcm-tool.md index d36ae0fa8e1..8198519b580 100644 --- a/docs/RFPs/Open/xcm-tool.md +++ b/docs/RFPs/Open/xcm-tool.md @@ -19,6 +19,6 @@ There are currently two major areas of XCM that are still awaiting to be improve The scope of the new project count be one of: -- Develop tools to help developer to test XCM-related code +- Develop tools to help developers to test XCM-related code - Develop pallets or utility libraries to better handle the async nature of XCM communication - Develop a pallet to handle crosschain transfers of NFTs From b808b1f353c4b2bacccb7ad9b7a7d7300d3d2cb3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 20 Jun 2023 11:30:05 +0200 Subject: [PATCH 421/665] Update ISO_8583.md Fix link to ISO20022 RFP --- docs/RFPs/Open/ISO_8583.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RFPs/Open/ISO_8583.md b/docs/RFPs/Open/ISO_8583.md index d6a5047ebb9..a910d2a595c 100644 --- a/docs/RFPs/Open/ISO_8583.md +++ b/docs/RFPs/Open/ISO_8583.md @@ -7,7 +7,7 @@ ISO 8583 is an international standard for systems that exchange electronic transactions initiated by cardholders using payment cards. It defines a message format and a communication flow, but offers also custom fields and custom usages. Most transactions that involve ATMs are based on this standard and Mastercard, Visa and Verve networks base their authorization communications on the ISO 8583 standard. -Even though ISO 8583 is going to be replaced by [ISO 20022](https://github.com/w3f/Grants-Program/blob/master/rfps/open/ISO_20022.md), it might take some time before it’s actually fully replaced. +Even though ISO 8583 is going to be replaced by [ISO 20022](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/ISO_20022.md), it might take some time before it’s actually fully replaced. The goal of this RFP is to find teams that implement tools that make it easy and possible for the traditional finance industry to leverage substrate and ink! smart contracts to interact with ISO 8583 in various ways. These tools could be, but are not limited to: From 2ae2e3889859af628447977dd9a45ec8f11d622a Mon Sep 17 00:00:00 2001 From: Dastan <88332432+dastansam@users.noreply.github.com> Date: Tue, 20 Jun 2023 22:13:31 +0300 Subject: [PATCH 422/665] Add ISO-8553 application (#1809) Address more feedback --- applications/ISO-8583-implementation.md | 174 ++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 applications/ISO-8583-implementation.md diff --git a/applications/ISO-8583-implementation.md b/applications/ISO-8583-implementation.md new file mode 100644 index 00000000000..2a8f6789bbf --- /dev/null +++ b/applications/ISO-8583-implementation.md @@ -0,0 +1,174 @@ +# ISO-8583 implementation + +- **Team Name:** Dastanbek Samatov +- **Payment Address:** 0xc42D0562BB4e53f5e9D888df35e1B91eA0f19cC3 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +This application is in response to the [ISO-8583 RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/ISO_8583.md). + +### Overview + +ISO-8583 PoC implementation for Substrate. + +In this project I aim to implement the proof of concept for the ISO-8583 standard in Substrate. The implementation will be based on the extensive research done by [Adit Patel](https://github.com/adit313) in the following [repository](https://github.com/adit313/ISO8583-Blockchain-Integration-Plan). + +I've already worked on the similar project for [EBICS standard](https://github.com/element36-io/ocw-ebics). I can leverage the knowledge gained from that project and research done by Adit Patel to implement the ISO-8583 standard in Substrate. + +### Project Details + +To fully imitate the ISO-8583 standard, I have divided this PoC project into two parts: infrastracture and blockchain. Infrastracture components are responsible for imitating the flow of the ISO-8583 message from the merchant to the PCIDSS compliant gateway. Blockchain components are responsible for further processing of the ISO-8583 message and settling the transactions/messages on the Substrate chain. + +Below is the implementation plan in a deeper technical detail from Adit Patel's research: + +![Implementation plan](https://github.com/dastansam/Grants-Program/assets/88332432/8b832448-9095-4846-95ea-ccaebe5e52a5) + +#### Infrastracture + +For this part, the implementation will consist of the following components: + +- **Merchant**: A hybrid web application, i.e can be used to either make the payment directly on Substrate chain, guaranteeing instant settlement, or via debit/credit card. It will consist of a mock marketplace and main work will be done on the payment checkout window. Depending on the payment method, the application will then send the payment request to the corresponding payment processor. +- **Payment processor (Stripe, Visa, Mastercard)**: The payment processor will be imitated by a web server that will accept the payment request from the merchant, compose the ISO-8583 message and send it to the gateway. It will maintain the offchain ledger (database). +- **PCIDSS Compliant Gateway (Oracle Company)**: The gateway is the first part of the centralized oracle. It will be mocked by a message broker that will process the incoming ISO-8583 messages from the traditional network and pools them for the offchain worker to query. It is also responsible for maintaining an up-to-date record of the offchain and on-chain ledger, validating messages, keeping track of chain events and composing new messages in case there is a mismatch between the two ledgers. + +For the above componenets, there are already some open source projects that can be used. Namely: + +- [ISO-8583 implementation in Javascript](https://github.com/zemuldo/iso_8583): I will use this library in mock web server and the merchant application. Opted for this library since it seems to be well maintained and documented (the Rust version has the last commit from 2019). +- [RabbitMQ](https://www.rabbitmq.com/): I will use RabbitMQ as a message broker for the gateway. It is a well known and widely used message broker. It also has a [Rust client](https://github.com/jgallagher/amiquip) + +And for the merchant app, below are the mockups of payment checkout window: + +![Card payment](https://github.com/dastansam/Grants-Program/assets/88332432/ee5e870a-1992-4d74-b6da-288b615f50e2) + +![Payment on-chain](https://github.com/dastansam/Grants-Program/assets/88332432/f4412bf4-b2c3-4407-866a-6ebbd948ac35) + +![Successfull checkout](https://github.com/dastansam/Grants-Program/assets/88332432/64e6d9bc-54af-4848-a6db-226bc8eebd96) + +#### Blockchain + +On the blockchain side, there were three key components that were proposed in the research: + +- A centralized oracle +- ERC-20R smart contract +- Substrate chain + +However, from my previous experience building the EBICS PoC and generally as a more experienced Substrate developer, I believe the first two components can be simplified to: + +- **An offchain worker (OCW)**: It will act as a second part of the oracle, i.e it will query for the ISO-8583 messages from the gateway and will send them to the Substrate chain. The only way for the chain to receive the ISO-8583 messages will be through the OCW. This will ensure that the chain is not spammed with unnecessary messages and will also allow us to hide sensitive information like account numbers and authorization codes. +- **Pallet**: pallets are more flexible and a lot easier to implement and maintain than smart contracts. It will implement the ERC-20R standard and will settle the transactions on the Substrate chain. + +#### Challenges + +One of the main challenges for this project is the reversability of transactions in the ISO-8583 standard. The standard allows for the reversal of transactions in case of a dispute. This is not a problem for the traditional payment networks since they are centralized and can easily reverse the transaction. Although, ERC20-R standard has a `revert` function, it becomes complicated when we try to get back the funds that are already spent. I will have to do more research on this topic and will try to come up with a solution. + +#### Inspirations + +EBICS PoC implementation offers some insights and inspiration, however, the ISO-8583 standard is a lot more complex and will require a lot more robust and complex infrastructure. Similarly, on the blockchain side, the reversability of transactions will pose a great challenge. Therefore, large parts of the blockchain components will need to be rewritten from scratch or significantly refactored in best case. + +### Ecosystem Fit + +A quote from Adit Patel here: + +> Supporting international standards would smooth the connection between crypto and traditional financial institutions and is a [go to market strategy for several competing projects](https://www.cryptopolitan.com/iso-20022-compliant-crypto-list/). While those efforts are focused on the newer ISO-20022, not ISO-8583, there is significant value in being the first blockchain to support traditional banking infrastructure and dislodge incumbent networks such as SWIFT or Visa/Mastercard. + +## Team :busts_in_silhouette: + +### Team members + +- Dastanbek Samatov + +### Contact + +- **Contact Name:** Dastanbek Samatov +- **Contact Email:** dastanbeksamatov@gmail.com +- **Website:** https://dastansam.github.io/ + +### Legal Structure + +- **Registered Address:** No registred entity +- **Registered Legal Entity:** No registred entity + +### Team's experience + +Dastanbek Samatov is a Software Engineer with more than 3 years of experience. For the past 2 years he has been working as a Rust/Substrate Engineer focusing on parachain development and also has been involved with several Web3 Foundation grant projects in the past (some of them as lead developer): + +- `SCALE Codec in AssemblyScript` - https://github.com/LimeChain/as-scale-codec +- `Substrate Runtime in AssemblyScript` - https://github.com/LimeChain/as-substrate-runtime +- `Framework for Substrate Runtimes in AssemblyScript` - https://github.com/LimeChain/subsembly +- `OCW EBICS` - https://github.com/element36-io/ocw-ebics + +### Team Code Repos + +- https://github.com/subclone/iso-8583-chain-template +- https://github.com/subclone/payment-processor + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/dastanbeksamatov + +### Team LinkedIn Profiles (if available) + +- https://linkedin.com/in/dastanbek-samatov + +## Development Status :open_book: + +This application is in response to the [ISO-8583 RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/ISO_8583.md). + +The implementation is inspired from the previous [research](https://github.com/adit313/ISO8583-Blockchain-Integration-Plan) project for this RFP. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 28,000 USD + +### Milestone 1 Infrastructure Part + +- **Estimated duration:** 2 month +- **FTE:** 1 +- **Costs:** 14,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the whole infrastructure components. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Merchant App | I will create a React application that will mock the merchant. The app will be connected to the Substrate chain with `PolkadotJs` and users will be able to directly pay using an on-chain extrinsic. Web app will also handle necessary balance checks by querying chain to early return invalid transactions. Users will also have an option to use their mock plastic cards. | +| 2. | Payment Processor | I will create a NodeJs server that will receive payment requests from merchant app, compose the ISO-8583 message and send it to the gateway. This server will also be responsible for keeping the offchain ledger, similar to how traditional networks currently operate. | +| 3. | PCIDSS Compliant Gateway | I will create a message broker service that will serve as a centralized oracle gateway. It will process and pool incoming messages from the mock payment processor. Oracle will maintain a constant connection to Substrate chain, to ensure the validity of messages in the pool before they are consumed. For example, if there is a transfer from Alice to Bob, oracle will ensure that `Alice` has enough funds both offchain and on-chain, `tx_id` of transfer is not already on-chain, etc. It will also include mechanisms to ensure the message is being consumed by genuine offchain worker and not some other malicious *consumer*. For this step, some basic cryptographic authentication method will be used. | +| 4. | Makefile | I will create a Makefile that will provide commands to ease testing, running and maintaining the project | + + +### Milestone 2 Blockchain Part + +- **Estimated Duration:** 2 months +- **FTE:** 1 +- **Costs:** 14,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | I will publish an article that explains the complete lifecycle and future plans of the project | +| 1. | Substrate Chain | I will create a Substrate chain forked from `substrate-node-template`. | +| 2. | Offchain Worker | I will write an offchain worker logic that queries PCIDSS compliant gateway for ISO-8583 messages, processes them and dispatches extrinsics to the chain. | +| 3. | ERC-20R Pallet | I will create a pallet that implements the `ERC-20R` interface. It will be responsible for processing incoming message from the offchain-worker. It will perform security checks, maintain the ledger and control the issuance of the tokens. | +| 4. | Integration tests | I will add end-to-end tests with Javascript and `zombienet` | +| 5. | Makefile | I will create a Makefile that will provide commands to ease testing, running and maintaining the project | + +## Future Plans + +In case of successful PoC, I plan to continue working on this project to address some of the pain points of the PoC: + +- **Reversability**: look for more decentralized ways to guarantee reversability of the transactions, maybe with somewhat similar mechanism to slashing +- **Decentralization of Oracles**: look for more decentralized ways of message processing by using decentralized oracles, maybe look for the direction of zero-knowledge proofs + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +I have previously worked on several grant projects (listed above) and generally have been in Polkadot ecosystem for more than 3 years. From e1ed35650a0cf1b05d032137b7e435c803864209 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 20 Jun 2023 21:16:12 +0200 Subject: [PATCH 423/665] Update index.md add ISO-8553 PoC implementation --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d9ff7193282..197e69c6850 100644 --- a/applications/index.md +++ b/applications/index.md @@ -74,6 +74,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | +| [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | [🔝](#2023) From cc7b906e770aadc6604031d8d84e22ae512dace1 Mon Sep 17 00:00:00 2001 From: strategyobjectadmin <93009623+strategyobjectadmin@users.noreply.github.com> Date: Wed, 21 Jun 2023 17:42:40 +0400 Subject: [PATCH 424/665] Update substrate_client_java.md (#1811) --- applications/substrate_client_java.md | 78 +++++++++++++-------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/applications/substrate_client_java.md b/applications/substrate_client_java.md index 77c90a2a288..cda06048e78 100644 --- a/applications/substrate_client_java.md +++ b/applications/substrate_client_java.md @@ -1,6 +1,6 @@ # Substrate Client for Java -- **Team Name:** Doken +- **Team Name:** Seals - **Payment Address:** Information provided in the "W3F Technical Grant Application Form" ## Project Overview :page_facing_up: @@ -54,11 +54,11 @@ The best approach to reach project’s goals is to use annotations and code gene - [x] `@RpcEncoder`; - [x] `@RpcDecoder`; -- [ ] Pallet - - [ ] `@Pallet`; +- [x] Pallet + - [x] `@Pallet`; - [ ] `@Transaction`; - - [ ] `@Query`; - - [ ] `@EventHandler`. + - [x] `@Storage`; + - [x] `@Event`. These allow the generation of scale serializers, deserializers, RPC methods, code for interaction with pallet, etc. In the next sections you will find further examples. @@ -234,41 +234,41 @@ Our solution targets Substrate instead of Polkadot, and is implemented with code ### Team members -- Alexander Kalankhodzhaev, Team Leader -- Maria Manchovska, Product Manager -- Vadim Nabiev, Senior Developer +- Vadim Nabiev, Team Leader +- Arame Bandari, Product Manager +- Vahram Kobelyan, Senior Developer - Plamen Uzunov, Senior Java developer -- Teodor Georgiev, Software developer -- Maria Kostadinova, Information Designer +- Teodor Georgiev, Software developer ### Contact -- **Contact Name:** Alexander Kalankhodzhaev -- **Contact Email:** Alexander.Kalankhodzhaev@strategyobject.com +- **Contact Name:** Vadim Nabiev +- **Contact Email:** vadim.nabiev@strategyobject.com - **Website:** www.strategyobject.com Grateful if you could also copy the email address doken.network@gmail.com in all official communications. ### Legal Structure -- **Registered Address:** ul. "Tsaribrodska" 70, 1309 Sveta Troitsa, Sofia, Bulgaria -- **Registered Legal Entity:** Strategy Object EOOD +- **Registered Address:** Dubai Media City, Al Thuraya Tower 1 - Al Sufouh - Al Sufouh 2 - Dubai, United Arab Emirates +- **Registered Legal Entity:** Strategy Object FZ-LLC ### Team's experience -Alexander has over 14 years of experience as a software engineer and 3 years as a blockchain tech lead. Vadim has over 10 years as a software enfgineer and 2 years as Rust developer. Plamen is a Senior Engineer with over 15 years experience in particular in Java and cryptography. Teodor is a junior developer who recently joined the team, with a particular focus in Java development. +Vadim has over 10 years of experience as as a software enfgineer and 3 years as Rust developer. Plamen is a Senior Engineer with over 15 years experience in particular in Java and cryptography. Vahram is a Senior Engineer with over 7 years experience in particular in Java. Teodor is a junior developer who recently joined the team, with a particular focus in Java development. ### Team Code Repos -- [Strategy Object](https://github.com/orgs/strategyobject/) -- [Alexander](https://github.com/kalaninja/) -- [Vadim](https://github.com/vnabiev/) -- [Plamen](https://github.com/PapiUzunov/) +- [Strategy Object](https://github.com/strategyobject) +- [Vadim](https://github.com/vnabiev) +- [Vahram](https://github.com/VahramKobelyan) +- [Plamen](https://github.com/PapiUzunov) ### Team LinkedIn Profiles (if available) -- [Alexander](https://www.linkedin.com/in/kalaninja/) - [Vadim](https://www.linkedin.com/in/nabiev-v-r/) +- [Vahram](https://www.linkedin.com/in/kobelyan/) +- [Arame](https://www.linkedin.com/in/aramebandari/) - [Plamen](https://www.linkedin.com/in/plamen-uzunov-2761b47/) - [Teodor](https://www.linkedin.com/in/teodor-georgiev-248914192/) @@ -283,7 +283,7 @@ The current version of the substrate-client-java is available at https://github. ### Overview -- **Total Estimated Duration:** 7 months +- **Total Estimated Duration:** 24 months - **Full-Time Equivalent (FTE):** 2.9 FTE - **Total Costs:** Information provided in the "W3F Technical Grant Application Form" @@ -321,7 +321,7 @@ Implement a query api similar to the one of polkadot-js. Implement a transactions api similar to `api.tx` of polkadot-js. -- **Estimated duration:** 1 month +- **Estimated duration:** 2 months - **FTE:** 3 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" @@ -331,41 +331,41 @@ Implement a transactions api similar to `api.tx` of polkadot-js. | 1. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can submit transactions. | | 2. | Testing | Core functions will be fully covered by unit and integration tests to ensure functionality and robustness. | | 3. | Wiki | We will publish a wiki page that explains the details of the implementation for transactions within the substrate-client-java library. | -| 4. | Transactions API | We will add transactions capabilities to the substrate-client-java. | - -### Milestone 4 — RPC sections and methods +| 4. | Transactions API | We will add transactions capabilities to the substrate-client-java. | -Implement RPC sections and methods that remained unimplemented from the previous steps. +### Milestone 4 — Handling of Metadata -- **Estimated duration:** 1 month +- **Estimated duration:** 2 months - **FTE:** 3 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | 0a. | License | Apache 2.0 | -| 1. | Documentation | We will provide **inline documentation** of the declared RPC sections and methods. | -| 2. | Testing | Core functions will be fully covered by integration tests to ensure functionality and robustness. | -| 3. | Wiki | We will publish a wiki page that explains the details of the implementation for RPC sections and methods within the substrate-client-java library. | -| 4. | RPC methods | We will add missing RPC sections and methods to the substrate-client-java. | +| 1. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains about handling of metadata. | +| 2. | Testing | Core functions will be fully covered by unit and integration tests to ensure functionality and robustness. | +| 3. | Wiki | We will publish a wiki page that explains the details of metadata handling within the substrate-client-java library. | +| 4. | Metadata support | We will add metadata capabilities to the substrate-client-java. | -### Milestone 5 — Handling of Metadata +### Milestone 5 — RPC sections and methods -- **Estimated duration:** 1 month +Implement RPC sections and methods that remained unimplemented from the previous steps. + +- **Estimated duration:** 2 months - **FTE:** 3 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | 0a. | License | Apache 2.0 | -| 1. | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains about handling of metadata. | -| 2. | Testing | Core functions will be fully covered by unit and integration tests to ensure functionality and robustness. | -| 3. | Wiki | We will publish a wiki page that explains the details of metadata handling within the substrate-client-java library. | -| 4. | Metadata support | We will add metadata capabilities to the substrate-client-java. | +| 1. | Documentation | We will provide **inline documentation** of the declared RPC sections and methods. | +| 2. | Testing | Core functions will be fully covered by integration tests to ensure functionality and robustness. | +| 3. | Wiki | We will publish a wiki page that explains the details of the implementation for RPC sections and methods within the substrate-client-java library. | +| 4. | RPC methods | We will add missing RPC sections and methods to the substrate-client-java. | ### Milestone 6 — ED25519 -- **Estimated duration:** 1 month +- **Estimated duration:** 2 months - **FTE:** 2.5 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" @@ -381,7 +381,7 @@ Implement RPC sections and methods that remained unimplemented from the previous Implement Constants API similar to `api.consts` of polkadot-js that allows access to the runtime constants. -- **Estimated duration:** 1 month +- **Estimated duration:** 2 months - **FTE:** 2.5 FTE - **Costs:** Information provided in the "W3F Technical Grant Application Form" From 6734179d01ce6a4d66aafe47f2faa9d20ef276e3 Mon Sep 17 00:00:00 2001 From: MeerKatDev Date: Wed, 21 Jun 2023 17:42:20 +0200 Subject: [PATCH 425/665] Application for Substrate Move System Pallet, pt. 1 (#1769) --- .../Substrate_Move_System_Pallet_1.md | 187 ++++++++++++++++++ 1 file changed, 187 insertions(+) create mode 100644 applications/Substrate_Move_System_Pallet_1.md diff --git a/applications/Substrate_Move_System_Pallet_1.md b/applications/Substrate_Move_System_Pallet_1.md new file mode 100644 index 00000000000..a9369dadf82 --- /dev/null +++ b/applications/Substrate_Move_System_Pallet_1.md @@ -0,0 +1,187 @@ +# Substrate Move System Pallet (part 1) + +- **Team Name:** Eiger +- **Payment Address:** Fiat 14.04.2023, 16:50 UTC+3 +- **Level:** 3 + +## Project Overview ****📄**** + +This application is a response to the **[Move Smart Contract Pallet RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/move_smart_contract_pallet.md).** + +### Overview + +Some terminology first: + + - **Substrate Move System Pallet** - A Substrate system pallet that can be used as a building block for substrate-based chains, it exposes interfaces to interact with the Move virtual machine. + + - **Substrate Move** - A Move language fork that is Substrate compatible. + +Objectives: + +- The goal is to provide a Substrate system pallet that allows to deploy and interact with Smart Contracts written in the Move language, by providing a Move Virtual Machine (MoveVM) as a pallet. +- We plan on exploring a fork of the Move language, so it’s adjusted to work with the Substrate ecosystem, as well as developing a Substrate system pallet that allows the execution of Move smart contracts. +- The project directly improves the growth potential of the Substrate based ecosystem by providing support for one of the most modern smart contract programming languages and VM types out there - Move. +- We are interested in creating this project because we are firm believers in the modular vision of web3, and only by collaborative efforts on improving and unifying the technology between different chains and the languages, will we get better products as an outcome. + +**Goal** - Level up the growth possibilities of the Substrate ecosystem by providing a way to develop and execute Move smart contracts on Substrate. + +This is the first phase of a 3-phase development program: + +1. **In-Depth Exploration and Assessment of MoveVM and Substrate Integration** +2. MoveVM compatibility work and Subtrate Pallet development +3. Finalising the Substrate-Compatible MoveVM + +### Project Details + +**Prior work** + +We are basing the core architecture and many of the design decisions on the [Pontem networks developed system pallet for Move VM](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm). They had maintained [their own fork of the Diems Move language](https://github.com/pontem-network/sp-move-vm), which was used as the base execution layer for their version. Both of these repositories have not been maintained for a very long time already. + +♻️ We aren't seeking to maintain any of the existing codebase; rather, we aim for a full revival through a new greenfield project. Our rationale for this stems from the substantial advancements made in the Rust, Substrate, and Move ecosystems since Pontem’s latest commits from over a year ago. We believe that handling potential code rot due to the passage of time might be more labor-intensive than starting afresh and drawing upon existing projects for more current guidelines. + +**Documentation of core components, architecture** + +1. **Substrate Move:** + + The first part of the project will be a MoveVM fork, as some major changes will need to be made to the codebase for it to be substrate compatible. For example: + + - `no_std` compatibility: Making it lightweight and suitable for use in Substrate runtimes. + - `wasm32` target compatibility: Adapting all the VM’s different components to work efficiently and securely on the wasm32 target architecture. + + We plan on creating and maintaining the fork in a manner that would allow us and the community to easily follow and track changes from the upstream, thus making the maintenance and change tracking to be much simpler. + + At the time of writing this application, we suspect that this will be needed because this is what also Pontem had to do to support it in their version. This will be further researched and assessed during the first milestone. + +2. **Move VM system pallet:** + + The second part of the project will be a Substrate virtual machine pallet in Substrate. This is a modular component that is needed to integrate a specific new VM into a Substrate runtime. It will serve as a bridge between the runtime and the Move VM, managing resources and translating data or actions between the two environments. + + +**API specifications** + +As a minimum, we plan on providing all of the RPC calls that the Pontem crate did. As the team progresses with the implementation, we might add or remove RPC calls as we best see fit. + +Move language has a concept of “gas” for executing contracts, whereas Polkadot uses “Weights”. Each Move transaction invocation requires providing a gas limit for execution, and it’s necessary to be able to transform the values between weight and gas: + +- `mvm_gasToWeight` +- `mvm_weightToGas` + +Estimating gas for different operations: + +- `mvm_estimateGasPublish` +- `mvm_estimateGasExecute` + +Working with the primitives of the Move language: + +- `mvm_getResource` +- `mvm_getModuleABI` +- `mvm_getModule` + +**Tech stack** + +We plan on using Rust for developing the system pallets and using existing Move language smart contracts for end-to-end testing of the whole workflow. + +**Notes** + +Because the Move language requires a fork to work with Substrate chains, and modifications to the address size, there might be incompatibilities with deploying existing Move Smart Contracts from other chains that make use of the address properties size, as well as the compiled ABI and bytecode for those contracts might be invalid. To deploy on our MoveVM system pallet, the forked toolchain must be used to re-compile all smart contracts. The address size of Move language is configurable via a feature switch with 32-bits being one of the options. + +### Ecosystem Fit + +Move is a smart contract programming language that emphasizes access control and scarcity, offering some unique advantages over other popular VMs in blockchain ecosystems. + +The importance of bringing the MoveVM to Polkadot was recognized over two years ago when [Pontem Network](https://pontem.network/) started working on a [Move virtual machine pallet](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm) to execute Move smart contracts on Substrate-based chains. Although they discontinued the project and haven't updated the codebase for over a year, the W3F still keeps this RFP, which serves as evidence that porting the MoveVM is crucial for the future of the Polkadot network. + +We concur with this perspective and have actually been actively researching the MoveVM - exactly with a similar idea of helping port it over to other chains. + +## Team **👥** + +### Team members + +- **Roberts Ivanovs** ([Github](https://github.com/roberts-ivanovs), [Linkedin](https://www.linkedin.com/in/roberts-ivanovs-3b24b6159/)) is a Rust Software Engineer at Eiger. He has extensive experience using Rust for performance-sensitive backend work, the IoT industry, web development, and Solidity/dApp development. +- **Tomek Piotrowski** ([Github](https://github.com/tomekpiotrowski), [Linkedin](https://www.linkedin.com/in/tomasz-piotrowski-17466b4/)) Software Engineer at Eiger, specializing in Rust-based applications. With a strong background in software development, he has spent recent years focusing on the Rust programming language. At Eiger, Tomasz actively contributes to the advancement of Rust-based blockchains and their ecosystems. + +### Contact + +- **Contact Name:** Daren Tuzi +- **Contact Email:** [daren@eiger.co](mailto:daren@eiger.co) (Founder & CEO of Eiger) +- **Website:** [Eiger.co](https://www.eiger.co/) + +### Legal Structure + +- **Registered Address:** Linnankatu 3 A 24, 20100 Turku, Finland +- **Registered Legal Entity:** Eiger Oy**** + +### Team's experience + +Web3 promises to upgrade the very foundations of our society – from money, finance, and governance to media, gaming, and science. To deliver on that promise, decentralised technologies are to be integrated into the everyday experiences of billions of people. For engineering, this is a mountain of a challenge. + +Eiger was founded to develop infrastructure for web3 mass adoption. We help technology companies improve and integrate the core technologies of web3 to meet the climbing demands for scaling and performance. + +We currently employ 25+ senior web3 engineers across the globe and work with some of the most ambitious organisations in the industry, including Forte, Aleo, and XRP Labs, to name a few. + +### Team Code Repos + +As mentioned in the Teams section, Eiger already has extensive experience developing large infrastructural projects. Some chosen examples: + +- The SnarkOS for Aleo, the privacy-focused smart contract L1 platform going into production this summer. https://github.com/AleoHQ/snarkOS +- OrbitDB is a distributed, p2p, serverless database. https://github.com/orbitdb/orbit-db +- The rust implementation of IPFS, now archived. https://github.com/rs-ipfs/rust-ipfs +- The main implementation of Interledger in Rust, which we developed and maintained. https://github.com/interledger/interledger-rs +- Ziggurat - A Network protocol testing framework for ZCash, XRP, and Algorand. Notably, critical network vulnerabilities were found and reported to the core teams. https://github.com/runziggurat + +## Development Status **📖** + +- This application is a direct response to [this RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/move_smart_contract_pallet.md) +- [Move language Github](https://github.com/move-language/move/tree/main/language) +- [Pontem MoveVM fork](https://github.com/pontem-network/sp-move-vm) +- [Pontem MoveVM system pallet](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm) + +We have not yet started our own development, we are still in the research phase. + +## Development Roadmap **🔩** + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 48 000 USD + +### **In-Depth Exploration and Assessment of MoveVM and Substrate Integration** + +**Goal**: Research Pontem Move VM solution, Move language and its ecosystem, and document all findings. Prepare a repository for developing the Substrate Move system pallet. + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 and MIT | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | Content: article that explains all of the research and findings done in the research phase, and how it shapes the project in the future. The research would include:
  • analysis of the Pontem Move fork,
  • analysis of the Pontem MoveVM system pallet, evaluating its architecture and design decisions,
  • analysis of the current Move language restrictions, ABI and understanding if forking the language is still necessary,
  • analysis of the potential effects of forking the language and the toolchain if it is deemed necessary.
Medium: A markdown design decision document in the repository. | +| 1. | System Pallet: Substrate Move | We will create a Substrate system pallet that will provide the RPC calls as the initial interfaces for interacting with the Move VM. The Move VM port itself will not be implemented, all of the methods will be empty stubs.
Solid code practices will be in place: CI/CD, tests, documentation, linting, and publication of the library to http://crates.io. | +| 2. | Rust crate: Substrate Move | Forking the Move VM if deemed necessary. The alterations would include everything to create the virtual machine Substrate-compatible. | +| 3. | Rust crate: Substrate Move documentation | Documentation of the alteration made for the MoveVM to be Substrate-compatible. Also, the whole process of how it was ported will be described, either in form of markdown documentation or detailed commenting on GitHub issues and PRs. | + + +## Future Plans + +This is the first phase of a 3 steps development plan: + +1. **In-Depth Exploration and Assessment of MoveVM and Substrate Integration** +2. MoveVM compatibility work and Subtrate Pallet development +3. Finalising the Substrate-Compatible MoveVM + +The **next** step will be to submit a grant proposal to continue this work - creating the first iteration of a pallet capable of receiving, storing and executing Move smart contracts. + +We hope that upon the completion of all phases of creating the Substrate Move System Pallet , it will open doors for further collaboration and community input on the project. We strive to have the codebase well documented so that others might join in and contribute. + +While there are no long-term plans set in stone for the usage of this pallet, we have had incredibly exciting discussions about creating a parachain, possibly a [common good parachain](https://polkadot.network/blog/common-good-parachains-an-introduction-to-governance-allocated-parachain-slots/) (system parachain), that utilizes this MoveVM implementation and would run MoveVM contracts. As we near the completion of this initial development, we will be discussing these future plans more in-depth. + +## Additional Information **➕** + +**How did you hear about the Grants Program?** + +We learned about it when looking at open RFPs by the web3 foundation on their website. + +We wanted to get back up to date on what is happening in the Polkadot ecosystem, and working on grants, specifically RFPs, has been a great way to do so. + +Looking to apply to other RFPs currently open as well. Stay tuned! From 0d5624b6c68eab0b7ab1447c3240723420e31fb6 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 21 Jun 2023 17:49:52 +0200 Subject: [PATCH 426/665] Update index.md Add Move --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 197e69c6850..6a2b17bf96a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -75,6 +75,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | | [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | +| [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | [🔝](#2023) From 7633082a101037f6dc468f7680928b67f128e6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 21 Jun 2023 17:52:47 +0200 Subject: [PATCH 427/665] Update Substrate_Move_System_Pallet_1.md Fix HTML for website --- applications/Substrate_Move_System_Pallet_1.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Substrate_Move_System_Pallet_1.md b/applications/Substrate_Move_System_Pallet_1.md index a9369dadf82..05cd4519156 100644 --- a/applications/Substrate_Move_System_Pallet_1.md +++ b/applications/Substrate_Move_System_Pallet_1.md @@ -157,7 +157,7 @@ We have not yet started our own development, we are still in the research phase. | 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | Content: article that explains all of the research and findings done in the research phase, and how it shapes the project in the future. The research would include:
  • analysis of the Pontem Move fork,
  • analysis of the Pontem MoveVM system pallet, evaluating its architecture and design decisions,
  • analysis of the current Move language restrictions, ABI and understanding if forking the language is still necessary,
  • analysis of the potential effects of forking the language and the toolchain if it is deemed necessary.
Medium: A markdown design decision document in the repository. | -| 1. | System Pallet: Substrate Move | We will create a Substrate system pallet that will provide the RPC calls as the initial interfaces for interacting with the Move VM. The Move VM port itself will not be implemented, all of the methods will be empty stubs.
Solid code practices will be in place: CI/CD, tests, documentation, linting, and publication of the library to http://crates.io. | +| 1. | System Pallet: Substrate Move | We will create a Substrate system pallet that will provide the RPC calls as the initial interfaces for interacting with the Move VM. The Move VM port itself will not be implemented, all of the methods will be empty stubs.
Solid code practices will be in place: CI/CD, tests, documentation, linting, and publication of the library to http://crates.io. | | 2. | Rust crate: Substrate Move | Forking the Move VM if deemed necessary. The alterations would include everything to create the virtual machine Substrate-compatible. | | 3. | Rust crate: Substrate Move documentation | Documentation of the alteration made for the MoveVM to be Substrate-compatible. Also, the whole process of how it was ported will be described, either in form of markdown documentation or detailed commenting on GitHub issues and PRs. | From f1ece0de457990696a4ecdec9ae8936b37a37b8c Mon Sep 17 00:00:00 2001 From: Jonathan L Date: Wed, 21 Jun 2023 11:30:34 -0500 Subject: [PATCH 428/665] Dot-ETL Project Proposal (#1716) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create / update dot_etl.md, + minor changes and feedback * Update dot_etl.md changes w/ more detail to accomodate feedback * Update applications/dot_etl.md Co-authored-by: Sebastian Müller * Update dot_etl.md updated total estimated duration * Update dot_etl.md update - remove double entry ledger from M1 description * Update dot_etl.md Updates to accommodate common interface to allow for extensibility to other platforms, etc. * Update dot_etl.md updated milestone specific steps --------- Co-authored-by: johncandido Co-authored-by: Sebastian Müller --- applications/dot_etl.md | 164 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 applications/dot_etl.md diff --git a/applications/dot_etl.md b/applications/dot_etl.md new file mode 100644 index 00000000000..e4fbf5ee1ce --- /dev/null +++ b/applications/dot_etl.md @@ -0,0 +1,164 @@ +# DOT-ETL + +- **Team Name:** Davanti +- **Payment Address:** 16m9eMpB3BuPSXwjvdCY6z63pTuvdnv8FjmmH33ZkYPCr9XC +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +This proposal is in response to the following RFP: [Analysis Website and Data Platform](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/analysis-website-and-data-platform.md) + +The goal of the Dot-ETL project is to lower the friction required to conduct fine-grained and aggregated analysis of transactions on Polkadot network, via a framework to extract Polkadot transaction-level data to various offline formats: e.g. CSV / delimited, relational, columnar. Furthermore, we intend to develop a framework to ETL Substrate to [Google BigQuery](https://cloud.google.com/bigquery), orchestrated via [Google Cloud Composer](https://cloud.google.com/composer). + +The Polkadot and Kusama ecosystems have nurtured a significant developer community, and hosts a number of well-known parachains spanning a diverse series of domains, including Defi lending / liquidity, DEXs, NFTs, RWAs and securitization, as well as identity and privacy applications. While there has been a great deal of interest in developing on polkadot, there hasn't thus far been a simple means to query and visualize transaction-level data and aggregates. + +Dot-ETL will be similar in functionality to the [Ethereum ETL project](https://ethereum-etl.readthedocs.io/en/latest/). In the same way that the ETH-ETL offering Ethereum transaction data as a Public Dataset from Google has helped to establish higher TVL and adoption of the Ethereum network, the goal is that by making PolkaDot transactional data easily accessible without the majority of data engineering tasks that exist in extracting data in usable form from the blockchain will lead to greater development and interest for the protocol by mainstream users of platforms such as Google Cloud. Once data is supported and provided in this format, there are also other potential use cases that can expand adoption of PolkaDot data by the blockchain industry such as easily being able to host Chainlink oracles for this data and provide it in readily available form for a number of different cross-chain applications. The open nature of the google bigquery dataset would allow anyone to query and extract insights from on-chain activity via SQL, or even build visualizations on thedata. + +Upon successful completion of the primary data structures (blocks, extrinsics, events), we plan to provide a framework / pattern to extract extrinsics tailored to specific parachains. We may explore Defi and RWAs in more depth: we believe that providing focus on DeFi activity related to Real World Assets on Google Cloud is the most promising use of public data to attract attention to the ecosystem. + +We also intend to publish guides on how to query and use the dataset (i.e. medium articles, github wikis, gitbook document site). The source code for Dot-ETL will be made public through the Web3 foundation. + +The team has extensive technical background in backend software engineering and machine learning / data science, and domain knowledge in machine learning, financial services (both retail as well as institutional), lending, and quantitative risk management. Our expertise and extensive domain experience, particularly in real world usage of data in Fintech and DeFi, will allow for us to build with adoption and practical use in mind. + +### Project Details +(Technical Details) + +The Dot-ETL project will utilize prior work on the SubQuery project to index and source block/event/call data on the Polkadot blockchain. The SubQuery project is already able to index and parse block / extrinsic(transaction) / event data on Substrate, persist into a postgres data schema, and serve queries on the data via GraphQL. + +Our ETL framework will consume the indexed data on a managed SubQuery node via GraphQL, and save to Google BigQuery in a format similar to existing blockchain-etl projects. We plan to orchestrate this ETL to BigQuery via the Google Composer offering on GCP as Airflow DAGs, written in Python. + +The design of the ETL will allow for a varied series of output formats. Users of the framework can choose to download the code and run their own copy of the ETL locally against the SubQuery node, or they can utilize the GCP BigQuery offering. We expect most users of the ETL data to utilize the public offering. + +The architecture and process of executing airflow pipelines within GCP composer are fairly well-documented. We expect that the infrastructure / architectural components for Dot-ETL will be similar to standard deployments within GCP composer - we are unlikely to require anything truly bespoke. + +The first milestone of the project will focus around blocks, extrinsics and events in Substrate, and will produce the same base-level tables (blocks, extrinsics, events). Subsequent milestones will propose a means to extract specific extrinsics / events from particular pallets and parachains, with a possible focus on Defi / RWAs. **We believe that providing focus on DeFi activity related to Real World Assets on Google Cloud is the most promising use of public data to attract attention to the Polkadot ecosystem.** + +We're still investigating the appropriate schema details that will capture data in the most useful /optimal way, but believe that the core tables / schema will be very similar to that of the [Ethereum ETL project](https://ethereum-etl.readthedocs.io/en/latest/). + +There are two main components of the project. The first is the configuration of the SubQuery managed node that will index the components of Substrate that we are interested in. The second component is the Airflow DAG that will communicate with the SubQuery node via a GraphQL API. The DAG will write updates to underlying formats. The initial focus will be on writing to BigQuery tables, but the framework should be written such that other providers / database formats can be accommodated. While we may not write drivers / handlers for each provider or database type, the framework will be written in such a way that will allow the community to write specific handlers that can be easily plugged into the existing framework. + +### Ecosystem Fit + +Questions / Answers on Ecosystem Fit: + +**Q: Where and how does your project fit into the ecosystem?** + +A: Our aim is to provide a foundational framework and approach to ETLing Substrate data into the GCP BigQuery cloud storage medium (+ other mediums as needed). A robust illustrative example will allow others to build upon / extend the framework, and run and maintain the ETL process for general community use. By transforming into GCP BigQuery, we hope to drastically lower the friction required for anyone to analyze and produce insights on the data (developers, analysts, investors, enthusiasts). + +**Q: Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)?** + +A: Everyone. By building a framework that will make data available in a way that can be queried via SQL, and in conjunction with a repository of query recipes and articles / guides / docs, we allow anyone with some base-level analysis interest to get up and running quickly. Because transaction-level data will also be available in a standard data query format on Google cloud, it will be possible to create any number of dashboards and visualizations on third-party / cloud-based analytic tools. + +**Q: What need(s) does your project meet?** + +A: Analysis / Insights - ability for people (all audience types) to query transaction data at any granularity. Putting this data into an approachable format opens the ability for users to create reports, visualizations, monitors and notifications. Better visibility => more engagement / better understanding => stronger community. Most users of data don't have the data engineering skills or capacity to extract data of this form onto a platform like Google Cloud platform, while remaining highly adept at querying, analyzing and modeling this type of data on such a platform. The DOT-ETl project is meant to remove the major data engineering barrier that exists for these individuals to take advantage of the technological offerings Google Cloud platform in working with PolkaDot data. + +**Q: Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? If so, how is your project different? If not, are there similar projects in related ecosystems?** + +A: There is already a team that has created substrate-etl on Google BigQuery. However, we believe there is value to creating redundancy by providing a competing approach to the problem. Our approach differs in two ways (technically): (a) use of the SubQuery indexer, whereas the competing team utilized their own indexer (polkaholic), (b) use of google composer / airflow. + +## Team :busts_in_silhouette: + +### Team members + +- Jonathan +- John + +### Contact + +- **Contact Name:** Jonathan Liang +- **Contact Email:** jonathan.h.liang@gmail.com +- **Website:** https://github.com/liangjh + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** N/A + +### Team's experience + +The team has extensive technical background backend software engineering and machine learning / data science, and domain knowledge in machine learning, financial services (both retail as well as institutional), lending, and quantitative risk management (market trading risk as well as bank capital). + +Jonathan has worked in both fintech in backend software engineering, as well as institutional financial firms (investment banks / hedge funds) in quantitative risk roles. Please see Jonathan's [Github (liangjh)](https://github.com/liangjh) for some public examples of projects he has built in his free time (private repos also available, pls contact to discuss). Jonathan is currently working on [Cascadius Finance](https://docs.cascadius.finance), a full-stack securitization protocol. + +John served as Head of Data Science & Modeling in FinTech startups, where he led and built teams for over nine years. He also has led adoption and integration of blockchain technology for FinTech clients, namely the [partnership between Visa, Circle and Tala](https://www.forbes.com/sites/ninabambysheva/2021/05/05/visa-partners-with-fintech-startup-tala-to-drive-crypto-adoption-in-emerging-markets/?sh=2b225df77e49). In addition he has notably worked with companies like JD.com, Baidu, Ford Motor Credit, Discover, and Synchrony in the development of machine learning models for financial application. He has regularly served as a thought leader and public figure for credit executives on the subject of machine learning, having spoken on multiple industry panels and at notable conferences such as Lendit Fintech, American Banker’s BankAI and the Marketplace Lending Summit. John has also achieved the level of Competitions Master from the Google owned company Kaggle, for his stellar and consistent performance in real world machine learning competitions. He has formerly reached the rank of one of the top 100 data scientists in the world for his performances with Kaggle. + +### Team Code Repos + +No team code repos at the moment. Please see individual Github repos (below) + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/liangjh +- https://www.linkedin.com/in/johncandido/ + + +## Development Status :open_book: + +We are currently in research phase; Development / coding has not started on this project yet. + + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 8 months +- **Full-Time Equivalent (FTE):** 0.25 +- **Total Costs:** 26,000 USD + +### Milestone 1 — ETL of Relay Chain + Google BigQuery Integration + +- **Estimated duration:** 3-4 months +- **FTE:** 1 +- **Costs:** 8,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide code document as well as a basic tutorial / instructions in the form of a README that will explain how a user can set up and run the components of the ETL to extract data to queryable formats | +| **0c.** | Testing and Testing Guide | We will have unit tests to ensure functionality. There will be concise instructions on how to run the tests in the guide / readme | +| **0d.** | Docker | The main infrastructural components, including subquery and airflow, will each be shipped with their own Dockerfile | +| 0e. | Article | We will publish an article and how-to guide on Medium that will introduce our work and how to set up the basic Dot-ETL (audience: developers). We will also reference prior work done in the space. | +| 1. | Create SubQuery Managed Node | Utilize SubQuery framework to create a running indexer node on SubQuery's managed services, reading and indexing blocks on the Polkadot network (may involve a few iterations for testing) | +| 2. | Define schema to store underlying base data structures (blocks, extrinsics, events) | Finalize stored format | +| 3. | Define framework interfaces to allow for extensibility | Multiple underlying storage formats can be extended by community (not just limited to BigQuery) | +| 4. | Airflow workflows to read SubQuery updates | Read updates from SubQuery node via GraphQL queries and write to BigQuery on a periodic timeframe| +| 5. | Deploy Airflow to Google Composer | deploy to google composer as a test / note: we won't be maintaining this going forward | +| 6. | Detailed developer guides | Developer-centric guides on how to extend the framework to interoperate with additional database frameworks and cloud platforms. | + + +### Milestone 2 — ETLs for Selected Parachains, Extensions + +- **Estimated Duration:** 3-4 months +- **FTE:** 1 +- **Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide detailed documentation for work done on this portion of the grant. | +| **0c.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0d. | Article | We will publish a follow-up (part 2) article on Medium describing the extensions to the original work | +| 1. | From base tables, extend to parsing 1-2 pallets | With milestone 1 completed and tables create for the core data structures (blocks, extrinsics, events), we can further process those base tables to produce more detailed tables for particular pallets | +| 2. | Framework / methodology to extend to additional pallets | Create a configurable framework that will allow a more imperative approach to defining more detailed ETLs that can be extended to parsing and creating tables on specific pallets | +| 3. | Detailed developer guide | Detailed developer guide on using and extending the framework above - goal is to allow developers to utilize the framework to define more sophisticated ETL steps on top of the base tables, all in python (+ orchestrated by airflow). | + +## Future Plans + +Our vision is to provide the framework which will power the go-to queryable data source for Substrate (polkadot / kusama) transactions - both for the main relay chain as well as for the respective parachains. Users of Dot-ETL can either query the public Google BigQuery database directly or create their own index node for any purpose. We expect the community to devise new use cases and applications for the underlying data. + +We intend to partner with / reach out to the following entities on the sponsorship / maintainance of the cloud-based query and storage formats (i.e. Google BigQuery): +- Polkadot and Web3 Foundation - +- Google Cloud Team - +- Blockchain-ETL (related to Google Cloud Team) + +We also intend to seek integration for this data within the blockchain industry through potential oracle partnerships with protocols like Chainlink. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website / Medium / Twitter / Element / Announcement by another team / personal recommendation / etc. + +By recommendation from someone who was already familiar with the Polkadot / Substrate / Kusama projects, as well as the Web3 Foundation's grants program. From 09049ec57deece3751e1fb57852f0a4b25bf5c33 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 21 Jun 2023 21:03:48 +0200 Subject: [PATCH 429/665] Update index.md Add Dot-ETL Project --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 6a2b17bf96a..0eb0582c853 100644 --- a/applications/index.md +++ b/applications/index.md @@ -76,6 +76,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | | [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | +| [Davanti](https://github.com/liangjh) | [Dot-ETL Project](dot_etl.md)| [GitHub](https://github.com/liangjh) | ☐ | ☐ | ☐ | [🔝](#2023) From 6013b58897fb32b689e88a7baae8fbf005e9487b Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 22 Jun 2023 01:15:52 -0400 Subject: [PATCH 430/665] Update index.md (#1816) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0eb0582c853..7079f8a1a48 100644 --- a/applications/index.md +++ b/applications/index.md @@ -174,7 +174,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blaize.tech](https://blaize.tech/) | [Unified deployment for the collator node](unified_collator_node_deployment.md) | [GitHub](https://github.com/babebort-blaize) | ☐ | ☒ | ☒ | | [Odyssey B.V.](https://odyssey.org/) | [Momentum, an open source, metaverse for digital societies](odyssey_momentum.md) | [GitHub](https://github.com/momentum-xyz) | ☐ | ☐ | ☐ | | [Bela Supernova](https://bsn.si/) | [Rubeus Keeper Stage 2](Rubeus_keeper_st2.md) | [GitHub](https://github.com/bsn-si) | ☐ | ☒ | ☒ | -| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☒ | ☐ | +| [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☒ | ☒ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | | [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | From e6ccb316587d3436d36851213f92c44c2f2f56a8 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 22 Jun 2023 14:53:31 -0400 Subject: [PATCH 431/665] Cancel Crowdloans-FET.md (#1819) --- applications/Crowdloans-FET.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/Crowdloans-FET.md b/applications/Crowdloans-FET.md index a679a3760b1..539070101ab 100644 --- a/applications/Crowdloans-FET.md +++ b/applications/Crowdloans-FET.md @@ -3,6 +3,7 @@ - **Team Name:** Mutai Solutions - **Payment Address:** 0xE27F2E8321Fb4c32525a4ED86d2902dbA63491E4 Ethereum (USDT) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1280#issuecomment-1583327825) ## Project Overview :page_facing_up: From 8efbcfac14fee070308b8fa656b0f79a48c9e2e9 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 23 Jun 2023 01:55:34 -0400 Subject: [PATCH 432/665] Update pallet-drand-client.md (#1820) --- applications/pallet-drand-client.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/pallet-drand-client.md b/applications/pallet-drand-client.md index 25df3df9a03..8f33c631b14 100644 --- a/applications/pallet-drand-client.md +++ b/applications/pallet-drand-client.md @@ -3,6 +3,7 @@ - **Team Name:** The Bacon Beacon - **Payment Address:** USDC 0x1C9e0bcA759e5Ec09246f4795310789b12F65a59 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1271#issuecomment-1583321519) ## Project Overview :page_facing_up: From d78551369e29760609cd07727c52b5f86004510a Mon Sep 17 00:00:00 2001 From: Xavier Lau Date: Mon, 26 Jun 2023 21:21:19 +0800 Subject: [PATCH 433/665] Amend Slothunter milestone deliverables (#1822) Signed-off-by: Xavier Lau --- applications/slothunter.md | 78 +++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 39 deletions(-) diff --git a/applications/slothunter.md b/applications/slothunter.md index e1fbe510309..ff9ebc9a726 100644 --- a/applications/slothunter.md +++ b/applications/slothunter.md @@ -22,45 +22,44 @@ And this also could help teams/users to bid/contribute automatically. ### Details(spec) -Slothunter will be implemented in Rust, which means it will be efficient and stable while running as a system service. +Slothunter will be implemented in Rust, ensuring efficiency and stability when running as a system service. -This grant contains 7 parts. +This grant comprises 7 parts: 1. Monitor the auction state. - 1. This program will run as a system service. + 1. The program will run as a system service. 2. It will fetch and cache the chain state periodically. 2. Calculate the current winner. - 1. Base on previous data, calculate the current auction winner. + 1. Based on the latest on-chain data, the current auction winner will be calculated. 3. Email and webhook notifications. - 1. It could notify the users: - 1. New auction started. - 2. Insufficient fund for bidding/contributing. - 3. Stop bidding/contributing and reason. - 4. New winner. - 5. Auction ended. - 2. The email and webhook addresses are configurable. - 3. The notification will be logged in the terminal by default. - 4. The email/webhook notification can be enabled or disabled by user. e.g. Some users think the email is annoying. - 5. All the notification content will be present in json style. - 6. Webhook notification can be integrated to Slack, Telegram, etc. e.g. the telegram bot will provide a listen address and Slothunter will push the notification to the bot periodically. + 1. The notifications will inform users about: + 1. New auctions starting. + 2. New bids/contributions. + 3. Stopping bids/contributions and the reasons. + 4. Current block winners. + 5. Auction endings. + 2. Email and webhook addresses are configurable. + 3. Notifications will be logged in the terminal by default. + 4. Users can enable or disable email/webhook notifications. e.g., Some users may find emails annoying. + 5. All notification content will be presented in JSON format. + 6. Webhook notifications can be integrated with Slack, Telegram, etc., e.g., a Telegram bot will provide a listening address, and Slothunter will push notifications to the bot periodically. 4. Auto bidding/contributing. - 1. Auto bid/contribute if there is new winner. And the bot will stop if the new winner's price is greater than the max acceptable value in the configuration file. - 2. Able to use regular account to bid/contribute. - 3. Able to use proxy account to bid/contribute. -5. Customize bidding/contributing strategy, including: - 1. Set max acceptable value. - 2. Set bidding/contributing frequency every `x` blocks. + 1. The bot will auto bid/contribute when there's a new winner and stop if the new winner's price exceeds the maximum acceptable value in the configuration file. + 2. Proxy accounts can be used for bidding/contributing. +5. Customize bidding/contributing strategies, including: + 1. Setting a maximum acceptable value. + 2. Setting bidding/contributing increments. 6. Provide a config.toml to configure: 1. Relaychain. 2. Bidding/contributing account. - 3. Bidding/contributing amount, target and max acceptable price. - 4. Keep bidding/contributing every `x` blocks. - 5. Notification mailbox. - 6. Webhook URI. -7. A Telegram bot, this should be easily deployed on any ubuntu:20.04+ server. + 3. Bidding/contributing target, amount, and maximum acceptable price. + 4. Notification email sender and receivers. + 5. Notification webhooks. +7. A Telegram bot that can be easily deployed on any Ubuntu 20.04+ server. + +Teams/users can start the bot before the auction, and everything should proceed as expected. +Teams/users can deploy the Telegram bot and receive the latest auction status in a group. -Teams/users could start the bot before the auction. And all the things should go as expected. -Teams/users could deploy the telegram bot and get latest auction status in group. ## Team :busts_in_silhouette: @@ -117,16 +116,16 @@ If they contain no activity, references to projects hosted elsewhere or live are - **FTE:** 1 - **Costs:** 10,000 USD -| Number | Deliverable | Specification | -| -----: | -------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| 0a. | License | GPLv3 | -| 0b. | Documentation | There will be a guide to tell people how to use this. | -| 0c. | Testing guide | There will be a docker file and a guide to tell the auditor how to run the tests. It will guide you how to setup an auction and do the tests. | -| 1. | Auction winner calculator | Based on the 0c., run the binary, you should see the current winner from the terminal log. | -| 2. | Notification component | Based on the 0c., run the binary, you should receive these notification correctly. | -| 3. | Auto bidding/contributing component | Based on the 0c., run the binary, you should see you are bidding/contributing your parathread from the Polkadot Apps. | -| 4. | Bidding/contributing configuration component | Based on the 3., you can customize your bidding/contributing strategy in a toml file, you should see your bidding/contributing behavior works the same as the strategy defined. | -| 5. | Releases | Linux, macOS, Windows prebuilt binaries, and crates.io release. | +| Number | Deliverable | Specification | +| -----: | ----------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 0a. | License | GPLv3 | +| 0b. | Documentation | There will be a guide to tell people how to use this. | +| 0c. | Testing guide | There will be a docker file and a guide to tell the auditor how to run the tests. It will guide you how to setup an auction and do the tests. | +| 1. | Auction winner calculator | Based on the 0c., run the binary, you should see the current winner from the terminal log. | +| 2. | Notification component | Based on the 0c., run the binary, you should receive these notification correctly. | +| 3. | Auto bidding/contributing component | Based on the 0c., run the binary, you should see you are bidding/contributing your parathread from the Polkadot Apps. | +| 4. | Slothunter configuration component | Based on the 3., you can customize your bidding/contributing strategy in a toml file, you should see your bidding/contributing behavior works the same as the strategy defined. | +| 5. | Releases | Linux, macOS, Windows prebuilt binaries, and crates.io release. | ### Milestone 2 Slothunter notification Slack/Telegram bot setup guide @@ -139,7 +138,8 @@ If they contain no activity, references to projects hosted elsewhere or live are | 0a. | License | GPLv3 | | 0b. | Documentation | There will be a guide to tell people how to use this. | | 0c. | Testing guide | There will be a guide to tell the auditor how to run the tests. | -| 1. | Workshop repository | Follow the tutorial in this repository to setup the bot, and you should see the notification appear in Slack and Telegram. | +| 1. | Telegram bot. | A telegram bot program to receive the auction notification and easy to deploy on any Ubuntu 20.04+ server. | +| 2. | Workshop repository | Follow the tutorial in this repository to setup the bot, and you should see the notification appear in Slack and Telegram. | ## Future Plans From 2560d8c3f2ee1e9882423296eb898b479a4bcc3c Mon Sep 17 00:00:00 2001 From: MeerKatDev Date: Mon, 26 Jun 2023 17:46:53 +0200 Subject: [PATCH 434/665] changing starting date for substrate move pallet part 1 (#1823) --- applications/Substrate_Move_System_Pallet_1.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/Substrate_Move_System_Pallet_1.md b/applications/Substrate_Move_System_Pallet_1.md index 05cd4519156..e34c007b033 100644 --- a/applications/Substrate_Move_System_Pallet_1.md +++ b/applications/Substrate_Move_System_Pallet_1.md @@ -145,6 +145,7 @@ We have not yet started our own development, we are still in the research phase. - **Total Estimated Duration:** 1 month - **Full-Time Equivalent (FTE):** 2 FTE - **Total Costs:** 48 000 USD +- **Starting Date:** 10/07/23 ### **In-Depth Exploration and Assessment of MoveVM and Substrate Integration** From 9292fca1edbc32b04b96b4c44d68c3e95529395b Mon Sep 17 00:00:00 2001 From: Dusan Morhac <55763425+dudo50@users.noreply.github.com> Date: Tue, 27 Jun 2023 08:12:10 +0200 Subject: [PATCH 435/665] LightSpell: XCM API (#1817) * Create LightSpell-proposal.md * Update LightSpell-proposal.md --- applications/LightSpell-proposal.md | 271 ++++++++++++++++++++++++++++ 1 file changed, 271 insertions(+) create mode 100644 applications/LightSpell-proposal.md diff --git a/applications/LightSpell-proposal.md b/applications/LightSpell-proposal.md new file mode 100644 index 00000000000..eaaf202ad4b --- /dev/null +++ b/applications/LightSpell-proposal.md @@ -0,0 +1,271 @@ +# LightSpell XCM API by ParaSpell✨ + +- **Team Name:** ParaSpell✨ +- **Payment Address:** 0xB7d45Ef044fD9342e4c03e28D9e9bddA2d4Fe3e1 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 🐣 + + +## Project Overview :page_facing_up: + +Previously completed grants: +- [Phase 1](https://github.com/w3f/Grants-Program/pull/1118) +- [Phase 2](https://github.com/w3f/Grants-Program/pull/1245) +- [Phase 3](https://github.com/w3f/Grants-Program/pull/1589) + +What is ParaSpell: +ParaSpell is an XCM & XCMP Developer tool meant to ease the integration of cross-chain functionality into dApps. As we have learnt by now, cross-chain experience between Parachains can be very diverse. ParaSpell means to unify this experience by doing all the research for developers. We have wrapped all XCM pallets from compatible nodes into simple patterns from which it is easy to create XCM calls. As an example, we provide the image below. + + +![img1](https://user-images.githubusercontent.com/55763425/218987451-2bfc9526-8f2b-4477-8c42-8c70cbcb6ec4.jpg) + +In this image, we can see, that ParaSpell saves much time for developers. Just one call can contain multiple lines of JSON which would otherwise have to be integrated manually by the developer. ParaSpell does it in marginally fewer lines and hides the complex logic of building messages which ensures, that messages are constructed correctly. This call in the end results in the following lengthy extrinsic: + +![img2](https://user-images.githubusercontent.com/55763425/218987583-f5fb10b2-2e0c-4f36-b01c-0d610deab1c6.jpg) + +The following extrinsic can be subscribed into and we can check for its events on the front end. ParaSpell provides the front end for testing XCM transactions and XCM called [UI-V2](https://github.com/paraspell/ui-v2). This UI is also deployed on Netlify so users only have to run the local network to start testing. UI also provides the ability to open or close HRMP channels or test out XYK pool functionality that was implemented in collaboration with the HydraDX team. In the picture below we provide an overview of the UI. +Screenshot 2023-02-15 at 10 36 01 + + +### Overview 🎨 + +ParaSpell is split into three main repositories at the moment and one new is being added soon: + +- [XCM API - TBA](): Meant to provide much faster response than integrating XCM SDK as well as being easier to integrate than XCM-SDK (No install needed) +- [XCM SDK](https://github.com/paraspell/xcm-sdk): Meant to unify cross-chain experience on Substrate. Can serve any dApp developer that wishes to integrate XCM or other pallets support for they app. +- [UI-V2](https://github.com/paraspell/ui-v2): Allows for launching local network and testing XCM or HRMP channels across that local network +- [Docs](https://github.com/paraspell/docs): Extensive documentary for overview of ParaSpell, guide for SDK and UI + + + +#### SDK +This SDK currently support 46 compatible XCM nodes. They can transfer XCM messages in three different scenarios. +- Parachain to Parachain - HRMP +- Parachain to Relay chain - UMP +- Relay chain to Parachain - DMP + +SDK contains many useful features that allow for easier inntegration: +- Builder pattern implementation, easy to construct XCM calls, much more used recently for simplicity of implementation. + +- Suggestions, SDK contains TYPES that help to guide developer through integration. For example he get's compatible nodes suggested. +![1_59xApnboumYhzuRHKx60TA](https://user-images.githubusercontent.com/55763425/219314223-79c31085-2e90-4dc7-ad51-da96de730ea0.png) + +- Console printouts, SDK allows for printing into console so developer can alway check if call they constructed is correct. +![1_2KT6Z1rxxprmE03XWYY-HA](https://user-images.githubusercontent.com/55763425/219314235-1da52511-b4e8-4a41-bdaa-04fa6a9e8a48.png) + +- Exporting registered assets for each compatible node in many useful functions + +- Exporting supported XCM pallets for each compatible node in useful functions + +And more.. + +#### UI-V2 +UI is used as testing tool for Parachain developers, they can simply add their node into network and test it with HRMP channels as well as XCM transfers. UI also allows dApp developers to test and learn XCM before integrating it from our SDK. + +UI is made to be as simple to use as possible. It is now also deployed on netlify so developers only have to start local network from configuration file provided by ParaSpell which starts network of Relay chain and 3 different Parachains (Bifrost,Karura & Pichiu) + +Below are some examples of UI with running network: +Screenshot 2023-02-16 at 13 31 06 + +Above we can see open/ close channel screen. It is simple to work with and intuitive. Nodes are pulled from relay chain by query so if network is not running you cannot see any nodes. + +Screenshot 2023-02-16 at 13 31 20 + +Above we can observe, that UI contains simple Wallet login with test accounts. + +Screenshot 2023-02-16 at 13 31 33 + +Above we can see XCM screen which is also very simple to navigate and nodes are pulled from relay chain by query. + +#### Docs +Docs contain important information regarding SDK, UI and other repositories that are in ParaSpell or ParaSpell contributed to / collaborated with. +The key areas are: +- Introduction +Screenshot 2023-02-16 at 13 44 58 +- Guide on importing SDK +Screenshot 2023-02-16 at 13 45 09 + +- Guide on launching local network and UI +Screenshot 2023-02-16 at 13 48 43 + + +- Guide on executing operations in UI +Screenshot 2023-02-16 at 13 45 24 + +- Guide on implementing SDK +Screenshot 2023-02-16 at 13 46 01 + + +- Important links +Screenshot 2023-02-16 at 13 45 30 + +#### Architecture 🏗️ +##### Old +The old design had SDK integrated into dApp: + +![taskFlow](https://user-images.githubusercontent.com/55763425/198412240-e031d877-c5d8-4952-9048-2e1256ba4469.svg) + +UI is purposely designed to be as simple as possible. This guarantees, that all tasks can be done quickly and without extended searching. All necessary screens also feature notifications which will as a milestone explain be callback reactive. The loading screen is only present on the first application & network startup, once accessing the same screen after the application was loaded it will be skipped automatically. The screen serves to register necessary assets in parachain nodes. This is only required to be run once per network startup. + +SDK currently handles transfers to 46 compatible Parachains and also can transfer to both Relay chains. + +##### New +In the new design with XCM API, there is no need for integrating XCM SDK. There is only a need to send the request. No more installing packages. Works way faster and offloads dApp from heavy computing to generate calls. +![taskFlowNew](https://user-images.githubusercontent.com/55763425/247828546-b16e1a8b-c16d-462b-856a-2546fa1dee00.png) + +#### Technology Stack 💻️ +- Vue.js +- Node.js +- Typescript +- Polkadot api libraries +- Make +- Parachain launch +- Substrate compatible nodes (For now Rococo, Pichiu(Kylin network), Bifrost & Acala) +- Nest.js + +### Ecosystem Fit 🌳 + +#### XCM API +As mentioned in a tweet from Alice&Bob, we need Chain APIs to put XCM on steroids - [link](https://twitter.com/alice_und_bob/status/1664564442456109057?cxt=HHwWgsC9pdGi3JkuAAAA). We aim to achieve this by utilizing the XCM-SDK technology we built previously. Using XCM API compared to implementing XCM SDK into dApp can bring three main benefits: +- Calls are generated much quicker +- API is much simpler to implement than SDK +- No need to install anything (Comes with the benefit of saving space and without issues with dependencies) + +Why we chose NestJS for XCM API: +By choosing Nest.js as our backend HTTP REST API framework, we can harness the power of Node.js, leverage TypeScript's benefits, ensure maintainability through its modular architecture, and take advantage of its extensive community support. This will enable us to build a reliable, scalable, and well-documented XCM API that seamlessly integrates with the existing XCM SDK. In addition, Nest.js offers a powerful code generation feature that allows us to quickly scaffold boilerplate code for controllers, services, modules, and more. By utilizing the Nest.js code generator, we can significantly reduce development time and effort, ensuring rapid prototyping and efficient implementation of the XCM API endpoints. Compared to other TypeScript frameworks, Nest.js stands out with its modular architecture, seamless integration with Node.js, and strong community support, offering developers a scalable and maintainable solution. + +#### XCM SDK + +There are not many XCM & XCMP-related development tools released currently. We aim to aid this mostly empty space and help developers to understand XCM & XCMP as the current state-of-the-art technology by providing documentation and a user interface in which they can do development tasks more easily and faster. + +In Polkadot and Kusama ecosystems, there are few XCM-related tools in development. For example, Moonbeam XCM SDK was released only recently. We bring a comparison table that compares our ParaSpell SDK to Moonbeam SDK +| Features | ParaSpell XCM SDK | Moonbeam XCM SDK | +| -----: | ----------- | ------------- | +| Number of packages user has to install | User needs to install only 1 package | User needs to install 2 packages | +| Support for Parachains | Already integrated for every XCM compatible pallet | Every new node has to be added manually by user | +| Build pattern | Integrated as intuitive as possible | Integrated, not as intuitive to implement however | +| Support for asset pallet operations | Integrated | Not integrated | +| Support for HRMP pallet operations | Integrated users can open & close HRMP channels on their local chain (Useful feature for devs) | Not integrated | +| Support for checking details that do not change | Integrated & also be covered with some error handling eg (too little amount being sent, not sufficient for XCM transfer) | Integrated in the form of a small "map" for different Tokens & Node IDs | +| Support for Axelar GMP (General message passing) that will connect Substrate with EVM chains | Planned to be implemented in the future | No data | + + + +Unlike the already mentioned "Moonbeam XCM" platform ParaSpell provides UI enhancement that uses our XCM SDK and users can try/learn technology from it. ParaSpell also includes support for 46 Substrate Parachains that have XCM pallets compared to Moonbeam XCM to which users have to implement compatible nodes manually. ParaSpell SDK only needs one package compared to Moonbeam XCM which has a total of two. Compared to Moonbeam XCM which contains only XCM calls ParaSpell also contains calls that can open or close HRMP channels. We also include support for Parachains that have a template pallet for XCM called polkadotXCM this pallet is a little harder to work with than xTokens, even more for inexperienced developers. On top of that, this proposal aims to improve ParaSpell even further with introduction of LightSpell XCM API. We have not yet seen any XCM-API proposals or project and we aim to solve this gap as first team. + +Another comparison worth mentioning is UI vs Morph which is also an enhancement of the XCM UI Transfer tool +| Features | ParaSpell XCM UI | Morph | +| -----: | ----------- | ------------- | +| Focus: | Developers & users that wish to try XCM locally first | Users | +| Wiki: | Comprehensive Wiki explaining XCM, how to add assets to UI & Nodes and more implemented | Not implemented | +| Support for transfers: | In three different scenarios | In two scenarios | +| Support for local network configuration: | Fully implemented example network configuration that uses maintained Parachain-launch library | Not implemented | +| Support for HRMP channel opening/closing: | Fully implemented | Not implemented | + +Unlike the already mentioned "Morph" platform ParaSpell focuses more on developers. ParaSpell features complete network install and startup configuration in one single command. This automatization ensures, that developers do not need to do any extra tasks when they wish to run development nodes locally. ParaSpell also allows developers to open and close HRMP channels between Parachains they connected. Like "Morph", ParaSpell can also transfer fungible tokens in three scenarios. From Parachains to Relay chain, from Relay chain to Parachains & from Parachains to Parachains. + +We are currently in talks with several Parachain teams that like the idea of unified SDK for XCM transfers as much as we do. SDK that unifies XCM can be very helpful for the entire ecosystem in our opinion. With the introduction of XCM API, this improves even further. + +Our target audiences are Web3 projects and starting/current blockchain developers. +## Team :busts_in_silhouette: + +### Team members + +Dušan Morháč - Student, project Founder & Core Dev. Faculty of Informatics and Information Technologies STU in Bratislava + +Michael Absolon - Student, XCM SDK & XCM API Core Dev. Faculty of Informatics and Information Technologies STU in Bratislava + +### Contact + +- **Contact Name:** Dušan Morháč +- **Contact Email:** dudo.morhac@gmail.com + + +### Legal Structure + +- **Registered Address:** TBA later (Switching to the company) +- **Registered Legal Entity:** TBA later (Switching to the company) + +### Team's experience +- Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by IEEE [link](https://ieeexplore.ieee.org/document/9872938). He also successfully presented it at ICBC 2023 conference held in Dubai. Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan continues research on this idea in his Master's thesis. He is actively working on ParaSpell https://github.com/paraspell full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. Here is NFT that was minted as a certificate by Parity - [link](https://singular.app/collectibles/statemine/20/12) + + +- Michael is a dedicated TypeScript developer with 2 years of full-time experience in the Web2 sphere. Michael's expertise in this field was further solidified in 2019 when he won first place in the Junior Internet Web competition for his online multiplayer game, which was written in JavaScript. In addition to his professional background, Michael also achieved a bachelor's degree in the same computer science University as Dušan and he is currently pursuing a master's degree which focuses on Blockchain. His passion for technology led him to explore Blockchain technology in his free time. He was recently offered the opportunity to work on ParaSpell XCM SDK with Dušan and he delivered many of the key features SDK now offers. + +### Team Code Repos + +- https://github.com/paraspell/xcm-api +- https://github.com/paraspell/xcm-sdk +- https://github.com/paraspell/ui-v2 +- https://github.com/paraspell/docs + +### Team Github Profiles 🧑‍🎓 + +- https://github.com/dudo50 Dušan Morháč +- https://github.com/michaeldev5 Michael Absolon + +### Team LinkedIn Profiles 🧑‍🎓 + +- https://www.linkedin.com/in/dudo50/ +- https://www.linkedin.com/in/michael--absolon/ + +## Development Status :open_book: + +The new [XCM-API](https://github.com/paraspell/xcm-api) is in development and we are currently searching for the fastest server with the lowest cost requirements. + +[SDK](https://github.com/paraspell/xcm-sdk) is currently released into the main and is in a version that is fully operable. There are still some tweaks we plan to add and make, they are not part of this grant however. [UI-V2](https://github.com/paraspell/ui-v2) currently runs on state-of-the-art technology version VueJS 3 and the newest version of Nuxt. It deprecated V1 and introduced a much smoother interface and modules brought from the sub-scaffold template ParaSpell contributed to. [Docs](https://github.com/paraspell/docs) are currently in ready state but there is still some tweaking to do. + +**Sidenote**: We have recently developed an article about Polkadot & Paraspell called Enhancing XCMP Interoperability Across Polkadot Paraverse and it was accepted to the International IEEE BCCA 2023 conference held in Kuwait. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 10 000 USD + +### Milestone 1 - Create LightSpell⚡️: XCM-API + +- **Estimated duration:** 2 months ⌛️ +- **FTE:** 1 +- **Costs:** 10 000 USD 💰️ + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| 0a. | License | MIT | +| 0b. | Documentation | We will provide both readme.md and official docs documentation | +| 0c. | Testing and Testing Guide | Testing guide will be mentioned in official docs & core unit tests will be provided | +| 0e. | Create Medium article about development of LightSpell | Add article covering new features & improvements brought with LightSpell | +| 1.a | Integrate API for XCM functionality | Use Nest.js to integrate core XCM SDK functionality to send XCM messages | +| 1.b | Integrate API for Asset functionality | Use Nest.js to integrate core XCM SDK functionality to do Asset operations | +| 1.c | Integrate API for XCM Pallets functionality | Use Nest.js to integrate core XCM SDK functionality to query XCM Pallets of different Parachains | +| 1.d | Integrate API for HRMP functionality | Use Nest.js to integrate core XCM SDK functionality to open/close HRMP channels | +| 2. | Integrate token authentification | Integrate token authentification with limited requests to remove the possibility of DDOS (Bigger request limit can be requested for free via email provided in docs)| +| 3.a | Add core Integration tests | Add core Integration tests to ensure everything is working together as expected | +| 3.b | Add core Endpoint (e2e) tests | Add core endpoint tests to let the user try to use API without writing any code and also to demonstrate if API works | +| 4. | Integrate LightSpell into ParaSpell docs | Add comprehensive guide for every feature that API will offer [link](https://paraspell.github.io/docs/api/TBA.html) | + +## Future Plans 🔭 + +Once everything will be implemented according to the proposed plan application will still be under constant improvement as technology will progress. For example, once the XCMP protocol will be released we wish to deprecate the HRMP protocol we currently use for channels. + +The project goal is that XCM-SDK & XCM-API will serve dApp developers and UI will teach new substrate developers to use XCM and will serve existing substrate developers to test their freshly baked Parachains. + +The newly added XCM-API will simplify XCM-SDK integration and will be much faster than integrating XCM-SDK into dAPP directly. Both repositories will remain dependent on each other. Further maintenance funding for servers and keeping XCM API up to date will be requested from Polkadot treasury. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Personal recommendation + +##### Project achievements in chronological order ⌛️ + +- 📙 Article about the project created & presented at international conference ICECET2022 held in Prague (450 out of 1000+ articles accepted) Link to IEEE publication - [IEEE Sharing Fungible Assets Across Polkadot Paraverse](https://ieeexplore.ieee.org/document/9872938/) +- 🥈 2nd Prize, Build an XCM-related Tool for Moonbeam - Polkadot North America Hackathon [Hackathon entry](https://devpost.com/software/polkachange-cross-blockchain-transfer-tool) +- 🥉 3rd Prize, EVM+ DApp for aUSD yield - Polkadot North America Hackathon [Hackathon entry](https://devpost.com/software/polkachange-cross-blockchain-transfer-tool) +- 🎈 Web 3 Foundation base grant [Application](https://github.com/w3f/Grants-Program/pull/1118), [Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/584) +- 🐍 [Basilisk](https://bsx.fi/) treasury proposal 2 / 2 Approved [link](https://basilisk.subsquare.io/treasury/proposal/2), [link2](https://basilisk.subsquare.io/treasury/proposal/4) +- 🔭 Web 3 Foundation phase 2 grant Milestone 3 / 3 delivered [Application](https://github.com/w3f/Grants-Program/pull/1245), [Delivery1](https://github.com/w3f/Grant-Milestone-Delivery/pull/670), [Delivery 2 & 3](https://github.com/w3f/Grant-Milestone-Delivery/pull/715) +- 📕 Article about Polkadot & ParaSpell created & accepted to be presented at international cross-chain conference IEEE ICBC 2023 held in Dubai [links TBA] +- 💼 Kusama Treasury Funding proposal number 1 - Upgrade SDK, [Application](https://kusama.subsquare.io/referenda/referendum/123s), [Delivery](https://docs.google.com/document/d/1lMY_8EtQ41IX7Zn9VIMAiG1k3oLYN0h_lVj8dWDwZ_k/edit?usp=sharing) +- 🏗️ Web 3 Foundation phase 3 grant (Make SDK better) Milestone 1 / 1 delivered [Application](https://github.com/w3f/Grants-Program/pull/1589), [Delivery](https://github.com/w3f/Grant-Milestone-Delivery/pull/836) +- 📘 Article about Polkadot & ParaSpell created & accepted to be presented at international cross-chain conference IEEE BCCA 2023 held in Kuwait [links TBA] From 77a5cfdf7a448a0634dcb7c653463fe775fa0f86 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 27 Jun 2023 08:18:12 +0200 Subject: [PATCH 436/665] Update index.md ParaSpell --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 7079f8a1a48..72d2847d636 100644 --- a/applications/index.md +++ b/applications/index.md @@ -77,6 +77,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Davanti](https://github.com/liangjh) | [Dot-ETL Project](dot_etl.md)| [GitHub](https://github.com/liangjh) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [LightSpell: XCM API](LightSpell-proposal.md)| [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | [🔝](#2023) From ebed58f49ba4680aee6b5e2537eec8fba08c89ed Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 27 Jun 2023 08:25:14 +0200 Subject: [PATCH 437/665] fix website --- applications/LightSpell-proposal.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/applications/LightSpell-proposal.md b/applications/LightSpell-proposal.md index eaaf202ad4b..0e3e7c25365 100644 --- a/applications/LightSpell-proposal.md +++ b/applications/LightSpell-proposal.md @@ -23,14 +23,14 @@ In this image, we can see, that ParaSpell saves much time for developers. Just o ![img2](https://user-images.githubusercontent.com/55763425/218987583-f5fb10b2-2e0c-4f36-b01c-0d610deab1c6.jpg) The following extrinsic can be subscribed into and we can check for its events on the front end. ParaSpell provides the front end for testing XCM transactions and XCM called [UI-V2](https://github.com/paraspell/ui-v2). This UI is also deployed on Netlify so users only have to run the local network to start testing. UI also provides the ability to open or close HRMP channels or test out XYK pool functionality that was implemented in collaboration with the HydraDX team. In the picture below we provide an overview of the UI. -Screenshot 2023-02-15 at 10 36 01 +Screenshot 2023-02-15 at 10 36 01 ### Overview 🎨 ParaSpell is split into three main repositories at the moment and one new is being added soon: -- [XCM API - TBA](): Meant to provide much faster response than integrating XCM SDK as well as being easier to integrate than XCM-SDK (No install needed) +- XCM API - TBA: Meant to provide much faster response than integrating XCM SDK as well as being easier to integrate than XCM-SDK (No install needed) - [XCM SDK](https://github.com/paraspell/xcm-sdk): Meant to unify cross-chain experience on Substrate. Can serve any dApp developer that wishes to integrate XCM or other pallets support for they app. - [UI-V2](https://github.com/paraspell/ui-v2): Allows for launching local network and testing XCM or HRMP channels across that local network - [Docs](https://github.com/paraspell/docs): Extensive documentary for overview of ParaSpell, guide for SDK and UI @@ -64,15 +64,15 @@ UI is used as testing tool for Parachain developers, they can simply add their n UI is made to be as simple to use as possible. It is now also deployed on netlify so developers only have to start local network from configuration file provided by ParaSpell which starts network of Relay chain and 3 different Parachains (Bifrost,Karura & Pichiu) Below are some examples of UI with running network: -Screenshot 2023-02-16 at 13 31 06 +Screenshot 2023-02-16 at 13 31 06 Above we can see open/ close channel screen. It is simple to work with and intuitive. Nodes are pulled from relay chain by query so if network is not running you cannot see any nodes. -Screenshot 2023-02-16 at 13 31 20 +Screenshot 2023-02-16 at 13 31 20 Above we can observe, that UI contains simple Wallet login with test accounts. -Screenshot 2023-02-16 at 13 31 33 +Screenshot 2023-02-16 at 13 31 33 Above we can see XCM screen which is also very simple to navigate and nodes are pulled from relay chain by query. @@ -80,23 +80,23 @@ Above we can see XCM screen which is also very simple to navigate and nodes are Docs contain important information regarding SDK, UI and other repositories that are in ParaSpell or ParaSpell contributed to / collaborated with. The key areas are: - Introduction -Screenshot 2023-02-16 at 13 44 58 +Screenshot 2023-02-16 at 13 44 58 - Guide on importing SDK -Screenshot 2023-02-16 at 13 45 09 +Screenshot 2023-02-16 at 13 45 09 - Guide on launching local network and UI -Screenshot 2023-02-16 at 13 48 43 +Screenshot 2023-02-16 at 13 48 43 - Guide on executing operations in UI -Screenshot 2023-02-16 at 13 45 24 +Screenshot 2023-02-16 at 13 45 24 - Guide on implementing SDK -Screenshot 2023-02-16 at 13 46 01 +Screenshot 2023-02-16 at 13 46 01 - Important links -Screenshot 2023-02-16 at 13 45 30 +Screenshot 2023-02-16 at 13 45 30 #### Architecture 🏗️ ##### Old @@ -187,7 +187,7 @@ Michael Absolon - Student, XCM SDK & XCM API Core Dev. Faculty of Informatics an ### Team's experience - Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by IEEE [link](https://ieeexplore.ieee.org/document/9872938). He also successfully presented it at ICBC 2023 conference held in Dubai. Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan continues research on this idea in his Master's thesis. He is actively working on ParaSpell https://github.com/paraspell full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. Here is NFT that was minted as a certificate by Parity - [link](https://singular.app/collectibles/statemine/20/12) - + - Michael is a dedicated TypeScript developer with 2 years of full-time experience in the Web2 sphere. Michael's expertise in this field was further solidified in 2019 when he won first place in the Junior Internet Web competition for his online multiplayer game, which was written in JavaScript. In addition to his professional background, Michael also achieved a bachelor's degree in the same computer science University as Dušan and he is currently pursuing a master's degree which focuses on Blockchain. His passion for technology led him to explore Blockchain technology in his free time. He was recently offered the opportunity to work on ParaSpell XCM SDK with Dušan and he delivered many of the key features SDK now offers. From 999bef0739fc04b58b605dd77040ff46c7281b0e Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 27 Jun 2023 08:31:32 +0200 Subject: [PATCH 438/665] docusaurus update --- package.json | 4 +- yarn.lock | 366 +++++++++++++++++++++++++-------------------------- 2 files changed, 185 insertions(+), 185 deletions(-) diff --git a/package.json b/package.json index 19562c32556..bfb4c80ba38 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,8 @@ "write-heading-ids": "docusaurus write-heading-ids" }, "dependencies": { - "@docusaurus/core": "^2.2.0", - "@docusaurus/preset-classic": "^2.2.0", + "@docusaurus/core": "^2.4.1", + "@docusaurus/preset-classic": "^2.4.1", "@mdx-js/react": "^1.6.22", "@svgr/webpack": "^7.0.0", "clsx": "^1.1.1", diff --git a/yarn.lock b/yarn.lock index 08630702670..320ce4eab74 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1218,10 +1218,10 @@ "@docsearch/css" "3.3.3" algoliasearch "^4.0.0" -"@docusaurus/core@2.4.0", "@docusaurus/core@^2.2.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.0.tgz#a12c175cb2e5a7e4582e65876a50813f6168913d" - integrity sha512-J55/WEoIpRcLf3afO5POHPguVZosKmJEQWKBL+K7TAnfuE7i+Y0NPLlkKtnWCehagGsgTqClfQEexH/UT4kELA== +"@docusaurus/core@2.4.1", "@docusaurus/core@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/core/-/core-2.4.1.tgz#4b8ff5766131ce3fbccaad0b1daf2ad4dc76f62d" + integrity sha512-SNsY7PshK3Ri7vtsLXVeAJGS50nJN3RgF836zkyUfAD01Fq+sAk5EwWgLw+nnm5KVNGDu7PRR2kRGDsWvqpo0g== dependencies: "@babel/core" "^7.18.6" "@babel/generator" "^7.18.7" @@ -1233,13 +1233,13 @@ "@babel/runtime" "^7.18.6" "@babel/runtime-corejs3" "^7.18.6" "@babel/traverse" "^7.18.8" - "@docusaurus/cssnano-preset" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" + "@docusaurus/cssnano-preset" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" "@slorber/static-site-generator-webpack-plugin" "^4.0.7" "@svgr/webpack" "^6.2.1" autoprefixer "^10.4.7" @@ -1295,33 +1295,33 @@ webpack-merge "^5.8.0" webpackbar "^5.0.2" -"@docusaurus/cssnano-preset@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.0.tgz#9213586358e0cce517f614af041eb7d184f8add6" - integrity sha512-RmdiA3IpsLgZGXRzqnmTbGv43W4OD44PCo+6Q/aYjEM2V57vKCVqNzuafE94jv0z/PjHoXUrjr69SaRymBKYYw== +"@docusaurus/cssnano-preset@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/cssnano-preset/-/cssnano-preset-2.4.1.tgz#eacadefb1e2e0f59df3467a0fe83e4ff79eed163" + integrity sha512-ka+vqXwtcW1NbXxWsh6yA1Ckii1klY9E53cJ4O9J09nkMBgrNX3iEFED1fWdv8wf4mJjvGi5RLZ2p9hJNjsLyQ== dependencies: cssnano-preset-advanced "^5.3.8" postcss "^8.4.14" postcss-sort-media-queries "^4.2.1" tslib "^2.4.0" -"@docusaurus/logger@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.0.tgz#393d91ad9ecdb9a8f80167dd6a34d4b45219b835" - integrity sha512-T8+qR4APN+MjcC9yL2Es+xPJ2923S9hpzDmMtdsOcUGLqpCGBbU1vp3AAqDwXtVgFkq+NsEk7sHdVsfLWR/AXw== +"@docusaurus/logger@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/logger/-/logger-2.4.1.tgz#4d2c0626b40752641f9fdd93ad9b5a7a0792f767" + integrity sha512-5h5ysIIWYIDHyTVd8BjheZmQZmEgWDR54aQ1BX9pjFfpyzFo5puKXKYrYJXbjEHGyVhEzmB9UXwbxGfaZhOjcg== dependencies: chalk "^4.1.2" tslib "^2.4.0" -"@docusaurus/mdx-loader@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.0.tgz#c6310342904af2f203e7df86a9df623f86840f2d" - integrity sha512-GWoH4izZKOmFoC+gbI2/y8deH/xKLvzz/T5BsEexBye8EHQlwsA7FMrVa48N063bJBH4FUOiRRXxk5rq9cC36g== +"@docusaurus/mdx-loader@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/mdx-loader/-/mdx-loader-2.4.1.tgz#6425075d7fc136dbfdc121349060cedd64118393" + integrity sha512-4KhUhEavteIAmbBj7LVFnrVYDiU51H5YWW1zY6SmBSte/YLhDutztLTBE0PQl1Grux1jzUJeaSvAzHpTn6JJDQ== dependencies: "@babel/parser" "^7.18.8" "@babel/traverse" "^7.18.8" - "@docusaurus/logger" "2.4.0" - "@docusaurus/utils" "2.4.0" + "@docusaurus/logger" "2.4.1" + "@docusaurus/utils" "2.4.1" "@mdx-js/mdx" "^1.6.22" escape-html "^1.0.3" file-loader "^6.2.0" @@ -1336,13 +1336,13 @@ url-loader "^4.1.1" webpack "^5.73.0" -"@docusaurus/module-type-aliases@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.0.tgz#6961605d20cd46f86163ed8c2d83d438b02b4028" - integrity sha512-YEQO2D3UXs72qCn8Cr+RlycSQXVGN9iEUyuHwTuK4/uL/HFomB2FHSU0vSDM23oLd+X/KibQ3Ez6nGjQLqXcHg== +"@docusaurus/module-type-aliases@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/module-type-aliases/-/module-type-aliases-2.4.1.tgz#38b3c2d2ae44bea6d57506eccd84280216f0171c" + integrity sha512-gLBuIFM8Dp2XOCWffUDSjtxY7jQgKvYujt7Mx5s4FCTfoL5dN1EVbnrn+O2Wvh8b0a77D57qoIDY7ghgmatR1A== dependencies: "@docusaurus/react-loadable" "5.5.2" - "@docusaurus/types" "2.4.0" + "@docusaurus/types" "2.4.1" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1350,18 +1350,18 @@ react-helmet-async "*" react-loadable "npm:@docusaurus/react-loadable@5.5.2" -"@docusaurus/plugin-content-blog@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz#50dbfbc7b51f152ae660385fd8b34076713374c3" - integrity sha512-YwkAkVUxtxoBAIj/MCb4ohN0SCtHBs4AS75jMhPpf67qf3j+U/4n33cELq7567hwyZ6fMz2GPJcVmctzlGGThQ== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/plugin-content-blog@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.1.tgz#c705a8b1a36a34f181dcf43b7770532e4dcdc4a3" + integrity sha512-E2i7Knz5YIbE1XELI6RlTnZnGgS52cUO4BlCiCUCvQHbR+s1xeIWz4C6BtaVnlug0Ccz7nFSksfwDpVlkujg5Q== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" cheerio "^1.0.0-rc.12" feed "^4.2.2" fs-extra "^10.1.0" @@ -1372,18 +1372,18 @@ utility-types "^3.10.0" webpack "^5.73.0" -"@docusaurus/plugin-content-docs@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.0.tgz#36e235adf902325735b873b4f535205884363728" - integrity sha512-ic/Z/ZN5Rk/RQo+Io6rUGpToOtNbtPloMR2JcGwC1xT2riMu6zzfSwmBi9tHJgdXH6CB5jG+0dOZZO8QS5tmDg== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/module-type-aliases" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/plugin-content-docs@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.4.1.tgz#ed94d9721b5ce7a956fb01cc06c40d8eee8dfca7" + integrity sha512-Lo7lSIcpswa2Kv4HEeUcGYqaasMUQNpjTXpV0N8G6jXgZaQurqp7E8NGYeGbDXnb48czmHWbzDL4S3+BbK0VzA== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" "@types/react-router-config" "^5.0.6" combine-promises "^1.1.0" fs-extra "^10.1.0" @@ -1394,95 +1394,95 @@ utility-types "^3.10.0" webpack "^5.73.0" -"@docusaurus/plugin-content-pages@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.0.tgz#6169909a486e1eae0ddffff0b1717ce4332db4d4" - integrity sha512-Pk2pOeOxk8MeU3mrTU0XLIgP9NZixbdcJmJ7RUFrZp1Aj42nd0RhIT14BGvXXyqb8yTQlk4DmYGAzqOfBsFyGw== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/plugin-content-pages@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.4.1.tgz#c534f7e49967699a45bbe67050d1605ebbf3d285" + integrity sha512-/UjuH/76KLaUlL+o1OvyORynv6FURzjurSjvn2lbWTFc4tpYY2qLYTlKpTCBVPhlLUQsfyFnshEJDLmPneq2oA== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" fs-extra "^10.1.0" tslib "^2.4.0" webpack "^5.73.0" -"@docusaurus/plugin-debug@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.0.tgz#1ad513fe9bcaf017deccf62df8b8843faeeb7d37" - integrity sha512-KC56DdYjYT7Txyux71vXHXGYZuP6yYtqwClvYpjKreWIHWus5Zt6VNi23rMZv3/QKhOCrN64zplUbdfQMvddBQ== +"@docusaurus/plugin-debug@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-debug/-/plugin-debug-2.4.1.tgz#461a2c77b0c5a91b2c05257c8f9585412aaa59dc" + integrity sha512-7Yu9UPzRShlrH/G8btOpR0e6INFZr0EegWplMjOqelIwAcx3PKyR8mgPTxGTxcqiYj6hxSCRN0D8R7YrzImwNA== dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" fs-extra "^10.1.0" react-json-view "^1.21.3" tslib "^2.4.0" -"@docusaurus/plugin-google-analytics@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.0.tgz#8062d7a09d366329dfd3ce4e8a619da8624b6cc3" - integrity sha512-uGUzX67DOAIglygdNrmMOvEp8qG03X20jMWadeqVQktS6nADvozpSLGx4J0xbkblhJkUzN21WiilsP9iVP+zkw== +"@docusaurus/plugin-google-analytics@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.4.1.tgz#30de1c35773bf9d52bb2d79b201b23eb98022613" + integrity sha512-dyZJdJiCoL+rcfnm0RPkLt/o732HvLiEwmtoNzOoz9MSZz117UH2J6U2vUDtzUzwtFLIf32KkeyzisbwUCgcaQ== dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" tslib "^2.4.0" -"@docusaurus/plugin-google-gtag@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.0.tgz#a8efda476f971410dfb3aab1cfe1f0f7d269adc5" - integrity sha512-adj/70DANaQs2+TF/nRdMezDXFAV/O/pjAbUgmKBlyOTq5qoMe0Tk4muvQIwWUmiUQxFJe+sKlZGM771ownyOg== +"@docusaurus/plugin-google-gtag@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.4.1.tgz#6a3eb91022714735e625c7ca70ef5188fa7bd0dc" + integrity sha512-mKIefK+2kGTQBYvloNEKtDmnRD7bxHLsBcxgnbt4oZwzi2nxCGjPX6+9SQO2KCN5HZbNrYmGo5GJfMgoRvy6uA== dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" tslib "^2.4.0" -"@docusaurus/plugin-google-tag-manager@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.0.tgz#9a94324ac496835fc34e233cc60441df4e04dfdd" - integrity sha512-E66uGcYs4l7yitmp/8kMEVQftFPwV9iC62ORh47Veqzs6ExwnhzBkJmwDnwIysHBF1vlxnzET0Fl2LfL5fRR3A== +"@docusaurus/plugin-google-tag-manager@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.4.1.tgz#b99f71aec00b112bbf509ef2416e404a95eb607e" + integrity sha512-Zg4Ii9CMOLfpeV2nG74lVTWNtisFaH9QNtEw48R5QE1KIwDBdTVaiSA18G1EujZjrzJJzXN79VhINSbOJO/r3g== dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" tslib "^2.4.0" -"@docusaurus/plugin-sitemap@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.0.tgz#ba0eb43565039fe011bdd874b5c5d7252b19d709" - integrity sha512-pZxh+ygfnI657sN8a/FkYVIAmVv0CGk71QMKqJBOfMmDHNN1FeDeFkBjWP49ejBqpqAhjufkv5UWq3UOu2soCw== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/plugin-sitemap@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.4.1.tgz#8a7a76ed69dc3e6b4474b6abb10bb03336a9de6d" + integrity sha512-lZx+ijt/+atQ3FVE8FOHV/+X3kuok688OydDXrqKRJyXBJZKgGjA2Qa8RjQ4f27V2woaXhtnyrdPop/+OjVMRg== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" fs-extra "^10.1.0" sitemap "^7.1.1" tslib "^2.4.0" -"@docusaurus/preset-classic@^2.2.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.0.tgz#92fdcfab35d8d0ffb8c38bcbf439e4e1cb0566a3" - integrity sha512-/5z5o/9bc6+P5ool2y01PbJhoGddEGsC0ej1MF6mCoazk8A+kW4feoUd68l7Bnv01rCnG3xy7kHUQP97Y0grUA== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/plugin-content-blog" "2.4.0" - "@docusaurus/plugin-content-docs" "2.4.0" - "@docusaurus/plugin-content-pages" "2.4.0" - "@docusaurus/plugin-debug" "2.4.0" - "@docusaurus/plugin-google-analytics" "2.4.0" - "@docusaurus/plugin-google-gtag" "2.4.0" - "@docusaurus/plugin-google-tag-manager" "2.4.0" - "@docusaurus/plugin-sitemap" "2.4.0" - "@docusaurus/theme-classic" "2.4.0" - "@docusaurus/theme-common" "2.4.0" - "@docusaurus/theme-search-algolia" "2.4.0" - "@docusaurus/types" "2.4.0" +"@docusaurus/preset-classic@^2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/preset-classic/-/preset-classic-2.4.1.tgz#072f22d0332588e9c5f512d4bded8d7c99f91497" + integrity sha512-P4//+I4zDqQJ+UDgoFrjIFaQ1MeS9UD1cvxVQaI6O7iBmiHQm0MGROP1TbE7HlxlDPXFJjZUK3x3cAoK63smGQ== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/plugin-debug" "2.4.1" + "@docusaurus/plugin-google-analytics" "2.4.1" + "@docusaurus/plugin-google-gtag" "2.4.1" + "@docusaurus/plugin-google-tag-manager" "2.4.1" + "@docusaurus/plugin-sitemap" "2.4.1" + "@docusaurus/theme-classic" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-search-algolia" "2.4.1" + "@docusaurus/types" "2.4.1" "@docusaurus/react-loadable@5.5.2", "react-loadable@npm:@docusaurus/react-loadable@5.5.2": version "5.5.2" @@ -1492,23 +1492,23 @@ "@types/react" "*" prop-types "^15.6.2" -"@docusaurus/theme-classic@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.0.tgz#a5404967b00adec3472efca4c3b3f6a5e2021c78" - integrity sha512-GMDX5WU6Z0OC65eQFgl3iNNEbI9IMJz9f6KnOyuMxNUR6q0qVLsKCNopFUDfFNJ55UU50o7P7o21yVhkwpfJ9w== - dependencies: - "@docusaurus/core" "2.4.0" - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/module-type-aliases" "2.4.0" - "@docusaurus/plugin-content-blog" "2.4.0" - "@docusaurus/plugin-content-docs" "2.4.0" - "@docusaurus/plugin-content-pages" "2.4.0" - "@docusaurus/theme-common" "2.4.0" - "@docusaurus/theme-translations" "2.4.0" - "@docusaurus/types" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" +"@docusaurus/theme-classic@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-classic/-/theme-classic-2.4.1.tgz#0060cb263c1a73a33ac33f79bb6bc2a12a56ad9e" + integrity sha512-Rz0wKUa+LTW1PLXmwnf8mn85EBzaGSt6qamqtmnh9Hflkc+EqiYMhtUJeLdV+wsgYq4aG0ANc+bpUDpsUhdnwg== + dependencies: + "@docusaurus/core" "2.4.1" + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-translations" "2.4.1" + "@docusaurus/types" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" "@mdx-js/react" "^1.6.22" clsx "^1.2.1" copy-text-to-clipboard "^3.0.1" @@ -1523,18 +1523,18 @@ tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-common@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.0.tgz#626096fe9552d240a2115b492c7e12099070cf2d" - integrity sha512-IkG/l5f/FLY6cBIxtPmFnxpuPzc5TupuqlOx+XDN+035MdQcAh8wHXXZJAkTeYDeZ3anIUSUIvWa7/nRKoQEfg== - dependencies: - "@docusaurus/mdx-loader" "2.4.0" - "@docusaurus/module-type-aliases" "2.4.0" - "@docusaurus/plugin-content-blog" "2.4.0" - "@docusaurus/plugin-content-docs" "2.4.0" - "@docusaurus/plugin-content-pages" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-common" "2.4.0" +"@docusaurus/theme-common@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-common/-/theme-common-2.4.1.tgz#03e16f7aa96455e952f3243ac99757b01a3c83d4" + integrity sha512-G7Zau1W5rQTaFFB3x3soQoZpkgMbl/SYNG8PfMFIjKa3M3q8n0m/GRf5/H/e5BqOvt8c+ZWIXGCiz+kUCSHovA== + dependencies: + "@docusaurus/mdx-loader" "2.4.1" + "@docusaurus/module-type-aliases" "2.4.1" + "@docusaurus/plugin-content-blog" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/plugin-content-pages" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-common" "2.4.1" "@types/history" "^4.7.11" "@types/react" "*" "@types/react-router-config" "*" @@ -1545,19 +1545,19 @@ use-sync-external-store "^1.2.0" utility-types "^3.10.0" -"@docusaurus/theme-search-algolia@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.0.tgz#07d297d50c44446d6bc5a37be39afb8f014084e1" - integrity sha512-pPCJSCL1Qt4pu/Z0uxBAuke0yEBbxh0s4fOvimna7TEcBLPq0x06/K78AaABXrTVQM6S0vdocFl9EoNgU17hqA== +"@docusaurus/theme-search-algolia@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.4.1.tgz#906bd2cca3fced0241985ef502c892f58ff380fc" + integrity sha512-6BcqW2lnLhZCXuMAvPRezFs1DpmEKzXFKlYjruuas+Xy3AQeFzDJKTJFIm49N77WFCTyxff8d3E4Q9pi/+5McQ== dependencies: "@docsearch/react" "^3.1.1" - "@docusaurus/core" "2.4.0" - "@docusaurus/logger" "2.4.0" - "@docusaurus/plugin-content-docs" "2.4.0" - "@docusaurus/theme-common" "2.4.0" - "@docusaurus/theme-translations" "2.4.0" - "@docusaurus/utils" "2.4.0" - "@docusaurus/utils-validation" "2.4.0" + "@docusaurus/core" "2.4.1" + "@docusaurus/logger" "2.4.1" + "@docusaurus/plugin-content-docs" "2.4.1" + "@docusaurus/theme-common" "2.4.1" + "@docusaurus/theme-translations" "2.4.1" + "@docusaurus/utils" "2.4.1" + "@docusaurus/utils-validation" "2.4.1" algoliasearch "^4.13.1" algoliasearch-helper "^3.10.0" clsx "^1.2.1" @@ -1567,18 +1567,18 @@ tslib "^2.4.0" utility-types "^3.10.0" -"@docusaurus/theme-translations@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.0.tgz#62dacb7997322f4c5a828b3ab66177ec6769eb33" - integrity sha512-kEoITnPXzDPUMBHk3+fzEzbopxLD3fR5sDoayNH0vXkpUukA88/aDL1bqkhxWZHA3LOfJ3f0vJbOwmnXW5v85Q== +"@docusaurus/theme-translations@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/theme-translations/-/theme-translations-2.4.1.tgz#4d49df5865dae9ef4b98a19284ede62ae6f98726" + integrity sha512-T1RAGP+f86CA1kfE8ejZ3T3pUU3XcyvrGMfC/zxCtc2BsnoexuNI9Vk2CmuKCb+Tacvhxjv5unhxXce0+NKyvA== dependencies: fs-extra "^10.1.0" tslib "^2.4.0" -"@docusaurus/types@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.0.tgz#f94f89a0253778b617c5d40ac6f16b17ec55ce41" - integrity sha512-xaBXr+KIPDkIaef06c+i2HeTqVNixB7yFut5fBXPGI2f1rrmEV2vLMznNGsFwvZ5XmA3Quuefd4OGRkdo97Dhw== +"@docusaurus/types@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/types/-/types-2.4.1.tgz#d8e82f9e0f704984f98df1f93d6b4554d5458705" + integrity sha512-0R+cbhpMkhbRXX138UOc/2XZFF8hiZa6ooZAEEJFp5scytzCw4tC1gChMFXrpa3d2tYE6AX8IrOEpSonLmfQuQ== dependencies: "@types/history" "^4.7.11" "@types/react" "*" @@ -1589,30 +1589,30 @@ webpack "^5.73.0" webpack-merge "^5.8.0" -"@docusaurus/utils-common@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.0.tgz#eb2913871860ed32e73858b4c7787dd820c5558d" - integrity sha512-zIMf10xuKxddYfLg5cS19x44zud/E9I7lj3+0bv8UIs0aahpErfNrGhijEfJpAfikhQ8tL3m35nH3hJ3sOG82A== +"@docusaurus/utils-common@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-common/-/utils-common-2.4.1.tgz#7f72e873e49bd5179588869cc3ab7449a56aae63" + integrity sha512-bCVGdZU+z/qVcIiEQdyx0K13OC5mYwxhSuDUR95oFbKVuXYRrTVrwZIqQljuo1fyJvFTKHiL9L9skQOPokuFNQ== dependencies: tslib "^2.4.0" -"@docusaurus/utils-validation@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.0.tgz#1ed92bfab5da321c4a4d99cad28a15627091aa90" - integrity sha512-IrBsBbbAp6y7mZdJx4S4pIA7dUyWSA0GNosPk6ZJ0fX3uYIEQgcQSGIgTeSC+8xPEx3c16o03en1jSDpgQgz/w== +"@docusaurus/utils-validation@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils-validation/-/utils-validation-2.4.1.tgz#19959856d4a886af0c5cfb357f4ef68b51151244" + integrity sha512-unII3hlJlDwZ3w8U+pMO3Lx3RhI4YEbY3YNsQj4yzrkZzlpqZOLuAiZK2JyULnD+TKbceKU0WyWkQXtYbLNDFA== dependencies: - "@docusaurus/logger" "2.4.0" - "@docusaurus/utils" "2.4.0" + "@docusaurus/logger" "2.4.1" + "@docusaurus/utils" "2.4.1" joi "^17.6.0" js-yaml "^4.1.0" tslib "^2.4.0" -"@docusaurus/utils@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.0.tgz#fdf0c3545819e48bb57eafc5057495fd4d50e900" - integrity sha512-89hLYkvtRX92j+C+ERYTuSUK6nF9bGM32QThcHPg2EDDHVw6FzYQXmX6/p+pU5SDyyx5nBlE4qXR92RxCAOqfg== +"@docusaurus/utils@2.4.1": + version "2.4.1" + resolved "https://registry.yarnpkg.com/@docusaurus/utils/-/utils-2.4.1.tgz#9c5f76eae37b71f3819c1c1f0e26e6807c99a4fc" + integrity sha512-1lvEZdAQhKNht9aPXPoh69eeKnV0/62ROhQeFKKxmzd0zkcuE/Oc5Gpnt00y/f5bIsmOsYMY7Pqfm/5rteT5GA== dependencies: - "@docusaurus/logger" "2.4.0" + "@docusaurus/logger" "2.4.1" "@svgr/webpack" "^6.2.1" escape-string-regexp "^4.0.0" file-loader "^6.2.0" From b328ea8aab922fdcb7d2ca836bd98de0291690f0 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 27 Jun 2023 12:58:25 -0400 Subject: [PATCH 439/665] Update index.md (#1824) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 72d2847d636..2e7876f4212 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | -| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☐ | ☐ | +| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | From eebc837c11163572b9b7bc036084d15ac037a604 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 28 Jun 2023 04:37:05 -0400 Subject: [PATCH 440/665] Update index.md (#1826) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2e7876f4212..ecfb09d6fb1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -111,7 +111,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | -| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☐ | ☐ | +| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☒ | ☐ | | [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | From 693e419ef756c0e3b1b3e4a9b1431c9a11300c62 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 28 Jun 2023 04:37:27 -0400 Subject: [PATCH 441/665] Update index.md (#1825) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index ecfb09d6fb1..f6a8fc094d7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -46,7 +46,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | -| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☐ | ☐ | +| [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/)| [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | From 8b2326fd40bfd524985973cb39680c3f92abcf80 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 28 Jun 2023 11:20:24 +0200 Subject: [PATCH 442/665] Update analysis RFP status --- .../analysis-website-and-data-platform.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Under Development}/analysis-website-and-data-platform.md (94%) diff --git a/docs/RFPs/Open/analysis-website-and-data-platform.md b/docs/RFPs/Under Development/analysis-website-and-data-platform.md similarity index 94% rename from docs/RFPs/Open/analysis-website-and-data-platform.md rename to docs/RFPs/Under Development/analysis-website-and-data-platform.md index 79935c631b7..3bbc1cc0696 100644 --- a/docs/RFPs/Open/analysis-website-and-data-platform.md +++ b/docs/RFPs/Under Development/analysis-website-and-data-platform.md @@ -1,6 +1,6 @@ # Analytics Website/Data Platform -* **Status:** Open +* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/pull/1716), [Under Development 2](https://github.com/w3f/Grants-Program/pull/1768) * **Proposer:** [Keegan Quigley](https://github.com/keeganquigley) * **Teams/People that could deliver the RFP**: @web3go-xyz diff --git a/docs/rfps.md b/docs/rfps.md index 4c6c130c1ca..a455232952c 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -24,7 +24,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 29.11.2021 | -| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 17.02.2023 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 29.11.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 25.01.2023 | @@ -48,6 +47,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 28.06.2023 | | [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | | [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | From 11b6ba4f4e7fc7c20c2822ddeab50f36b2c08248 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 28 Jun 2023 14:36:00 +0200 Subject: [PATCH 443/665] Cancel Openbrush (#1827) --- applications/openbrush-follow-up.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/openbrush-follow-up.md b/applications/openbrush-follow-up.md index 6958d9d4682..ee03b18b8a6 100644 --- a/applications/openbrush-follow-up.md +++ b/applications/openbrush-follow-up.md @@ -3,6 +3,7 @@ * **Team Name:** [SuperColony](https://github.com/Supercolony-net) * **Payment Address:** ERC 20 ADDRESS: 0xE1B19cE32866cDE87F8f59C7C2C5f90E093A6942 * **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2, It is follow-up grant for [first grant](https://github.com/w3f/Grants-Program/pull/497). +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/621#issuecomment-1611059800) ## Project Overview :page_facing_up: From 590febb0be9094f690c20299fbdbca83acf76400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 28 Jun 2023 17:06:36 +0200 Subject: [PATCH 444/665] Move data analysis RFPs to Under Development --- .../RFPs/{Open => Under Development}/data_analysis_tools.md | 6 +++--- docs/rfps.md | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) rename docs/RFPs/{Open => Under Development}/data_analysis_tools.md (92%) diff --git a/docs/RFPs/Open/data_analysis_tools.md b/docs/RFPs/Under Development/data_analysis_tools.md similarity index 92% rename from docs/RFPs/Open/data_analysis_tools.md rename to docs/RFPs/Under Development/data_analysis_tools.md index ab2211d29a2..67ba67103d1 100644 --- a/docs/RFPs/Open/data_analysis_tools.md +++ b/docs/RFPs/Under Development/data_analysis_tools.md @@ -1,9 +1,9 @@ # Data Analysis Tools for Substrate-based Blockchains -* **Status:** Open -* **Proposer:** [dsm-w3f](https://github.com/dsm-w3f), [michalisFr](https://github.com/michalisFr) +- **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/pull/1716), [Under Development 2](https://github.com/w3f/Grants-Program/pull/1768) +- **Proposer:** [dsm-w3f](https://github.com/dsm-w3f), [michalisFr](https://github.com/michalisFr) -## Project Description :page_facing_up: +## Project Description :page_facing_up: Block Explorers are tools that index blockchain data and allow people to easily exhibit it using a web user interface. Examples of Block Explorers in the Polkadot/Kusama ecosystem are (not exhaustive) Subscan, Calamar, and Statescan. For common users, the features commonly found in block explorers are enough. However, for advanced users, the data analysis involves accessing many screens and following long paths through blockchain data. diff --git a/docs/rfps.md b/docs/rfps.md index a455232952c..914e0c2ed89 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -26,7 +26,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 29.11.2021 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 29.11.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | -| [data_analysis_tools.md](RFPs/Open/data_analysis_tools.md) | 25.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | @@ -47,7 +46,8 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | -| [analysis-website-and-data-platform.md](RFPs/Open/analysis-website-and-data-platform.md) | 28.06.2023 | +| [analysis-website-and-data-platform.md](RFPs/Under%20Development/analysis-website-and-data-platform.md) | 28.06.2023 | +| [data_analysis_tools.md](RFPs/Under%20Development/data_analysis_tools.md) | 28.06.2023 | | [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | | [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | From 8f3a8bcbca623baa8f9b212d81987414ed845fb7 Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Thu, 29 Jun 2023 02:12:20 +1000 Subject: [PATCH 445/665] Tokeneconomics survey: Post approval changes (#1812) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Scope: Top-6 The existing literature was deeper than expected, but also much narrower than expected. Unfortunately, this means there are not 10 articles that fit the grant scope. It has also meant that distilling the analysis has taken much more time than expected. I have expanded the scope of published articles from Dec 2022 to the current date to capture one article I judge to be significant. The current articles cover bubble-coins, dampened-coins, breakable-coins and redeemable-coins. These cover most, if not all, characteristics of existing coins. Signed-off-by: Mark Van de Vyver * Delivery extensions The existing literature was deeper than expected. This meant that distilling the analysis has taken much more time than expected. I have also had delays in setting up the legal entities through my accountant - its tax season right now - hence the delay in submitting the details for the Milestone payments. Signed-off-by: Mark Van de Vyver * Expanded scope of application Substrate is being merged into Polkadot and is now formaly and practically under the rubric of the 'Parity Polkadot SDK ... (basically, that’s Substrate, Polkadot, Cumulus and XCM)'. See: https://web.archive.org/web/20230621013047/https://forum.polkadot.network/t/psa-parity-is-currently-working-on-merging-the-polkadot-stack-repositories-into-one-single-repository/2883/13 Polkadot uses one specific coin model. This project envisions/contemplates token designs that improve on DOT or even conflict with DOT. These changes address that broader audience. Signed-off-by: Mark Van de Vyver * Reviewer feedback Signed-off-by: Mark Van de Vyver --------- Signed-off-by: Mark Van de Vyver --- applications/tokenomics-survey-2022.md | 28 ++++++++++++-------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index 6423ece3a34..23e8c82b5f7 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -1,4 +1,4 @@ -# Substrate Tokenomics +# Tokenomics Scoping Review: Annotated Bibliogrphy - **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) - **Payment Address:** 15WoVugRLfBAogS1FBmhzxVv8WZqZK1z4KKHALijTZfdVcCm (USDC) @@ -14,21 +14,20 @@ This is a survey, hence limited to topics the existing literature addresses. Wit The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). - Description: - The decision making of Substrate developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain. + The decision making of developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain. - This project provides a annotated bibliography to help think through various choices and their trade-offs. It does so by reviewing the current state of play, as it is described in: a) published general-blockchain research, b) Polkadot whitepapers. It does not offer the answer to any particular token-economy design question. -- Substrate integration: - With Substrate Token-Economy networks in mind, I aim to provide a annotated bibliography of existing general-blockchain token-economy research. - Specifically, the central features and concerns across Polkadot Parachain Token-Economy networks will be identified. +- With general Token-Economy networks in mind, I aim to provide a annotated bibliography of existing general-blockchain token-economy research. + For practical context, the central features and concerns across Polkadot Parachain Token-Economy networks will be identified. Ultimately, the reader should learn something about those features of the token-economies of Polkadot Parachain networks and understand how some of the issues raised by the general-blockchain token-economy research are addressed by Polkadot Parachain token-economy designs, while others are not. Summary tables will highlight the key differentiating characteristics of different Polkadot Parachain network token-economies. - Motivation: - A project we are developing envisions the use of Substrate relay and Parachains in such a manner that our (imagined) token use is, apparently, novel. The state of play in Polkadot Parachain token-economics appears to be a debate [around staking and inflation](https://forum.polkadot.network/t/should-parachains-have-staking-inflation/806). A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of Substrate and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. + A project we are developing envisions the use of the [Open Web3 Stack](https://github.com/open-web3-stack) relay and Parachains in such a manner that our (imagined) token use is, apparently, novel. The state of play in Polkadot Parachain token-economics appears to be a debate [around staking and inflation](https://forum.polkadot.network/t/should-parachains-have-staking-inflation/806). A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of the [Open Web3 Stack](https://github.com/open-web3-stack) and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. ## Project Details ### The problem -A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features that are enabled by the distinct features of Substrate and its pallets, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. Inclusion of any of this information in Substrate/Polkadot documentation is out of scope. +A search of docs.substrate.io for "tokenomics" and "token-economics" returns no results. We had expected a reference to, or high-level summary of, the token-economies of parachains elected to the Polkadot relay chain. Ideally, we hoped to find high level descriptions of some token-economy features, possibly with links to case studies or other resources. This annotated bibliography will provide some of that information. Inclusion of this information in any documentation is out of scope. ### Research questions/hypothesis @@ -67,7 +66,7 @@ Each section of the report/working paper will be developed using some subset of #### Published articles -The initial source of the published research will be the top-10 articles selected by the grantee, using the commercial research databases available from the State Library of New South Wales by operationalizing the following inquiry, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors". This initial source may be adjusted at the grantees discretion based on his expertise. The selection process will be fully described and documented. +The initial source of the published research will be the top-6 articles selected by the grantee, using the commercial research databases available from the State Library of New South Wales by operationalizing the following inquiry, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors". This initial source may be adjusted at the grantees discretion based on his expertise. The selection process will be fully described and documented. #### Polkadot Parachain whitepapers @@ -123,10 +122,9 @@ The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Rese - Game theory, behavioral economics/finance. - Empirical inference of token-economy attributes from time-series or cross-sectional regression analysis. - A review of the general economic modeling literature i.e. not related to blockchains. -- Substrate/Polkadot documentation. - Verifying the network token-economy has been implemented as specified in the network whitepaper. - Verifying the network whitepaper assumptions are a reasonable/plausible description of the network participants. -- Inclusion of any of this information in Substrate/Polkadot documentation. +- Inclusion of any of this information in any project documentation. #### Crypto-Currencies @@ -138,7 +136,7 @@ Equilibria are generally explicitly constructed (which proves existence) using c - Where and how does your project fit into the ecosystem? - Research into the design of a token-economy and survey of Polkadot token-economies. - Who is your target audience? - - Polkadot/Substrate Relay and Parachain developers. Industry analysts/advisors (media and investors). + - Blockchain developers. Industry analysts/advisors (media and investors). - What need(s) does your project meet? Developers and analysts need to understand the relevant literature available when developing their token-economy. The literature we canvas both theoretical (refereed articles) and applied (network whitepapers). @@ -203,7 +201,7 @@ Personal - As requested, I have adjusted the source of the research to eliminate myself as the source of bias in the collection of research papers. - academic publications relevant to the problem: One of the products from this research will be such a listing under these categories: - 1. Published articles: As requested, to eliminate bias (and constrain budget) in the collection of research papers, the initial source of the published research will be the top-10 articles provided by the State Library of New South Wales information search service in response to the following query, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors" + 1. Published articles: As requested, to eliminate bias (and constrain budget) in the collection of research papers, the initial source of the published research will be the top-6 articles provided by the State Library of New South Wales information search service in response to the following query, "Refereed articles on block-chain token-economics using rational expectations equilibrium (a.k.a. no-arbitrage) arguments/analysis, ranked by journal impact factors" 2. Polkadot Parachain whitepapers: These are from projects that are Polkadot-Parachains as at 19 December 2022. - links to your research diary, blog posts, articles, forum discussions or open GitHub issues: - [Tokenomics: Grant models](https://forum.polkadot.network/t/tokenomics-grant-models/1266) @@ -251,7 +249,7 @@ Initial flow-chart/decision-tree development that will help developers place the ### Milestone 2 — Outline Article -- **Estimated duration:** 1 month +- **Estimated duration:** 2 month - **FTE:** 0.2 - **Costs:** 3,000 USD @@ -268,7 +266,7 @@ Initial flow-chart/decision-tree development that will help developers place the ### Milestone 3 — Finalize Article -- **Estimated Duration:** 1 month +- **Estimated Duration:** 2 month - **FTE:** 0.2 - **Costs:** 4,000 USD @@ -307,7 +305,7 @@ Please include here - how you intend to use, enhance, promote and support your project in the short term, and - The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent) and the Polkadot forum. - the team's long-term plans and intentions in relation to it. - - Engage in a more forward-looking/positive analysis of how to design an aspect of the Substrate/Polkadot token-economy that addresses a current need. + - W3F Grant Proposal to implement and document one token model as an example/template of building a blockchain on the W3F [Open Web3 Stack](https://github.com/open-web3-stack) having known 'on-paper' coin characteristics. - Create RFP's addressing pallet functionality gaps that are identified in the course of the above. ## Additional Information :heavy_plus_sign: From 0b342e8061ca22826670782a91f37aa5d85f6ec7 Mon Sep 17 00:00:00 2001 From: Conor Svensson Date: Thu, 29 Jun 2023 17:47:34 +0100 Subject: [PATCH 446/665] Update sirato_substrate_phase3.md (#1828) Add correct payment details. --- applications/sirato_substrate_phase3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/sirato_substrate_phase3.md b/applications/sirato_substrate_phase3.md index 4066c541717..cd0bdffc984 100644 --- a/applications/sirato_substrate_phase3.md +++ b/applications/sirato_substrate_phase3.md @@ -2,7 +2,7 @@ - **Project Name:** Sirato (Epirus) Substrate Explorer - Phase III - **Team Name:** Web3 Labs Ltd -- **Payment Address:** 0xc905c448db9942c662fcb1680f3ecfcd0592409c +- **Payment Address:** Fiat payment address provided on invoice dated 23/06/2023. - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview From e65edbbbb95ba4fde7cbf0662b0b5bd4e754697a Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 30 Jun 2023 04:39:44 -0300 Subject: [PATCH 447/665] Update index.md (#1829) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f6a8fc094d7..63ad90d52cb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -85,7 +85,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | -| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☐ | +| [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☒ | | [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | From 18a3f3cf9cae72e77ae359b8d2d7f83f1929cd07 Mon Sep 17 00:00:00 2001 From: Cyril Carlier Date: Fri, 30 Jun 2023 09:45:14 +0200 Subject: [PATCH 448/665] Update Maki - Terminate due to lack of significant progression (#1830) --- applications/Maki.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/applications/Maki.md b/applications/Maki.md index 6e6e14e7fa5..54ebf93670b 100644 --- a/applications/Maki.md +++ b/applications/Maki.md @@ -3,7 +3,8 @@ - **Team Name:** Cyril Carlier (Individual) - **Payment Address:** 0x8a0cFA1DE5c26e3Cd553F33Dc560fBfa5267867C (ERC-20 USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 - +- **Status:** Terminated + ## Project Overview :page_facing_up: This application is a response from the [anti-collusion infrastructure RFP](https://github.com/w3f/Grants-Program/blob/master/rfps/open/anti-collusion_infrastructure.md). From 208579ab0423ded6aa8bb19a9b3ebcc6945eaff8 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 30 Jun 2023 09:49:58 +0200 Subject: [PATCH 449/665] Statemine -> Asset Hub --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e96de8f3139..87130862957 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ The W3F Grants Program offers different grant levels to help you best depending ## :pencil: Process -> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on [Statemine/Statemint](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on the [Polkadot and Kusama Asset Hub](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. ### 1. Application From cf98382edc04006cd1e3fd699c6347bc5427be4a Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 3 Jul 2023 15:51:40 +0200 Subject: [PATCH 450/665] yarn lock update --- yarn.lock | 2940 ++++++++++++++++++++++++++++++----------------------- 1 file changed, 1642 insertions(+), 1298 deletions(-) diff --git a/yarn.lock b/yarn.lock index 320ce4eab74..1967817b8e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,153 +2,161 @@ # yarn lockfile v1 -"@algolia/autocomplete-core@1.7.4": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz#85ff36b2673654a393c8c505345eaedd6eaa4f70" - integrity sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg== +"@algolia/autocomplete-core@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz#1d56482a768c33aae0868c8533049e02e8961be7" + integrity sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw== dependencies: - "@algolia/autocomplete-shared" "1.7.4" + "@algolia/autocomplete-plugin-algolia-insights" "1.9.3" + "@algolia/autocomplete-shared" "1.9.3" -"@algolia/autocomplete-preset-algolia@1.7.4": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz#610ee1d887962f230b987cba2fd6556478000bc3" - integrity sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ== +"@algolia/autocomplete-plugin-algolia-insights@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.3.tgz#9b7f8641052c8ead6d66c1623d444cbe19dde587" + integrity sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg== dependencies: - "@algolia/autocomplete-shared" "1.7.4" + "@algolia/autocomplete-shared" "1.9.3" -"@algolia/autocomplete-shared@1.7.4": - version "1.7.4" - resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz#78aea1140a50c4d193e1f06a13b7f12c5e2cbeea" - integrity sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg== +"@algolia/autocomplete-preset-algolia@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.3.tgz#64cca4a4304cfcad2cf730e83067e0c1b2f485da" + integrity sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA== + dependencies: + "@algolia/autocomplete-shared" "1.9.3" + +"@algolia/autocomplete-shared@1.9.3": + version "1.9.3" + resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" + integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== -"@algolia/cache-browser-local-storage@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.0.tgz#4c54a9b1795dcc1cd9f9533144f7df3057984d39" - integrity sha512-myRSRZDIMYB8uCkO+lb40YKiYHi0fjpWRtJpR/dgkaiBlSD0plRyB6lLOh1XIfmMcSeBOqDE7y9m8xZMrXYfyQ== +"@algolia/cache-browser-local-storage@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz#7bc0c9d8d346ed01384f4cf0dfaf6ba29ad5c20c" + integrity sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw== dependencies: - "@algolia/cache-common" "4.17.0" + "@algolia/cache-common" "4.18.0" -"@algolia/cache-common@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.17.0.tgz#bc3da15548df585b44d76c55e66b0056a2b3f917" - integrity sha512-g8mXzkrcUBIPZaulAuqE7xyHhLAYAcF2xSch7d9dABheybaU3U91LjBX6eJTEB7XVhEsgK4Smi27vWtAJRhIKQ== +"@algolia/cache-common@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.18.0.tgz#aac33afac53e191c595d14a4bb7e6d81aae4836f" + integrity sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg== -"@algolia/cache-in-memory@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.17.0.tgz#eb55a92cb8eb8641903a2b23fd6d05ebdaca2010" - integrity sha512-PT32ciC/xI8z919d0oknWVu3kMfTlhQn3MKxDln3pkn+yA7F7xrxSALysxquv+MhFfNAcrtQ/oVvQVBAQSHtdw== +"@algolia/cache-in-memory@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz#9a40294c734819724a1b4e86afd5a7d4be9bcc2f" + integrity sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw== dependencies: - "@algolia/cache-common" "4.17.0" + "@algolia/cache-common" "4.18.0" -"@algolia/client-account@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.17.0.tgz#4b13e5a8e50a06be1f3289d9db337096ebc66b73" - integrity sha512-sSEHx9GA6m7wrlsSMNBGfyzlIfDT2fkz2u7jqfCCd6JEEwmxt8emGmxAU/0qBfbhRSuGvzojoLJlr83BSZAKjA== +"@algolia/client-account@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.18.0.tgz#202d9e06b41e06e45cb919107bed0a65106883cc" + integrity sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew== dependencies: - "@algolia/client-common" "4.17.0" - "@algolia/client-search" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/client-common" "4.18.0" + "@algolia/client-search" "4.18.0" + "@algolia/transporter" "4.18.0" -"@algolia/client-analytics@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.17.0.tgz#1b36ffbe913b7b4d8900bc15982ca431f47a473c" - integrity sha512-84ooP8QA3mQ958hQ9wozk7hFUbAO+81CX1CjAuerxBqjKIInh1fOhXKTaku05O/GHBvcfExpPLIQuSuLYziBXQ== +"@algolia/client-analytics@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.18.0.tgz#030b026bd9c13cb15437e35e4456bde25b0f1298" + integrity sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ== dependencies: - "@algolia/client-common" "4.17.0" - "@algolia/client-search" "4.17.0" - "@algolia/requester-common" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/client-common" "4.18.0" + "@algolia/client-search" "4.18.0" + "@algolia/requester-common" "4.18.0" + "@algolia/transporter" "4.18.0" -"@algolia/client-common@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.17.0.tgz#67fd898006e3ac359ea3e3ed61abfc26147ffa53" - integrity sha512-jHMks0ZFicf8nRDn6ma8DNNsdwGgP/NKiAAL9z6rS7CymJ7L0+QqTJl3rYxRW7TmBhsUH40wqzmrG6aMIN/DrQ== +"@algolia/client-common@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.18.0.tgz#e080c393e1becdd5f5f008815c57d3248d3a8483" + integrity sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg== dependencies: - "@algolia/requester-common" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/requester-common" "4.18.0" + "@algolia/transporter" "4.18.0" -"@algolia/client-personalization@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.17.0.tgz#428d9f4762c22856b6062bb54351eb31834db6c1" - integrity sha512-RMzN4dZLIta1YuwT7QC9o+OeGz2cU6eTOlGNE/6RcUBLOU3l9tkCOdln5dPE2jp8GZXPl2yk54b2nSs1+pAjqw== +"@algolia/client-personalization@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.18.0.tgz#9042ce2773120158ad25e1dfb28d706cebb48dc2" + integrity sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A== dependencies: - "@algolia/client-common" "4.17.0" - "@algolia/requester-common" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/client-common" "4.18.0" + "@algolia/requester-common" "4.18.0" + "@algolia/transporter" "4.18.0" -"@algolia/client-search@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.17.0.tgz#0053c682f5f588e006c20791c27e8bcb0aa5b53c" - integrity sha512-x4P2wKrrRIXszT8gb7eWsMHNNHAJs0wE7/uqbufm4tZenAp+hwU/hq5KVsY50v+PfwM0LcDwwn/1DroujsTFoA== +"@algolia/client-search@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.18.0.tgz#83b37aacbe254fd7892154fe7a8f0395bd01c682" + integrity sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g== dependencies: - "@algolia/client-common" "4.17.0" - "@algolia/requester-common" "4.17.0" - "@algolia/transporter" "4.17.0" + "@algolia/client-common" "4.18.0" + "@algolia/requester-common" "4.18.0" + "@algolia/transporter" "4.18.0" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/logger-common@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.17.0.tgz#0fcea39c9485554edb4cdbfd965c5748b0b837ac" - integrity sha512-DGuoZqpTmIKJFDeyAJ7M8E/LOenIjWiOsg1XJ1OqAU/eofp49JfqXxbfgctlVZVmDABIyOz8LqEoJ6ZP4DTyvw== +"@algolia/logger-common@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.18.0.tgz#0e6a14e8b91fcb7861595169e1ca57cf219f8255" + integrity sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg== -"@algolia/logger-console@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.17.0.tgz#8ac56ef4259c4fa3eb9eb6586c7b4b4ed942e8da" - integrity sha512-zMPvugQV/gbXUvWBCzihw6m7oxIKp48w37QBIUu/XqQQfxhjoOE9xyfJr1KldUt5FrYOKZJVsJaEjTsu+bIgQg== +"@algolia/logger-console@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.18.0.tgz#3636e4b3e2154ee2ee2db2e5be2857203c9f7047" + integrity sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g== dependencies: - "@algolia/logger-common" "4.17.0" + "@algolia/logger-common" "4.18.0" -"@algolia/requester-browser-xhr@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.0.tgz#f52fdeeac2f3c531f00838920af33a73066a159b" - integrity sha512-aSOX/smauyTkP21Pf52pJ1O2LmNFJ5iHRIzEeTh0mwBeADO4GdG94cAWDILFA9rNblq/nK3EDh3+UyHHjplZ1A== +"@algolia/requester-browser-xhr@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz#90ac575946e0ab196cdd87593b3fed563a32a9af" + integrity sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ== dependencies: - "@algolia/requester-common" "4.17.0" + "@algolia/requester-common" "4.18.0" -"@algolia/requester-common@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.17.0.tgz#746020d2cbc829213e7cede8eef2182c7a71e32b" - integrity sha512-XJjmWFEUlHu0ijvcHBoixuXfEoiRUdyzQM6YwTuB8usJNIgShua8ouFlRWF8iCeag0vZZiUm4S2WCVBPkdxFgg== +"@algolia/requester-common@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.18.0.tgz#12984aa4b10679ffa863536ceeae33cdd0ee4d42" + integrity sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA== -"@algolia/requester-node-http@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.17.0.tgz#262276d94c25a4ec2128b1bdfb9471529528d8b9" - integrity sha512-bpb/wDA1aC6WxxM8v7TsFspB7yBN3nqCGs2H1OADolQR/hiAIjAxusbuMxVbRFOdaUvAIqioIIkWvZdpYNIn8w== +"@algolia/requester-node-http@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz#8046b141c784cc7778bcf51e8a7888cce463754b" + integrity sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ== dependencies: - "@algolia/requester-common" "4.17.0" + "@algolia/requester-common" "4.18.0" -"@algolia/transporter@4.17.0": - version "4.17.0" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.17.0.tgz#6aabdbc20c475d72d83c8e6519f1191f1a51fb37" - integrity sha512-6xL6H6fe+Fi0AEP3ziSgC+G04RK37iRb4uUUqVAH9WPYFI8g+LYFq6iv5HS8Cbuc5TTut+Bwj6G+dh/asdb9uA== +"@algolia/transporter@4.18.0": + version "4.18.0" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.18.0.tgz#18de645c20fc5703196b2ad4fec55e98c315a1d8" + integrity sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw== dependencies: - "@algolia/cache-common" "4.17.0" - "@algolia/logger-common" "4.17.0" - "@algolia/requester-common" "4.17.0" + "@algolia/cache-common" "4.18.0" + "@algolia/logger-common" "4.18.0" + "@algolia/requester-common" "4.18.0" "@ampproject/remapping@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.0.tgz#56c133824780de3174aed5ab6834f3026790154d" - integrity sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w== + version "2.2.1" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630" + integrity sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg== dependencies: - "@jridgewell/gen-mapping" "^0.1.0" + "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" + integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.5" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.20.5", "@babel/compat-data@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.21.4.tgz#457ffe647c480dff59c2be092fc3acf71195c87f" - integrity sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g== +"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" + integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== "@babel/core@7.12.9": version "7.12.9" @@ -173,88 +181,89 @@ source-map "^0.5.0" "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.21.3": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.21.4.tgz#c6dc73242507b8e2a27fd13a9c1814f9fa34a659" - integrity sha512-qt/YV149Jman/6AfmlxJ04LMIu8bMoyl3RB91yTFrxQmgbrSvQMy7cI8Q62FHx1t8wJ8B5fu0UDoLwHAhUo1QA== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" + integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helpers" "^7.21.0" - "@babel/parser" "^7.21.4" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.4" - "@babel/types" "^7.21.4" + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helpers" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" semver "^6.3.0" -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.21.4.tgz#64a94b7448989f421f919d5239ef553b37bb26bc" - integrity sha512-NieM3pVIYW2SwGzKoqfPrQsf4xGs9M9AIG3ThppsSRmO+m7eQhmI6amajKMUeIO37wFfsvnvcxQFx6x6iqxDnA== +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" + integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== dependencies: - "@babel/types" "^7.21.4" + "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz#eaa49f6f80d5a33f9a5dd2276e6d6e451be0a6bb" - integrity sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA== +"@babel/helper-annotate-as-pure@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882" + integrity sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz#acd4edfd7a566d1d51ea975dff38fd52906981bb" - integrity sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" + integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== dependencies: - "@babel/helper-explode-assignable-expression" "^7.18.6" - "@babel/types" "^7.18.9" + "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz#770cd1ce0889097ceacb99418ee6934ef0572656" - integrity sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg== +"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" + integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-validator-option" "^7.21.0" + "@babel/compat-data" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" browserslist "^4.21.3" lru-cache "^5.1.1" semver "^6.3.0" -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz#3a017163dc3c2ba7deb9a7950849a9586ea24c18" - integrity sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-member-expression-to-functions" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/helper-split-export-declaration" "^7.18.6" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.20.5": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz#40411a8ab134258ad2cf3a3d987ec6aa0723cee5" - integrity sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" +"@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" + integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + semver "^6.3.0" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" + integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" + semver "^6.3.0" -"@babel/helper-define-polyfill-provider@^0.3.3": - version "0.3.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz#8612e55be5d51f0cd1f36b4a5a83924e89884b7a" - integrity sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww== +"@babel/helper-define-polyfill-provider@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" + integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== dependencies: "@babel/helper-compilation-targets" "^7.17.7" "@babel/helper-plugin-utils" "^7.16.7" @@ -263,259 +272,177 @@ resolve "^1.14.2" semver "^6.1.2" -"@babel/helper-environment-visitor@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz#0c0cee9b35d2ca190478756865bb3528422f51be" - integrity sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg== +"@babel/helper-environment-visitor@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz#f06dd41b7c1f44e1f8da6c4055b41ab3a09a7e98" + integrity sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q== -"@babel/helper-explode-assignable-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz#41f8228ef0a6f1a036b8dfdfec7ce94f9a6bc096" - integrity sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg== +"@babel/helper-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz#ede300828905bb15e582c037162f99d5183af1be" + integrity sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ== dependencies: - "@babel/types" "^7.18.6" + "@babel/template" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz#d552829b10ea9f120969304023cd0645fa00b1b4" - integrity sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg== +"@babel/helper-hoist-variables@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb" + integrity sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw== dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" + "@babel/types" "^7.22.5" -"@babel/helper-hoist-variables@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz#d4d2c8fb4baeaa5c68b99cc8245c56554f926678" - integrity sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q== +"@babel/helper-member-expression-to-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz#0a7c56117cad3372fbf8d2fb4bf8f8d64a1e76b2" + integrity sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.20.7", "@babel/helper-member-expression-to-functions@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz#319c6a940431a133897148515877d2f3269c3ba5" - integrity sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q== +"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz#1a8f4c9f4027d23f520bd76b364d44434a72660c" + integrity sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg== dependencies: - "@babel/types" "^7.21.0" + "@babel/types" "^7.22.5" -"@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz#ac88b2f76093637489e718a90cec6cf8a9b029af" - integrity sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" + integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== dependencies: - "@babel/types" "^7.21.4" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz#160caafa4978ac8c00ac66636cb0fa37b024e2d2" - integrity sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-simple-access" "^7.20.2" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.2" - "@babel/types" "^7.21.2" - -"@babel/helper-optimise-call-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz#9369aa943ee7da47edab2cb4e838acf09d290ffe" - integrity sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA== +"@babel/helper-optimise-call-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e" + integrity sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw== dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" "@babel/helper-plugin-utils@7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz#d1b9000752b18d0877cff85a5c376ce5c3121629" - integrity sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ== - -"@babel/helper-remap-async-to-generator@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz#997458a0e3357080e54e1d79ec347f8a8cd28519" - integrity sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" - -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz#243ecd2724d2071532b2c8ad2f0f9f083bcae331" - integrity sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A== - dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-member-expression-to-functions" "^7.20.7" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/helper-simple-access@^7.20.2": - version "7.20.2" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz#0ab452687fe0c2cfb1e2b9e0015de07fc2d62dd9" - integrity sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA== - dependencies: - "@babel/types" "^7.20.2" - -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz#fbe4c52f60518cab8140d77101f0e63a8a230684" - integrity sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg== - dependencies: - "@babel/types" "^7.20.0" - -"@babel/helper-split-export-declaration@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz#7367949bc75b20c6d5a5d4a97bba2824ae8ef075" - integrity sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA== - dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.19.4": - version "7.19.4" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" - integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== - -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - version "7.19.1" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" - integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== - -"@babel/helper-validator-option@^7.18.6", "@babel/helper-validator-option@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz#8224c7e13ace4bafdc4004da2cf064ef42673180" - integrity sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ== - -"@babel/helper-wrap-function@^7.18.9": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz#75e2d84d499a0ab3b31c33bcfe59d6b8a45f62e3" - integrity sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q== - dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" - -"@babel/helpers@^7.12.5", "@babel/helpers@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.21.0.tgz#9dd184fb5599862037917cdc9eecb84577dc4e7e" - integrity sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA== - dependencies: - "@babel/template" "^7.20.7" - "@babel/traverse" "^7.21.0" - "@babel/types" "^7.21.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" + integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== + +"@babel/helper-remap-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" + integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-replace-supers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" + integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== + dependencies: + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helper-simple-access@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de" + integrity sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847" + integrity sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-split-export-declaration@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" + integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== + dependencies: + "@babel/types" "^7.22.5" + +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + +"@babel/helper-validator-identifier@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" + integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== + +"@babel/helper-validator-option@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" + integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== + +"@babel/helper-wrap-function@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" + integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== + dependencies: + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" + integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== + dependencies: + "@babel/template" "^7.22.5" + "@babel/traverse" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/highlight@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" + integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== + dependencies: + "@babel/helper-validator-identifier" "^7.22.5" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.20.7", "@babel/parser@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.21.4.tgz#94003fdfc520bbe2875d4ae557b43ddb6d880f17" - integrity sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw== - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz#da5b8f9a580acdfbe53494dba45ea389fb09a4d2" - integrity sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" + integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz#d9c85589258539a22a901033853101a6198d4ef1" - integrity sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ== +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz#87245a21cd69a73b0b81bcda98d443d6df08f05e" + integrity sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-proposal-optional-chaining" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-proposal-async-generator-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz#bfb7276d2d573cb67ba379984a2334e262ba5326" - integrity sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz#fef09f9499b1f1c930da8a0c419db42167d792ca" + integrity sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g== dependencies: - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" - "@babel/plugin-syntax-async-generators" "^7.8.4" - -"@babel/plugin-proposal-class-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz#b110f59741895f7ec21a6fff696ec46265c446a3" - integrity sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-class-static-block@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz#77bdd66fb7b605f3a61302d224bdfacf5547977d" - integrity sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - -"@babel/plugin-proposal-dynamic-import@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz#72bcf8d408799f547d759298c3c27c7e7faa4d94" - integrity sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz#5f7313ab348cdb19d590145f9247540e94761203" - integrity sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.9" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz#7e8788c1811c393aff762817e7dbf1ebd0c05f0b" - integrity sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-json-strings" "^7.8.3" - -"@babel/plugin-proposal-logical-assignment-operators@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz#dfbcaa8f7b4d37b51e8bfb46d94a5aea2bb89d83" - integrity sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz#fdd940a99a740e577d6c753ab6fbb43fdb9467e1" - integrity sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - -"@babel/plugin-proposal-numeric-separator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz#899b14fbafe87f053d2c5ff05b36029c62e13c75" - integrity sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" "@babel/plugin-proposal-object-rest-spread@7.12.1": version "7.12.1" @@ -526,53 +453,12 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.12.1" -"@babel/plugin-proposal-object-rest-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz#aa662940ef425779c75534a5c41e9d936edc390a" - integrity sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg== - dependencies: - "@babel/compat-data" "^7.20.5" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.20.7" - -"@babel/plugin-proposal-optional-catch-binding@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz#f9400d0e6a3ea93ba9ef70b09e72dd6da638a2cb" - integrity sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw== - dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - -"@babel/plugin-proposal-optional-chaining@^7.20.7", "@babel/plugin-proposal-optional-chaining@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz#886f5c8978deb7d30f678b2e24346b287234d3ea" - integrity sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - -"@babel/plugin-proposal-private-methods@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz#5209de7d213457548a98436fa2882f52f4be6bea" - integrity sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-proposal-private-property-in-object@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz#19496bd9883dd83c23c7d7fc45dcd9ad02dfa1dc" - integrity sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-unicode-property-regex@^7.18.6", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== @@ -615,12 +501,26 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.3" -"@babel/plugin-syntax-import-assertions@^7.20.0": - version "7.20.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz#bb50e0d4bea0957235390641209394e87bdb9cc4" - integrity sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ== +"@babel/plugin-syntax-import-assertions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98" + integrity sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg== dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-attributes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb" + integrity sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings@^7.8.3": version "7.8.3" @@ -636,12 +536,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-jsx@^7.18.6", "@babel/plugin-syntax-jsx@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz#f264ed7bf40ffc9ec239edabc17a50c4f5b6fea2" - integrity sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ== +"@babel/plugin-syntax-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz#a6b68e84fb76e759fc3b93e901876ffabbe1d918" + integrity sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" @@ -699,358 +599,491 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.20.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.21.4.tgz#2751948e9b7c6d771a8efa59340c15d4a2891ff8" - integrity sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA== +"@babel/plugin-syntax-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz#aac8d383b062c5072c647a31ef990c1d0af90272" + integrity sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-arrow-functions@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz#bea332b0e8b2dab3dafe55a163d8227531ab0551" - integrity sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ== +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-async-to-generator@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz#dfee18623c8cb31deb796aa3ca84dda9cea94354" - integrity sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q== +"@babel/plugin-transform-arrow-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958" + integrity sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw== dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz#9187bf4ba302635b9d70d986ad70f038726216a8" - integrity sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ== +"@babel/plugin-transform-async-generator-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" + integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/plugin-syntax-async-generators" "^7.8.4" + +"@babel/plugin-transform-async-to-generator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775" + integrity sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz#e737b91037e5186ee16b76e7ae093358a5634f02" - integrity sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - -"@babel/plugin-transform-classes@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz#f469d0b07a4c5a7dbb21afad9e27e57b47031665" - integrity sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" +"@babel/plugin-transform-block-scoped-functions@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024" + integrity sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-block-scoping@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" + integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77" + integrity sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-class-static-block@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz#3e40c46f048403472d6f4183116d5e46b1bff5ba" + integrity sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + +"@babel/plugin-transform-classes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" + integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz#704cc2fd155d1c996551db8276d55b9d46e4d0aa" - integrity sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ== +"@babel/plugin-transform-computed-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869" + integrity sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/template" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz#73b46d0fd11cd6ef57dea8a381b1215f4959d401" - integrity sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA== +"@babel/plugin-transform-destructuring@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" + integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz#b286b3e7aae6c7b861e45bed0a2fafd6b1a4fef8" - integrity sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg== +"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" + integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz#687f15ee3cdad6d85191eb2a372c4528eaa0ae0e" - integrity sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw== +"@babel/plugin-transform-duplicate-keys@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285" + integrity sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz#421c705f4521888c65e91fdd1af951bfefd4dacd" - integrity sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw== +"@babel/plugin-transform-dynamic-import@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz#d6908a8916a810468c4edff73b5b75bda6ad393e" + integrity sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-for-of@^7.21.0": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz#964108c9988de1a60b4be2354a7d7e245f36e86e" - integrity sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ== +"@babel/plugin-transform-exponentiation-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a" + integrity sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz#cc354f8234e62968946c61a46d6365440fc764e0" - integrity sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ== +"@babel/plugin-transform-export-namespace-from@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz#57c41cb1d0613d22f548fddd8b288eedb9973a5b" + integrity sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg== dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" -"@babel/plugin-transform-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz#72796fdbef80e56fba3c6a699d54f0de557444bc" - integrity sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg== +"@babel/plugin-transform-for-of@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz#ab1b8a200a8f990137aff9a084f8de4099ab173f" + integrity sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz#ac9fdc1a118620ac49b7e7a5d2dc177a1bfee88e" - integrity sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA== +"@babel/plugin-transform-function-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143" + integrity sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz#3daccca8e4cc309f03c3a0c4b41dc4b26f55214a" - integrity sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g== +"@babel/plugin-transform-json-strings@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz#14b64352fdf7e1f737eed68de1a1468bd2a77ec0" + integrity sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A== dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-modules-commonjs@^7.21.2": - version "7.21.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz#6ff5070e71e3192ef2b7e39820a06fb78e3058e7" - integrity sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA== +"@babel/plugin-transform-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920" + integrity sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g== dependencies: - "@babel/helper-module-transforms" "^7.21.2" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-simple-access" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.20.11": - version "7.20.11" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz#467ec6bba6b6a50634eea61c9c232654d8a4696e" - integrity sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw== +"@babel/plugin-transform-logical-assignment-operators@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz#66ae5f068fd5a9a5dc570df16f56c2a8462a9d6c" + integrity sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA== dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-modules-umd@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz#81d3832d6034b75b54e62821ba58f28ed0aab4b9" - integrity sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ== +"@babel/plugin-transform-member-expression-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def" + integrity sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew== dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz#626298dd62ea51d452c3be58b285d23195ba69a8" - integrity sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA== +"@babel/plugin-transform-modules-amd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz#4e045f55dcf98afd00f85691a68fc0780704f526" + integrity sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.20.5" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz#d128f376ae200477f37c4ddfcc722a8a1b3246a8" - integrity sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw== +"@babel/plugin-transform-modules-commonjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz#7d9875908d19b8c0536085af7b053fd5bd651bfa" + integrity sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-object-super@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz#fb3c6ccdd15939b6ff7939944b51971ddc35912c" - integrity sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA== +"@babel/plugin-transform-modules-systemjs@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz#18c31410b5e579a0092638f95c896c2a98a5d496" + integrity sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" -"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.20.7", "@babel/plugin-transform-parameters@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz#18fc4e797cf6d6d972cb8c411dbe8a809fa157db" - integrity sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ== +"@babel/plugin-transform-modules-umd@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98" + integrity sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-module-transforms" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-property-literals@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz#e22498903a483448e94e032e9bbb9c5ccbfc93a3" - integrity sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg== +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f" + integrity sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-new-target@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d" + integrity sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz#f8872c65776e0b552e0849d7596cddd416c3e381" + integrity sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + +"@babel/plugin-transform-numeric-separator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz#57226a2ed9e512b9b446517ab6fa2d17abb83f58" + integrity sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-transform-object-rest-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz#9686dc3447df4753b0b2a2fae7e8bc33cdc1f2e1" + integrity sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-transform-parameters" "^7.22.5" + +"@babel/plugin-transform-object-super@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c" + integrity sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.5" + +"@babel/plugin-transform-optional-catch-binding@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz#842080be3076703be0eaf32ead6ac8174edee333" + integrity sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + +"@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" + integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + +"@babel/plugin-transform-parameters@^7.12.1", "@babel/plugin-transform-parameters@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz#c3542dd3c39b42c8069936e48717a8d179d63a18" + integrity sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-methods@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722" + integrity sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-private-property-in-object@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz#07a77f28cbb251546a43d175a1dda4cf3ef83e32" + integrity sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + +"@babel/plugin-transform-property-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766" + integrity sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ== + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-constant-elements@^7.18.12", "@babel/plugin-transform-react-constant-elements@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.21.3.tgz#b32a5556100d424b25e388dd689050d78396884d" - integrity sha512-4DVcFeWe/yDYBLp0kBmOGFJ6N2UYg7coGid1gdxb4co62dy/xISDMaYBXBVXEDhfgMk7qkbcYiGtwd5Q/hwDDQ== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.22.5.tgz#6dfa7c1c37f7d7279e417ceddf5a04abb8bb9c29" + integrity sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-display-name@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz#8b1125f919ef36ebdfff061d664e266c666b9415" - integrity sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA== +"@babel/plugin-transform-react-display-name@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.22.5.tgz#3c4326f9fce31c7968d6cb9debcaf32d9e279a2b" + integrity sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-jsx-development@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz#dbe5c972811e49c7405b630e4d0d2e1380c0ddc5" - integrity sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA== +"@babel/plugin-transform-react-jsx-development@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz#e716b6edbef972a92165cd69d92f1255f7e73e87" + integrity sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A== dependencies: - "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz#656b42c2fdea0a6d8762075d58ef9d4e3c4ab8a2" - integrity sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg== +"@babel/plugin-transform-react-jsx@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.5.tgz#932c291eb6dd1153359e2a90cb5e557dcf068416" + integrity sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-jsx" "^7.18.6" - "@babel/types" "^7.21.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.5" -"@babel/plugin-transform-react-pure-annotations@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz#561af267f19f3e5d59291f9950fd7b9663d0d844" - integrity sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ== +"@babel/plugin-transform-react-pure-annotations@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.22.5.tgz#1f58363eef6626d6fa517b95ac66fe94685e32c0" + integrity sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.20.5": - version "7.20.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz#57cda588c7ffb7f4f8483cc83bdcea02a907f04d" - integrity sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ== +"@babel/plugin-transform-regenerator@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" + integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" regenerator-transform "^0.15.1" -"@babel/plugin-transform-reserved-words@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz#b1abd8ebf8edaa5f7fe6bbb8d2133d23b6a6f76a" - integrity sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA== +"@babel/plugin-transform-reserved-words@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb" + integrity sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.18.6": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz#2e1da21ca597a7d01fc96b699b21d8d2023191aa" - integrity sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA== - dependencies: - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-plugin-utils" "^7.20.2" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b" + integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + dependencies: + "@babel/helper-module-imports" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" semver "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz#6d6df7983d67b195289be24909e3f12a8f664dc9" - integrity sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw== +"@babel/plugin-transform-shorthand-properties@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624" + integrity sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz#c2d83e0b99d3bf83e07b11995ee24bf7ca09401e" - integrity sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw== +"@babel/plugin-transform-spread@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b" + integrity sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz#c6706eb2b1524028e317720339583ad0f444adcc" - integrity sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q== +"@babel/plugin-transform-sticky-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa" + integrity sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz#04ec6f10acdaa81846689d63fae117dd9c243a5e" - integrity sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA== +"@babel/plugin-transform-template-literals@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff" + integrity sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - version "7.18.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz#c8cea68263e45addcd6afc9091429f80925762c0" - integrity sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw== +"@babel/plugin-transform-typeof-symbol@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34" + integrity sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typescript@^7.21.3": - version "7.21.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.3.tgz#316c5be579856ea890a57ebc5116c5d064658f2b" - integrity sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw== +"@babel/plugin-transform-typescript@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d" + integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA== dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.21.0" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/plugin-syntax-typescript" "^7.20.0" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-typescript" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.18.10": - version "7.18.10" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz#1ecfb0eda83d09bbcb77c09970c2dd55832aa246" - integrity sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ== +"@babel/plugin-transform-unicode-escapes@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" + integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-unicode-regex@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz#194317225d8c201bbae103364ffe9e2cea36cdca" - integrity sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA== +"@babel/plugin-transform-unicode-property-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81" + integrity sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183" + integrity sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91" + integrity sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.20.2": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.21.4.tgz#a952482e634a8dd8271a3fe5459a16eb10739c58" - integrity sha512-2W57zHs2yDLm6GD5ZpvNn71lZ0B/iypSdIeq25OurDKji6AdzV07qp4s3n1/x5BqtiGaTrPN3nerlSCaC5qNTw== - dependencies: - "@babel/compat-data" "^7.21.4" - "@babel/helper-compilation-targets" "^7.21.4" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.20.7" - "@babel/plugin-proposal-async-generator-functions" "^7.20.7" - "@babel/plugin-proposal-class-properties" "^7.18.6" - "@babel/plugin-proposal-class-static-block" "^7.21.0" - "@babel/plugin-proposal-dynamic-import" "^7.18.6" - "@babel/plugin-proposal-export-namespace-from" "^7.18.9" - "@babel/plugin-proposal-json-strings" "^7.18.6" - "@babel/plugin-proposal-logical-assignment-operators" "^7.20.7" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.18.6" - "@babel/plugin-proposal-numeric-separator" "^7.18.6" - "@babel/plugin-proposal-object-rest-spread" "^7.20.7" - "@babel/plugin-proposal-optional-catch-binding" "^7.18.6" - "@babel/plugin-proposal-optional-chaining" "^7.21.0" - "@babel/plugin-proposal-private-methods" "^7.18.6" - "@babel/plugin-proposal-private-property-in-object" "^7.21.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.18.6" + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" + integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + dependencies: + "@babel/compat-data" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.5" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.20.0" + "@babel/plugin-syntax-import-assertions" "^7.22.5" + "@babel/plugin-syntax-import-attributes" "^7.22.5" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" @@ -1060,44 +1093,61 @@ "@babel/plugin-syntax-optional-chaining" "^7.8.3" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" - "@babel/plugin-transform-arrow-functions" "^7.20.7" - "@babel/plugin-transform-async-to-generator" "^7.20.7" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.21.0" - "@babel/plugin-transform-classes" "^7.21.0" - "@babel/plugin-transform-computed-properties" "^7.20.7" - "@babel/plugin-transform-destructuring" "^7.21.3" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-for-of" "^7.21.0" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.20.11" - "@babel/plugin-transform-modules-commonjs" "^7.21.2" - "@babel/plugin-transform-modules-systemjs" "^7.20.11" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.20.5" - "@babel/plugin-transform-new-target" "^7.18.6" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-parameters" "^7.21.3" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.20.5" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.20.7" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.18.10" - "@babel/plugin-transform-unicode-regex" "^7.18.6" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.5" + "@babel/plugin-transform-async-to-generator" "^7.22.5" + "@babel/plugin-transform-block-scoped-functions" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.5" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-class-static-block" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.5" + "@babel/plugin-transform-computed-properties" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.5" + "@babel/plugin-transform-dotall-regex" "^7.22.5" + "@babel/plugin-transform-duplicate-keys" "^7.22.5" + "@babel/plugin-transform-dynamic-import" "^7.22.5" + "@babel/plugin-transform-exponentiation-operator" "^7.22.5" + "@babel/plugin-transform-export-namespace-from" "^7.22.5" + "@babel/plugin-transform-for-of" "^7.22.5" + "@babel/plugin-transform-function-name" "^7.22.5" + "@babel/plugin-transform-json-strings" "^7.22.5" + "@babel/plugin-transform-literals" "^7.22.5" + "@babel/plugin-transform-logical-assignment-operators" "^7.22.5" + "@babel/plugin-transform-member-expression-literals" "^7.22.5" + "@babel/plugin-transform-modules-amd" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-modules-systemjs" "^7.22.5" + "@babel/plugin-transform-modules-umd" "^7.22.5" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.22.5" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.5" + "@babel/plugin-transform-numeric-separator" "^7.22.5" + "@babel/plugin-transform-object-rest-spread" "^7.22.5" + "@babel/plugin-transform-object-super" "^7.22.5" + "@babel/plugin-transform-optional-catch-binding" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-parameters" "^7.22.5" + "@babel/plugin-transform-private-methods" "^7.22.5" + "@babel/plugin-transform-private-property-in-object" "^7.22.5" + "@babel/plugin-transform-property-literals" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.5" + "@babel/plugin-transform-reserved-words" "^7.22.5" + "@babel/plugin-transform-shorthand-properties" "^7.22.5" + "@babel/plugin-transform-spread" "^7.22.5" + "@babel/plugin-transform-sticky-regex" "^7.22.5" + "@babel/plugin-transform-template-literals" "^7.22.5" + "@babel/plugin-transform-typeof-symbol" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.5" + "@babel/plugin-transform-unicode-property-regex" "^7.22.5" + "@babel/plugin-transform-unicode-regex" "^7.22.5" + "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.21.4" - babel-plugin-polyfill-corejs2 "^0.3.3" - babel-plugin-polyfill-corejs3 "^0.6.0" - babel-plugin-polyfill-regenerator "^0.4.1" - core-js-compat "^3.25.1" + "@babel/types" "^7.22.5" + babel-plugin-polyfill-corejs2 "^0.4.3" + babel-plugin-polyfill-corejs3 "^0.8.1" + babel-plugin-polyfill-regenerator "^0.5.0" + core-js-compat "^3.30.2" semver "^6.3.0" "@babel/preset-modules@^0.1.5": @@ -1112,27 +1162,27 @@ esutils "^2.0.2" "@babel/preset-react@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.18.6.tgz#979f76d6277048dc19094c217b507f3ad517dd2d" - integrity sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.22.5.tgz#c4d6058fbf80bccad02dd8c313a9aaa67e3c3dd6" + integrity sha512-M+Is3WikOpEJHgR385HbuCITPTaPRaNkibTEa9oiofmJvIsrceb4yp9RL9Kb+TE8LznmeyZqpP+Lopwcx59xPQ== dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-validator-option" "^7.18.6" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.18.6" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-transform-react-display-name" "^7.22.5" + "@babel/plugin-transform-react-jsx" "^7.22.5" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.22.5" "@babel/preset-typescript@^7.18.6", "@babel/preset-typescript@^7.21.0": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.21.4.tgz#b913ac8e6aa8932e47c21b01b4368d8aa239a529" - integrity sha512-sMLNWY37TCdRH/bJ6ZeeOH1nPuanED7Ai9Y/vH31IPqalioJ6ZNFUWONsakhv4r4n+I6gm5lmoE0olkgib/j/A== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.22.5.tgz#16367d8b01d640e9a507577ed4ee54e0101e51c8" + integrity sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ== dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-syntax-jsx" "^7.21.4" - "@babel/plugin-transform-modules-commonjs" "^7.21.2" - "@babel/plugin-transform-typescript" "^7.21.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/plugin-transform-modules-commonjs" "^7.22.5" + "@babel/plugin-transform-typescript" "^7.22.5" "@babel/regjsgen@^0.8.0": version "0.8.0" @@ -1140,55 +1190,55 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.18.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz#6e4939d9d9789ff63e2dc58e88f13a3913a24eba" - integrity sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.5.tgz#bbc769b48edb2bdfd404b65ad1fc3952bf33e3c2" + integrity sha512-TNPDN6aBFaUox2Lu+H/Y1dKKQgr4ucz/FGyCz67RVYLsBpVpUFf1dDngzg+Od8aqbrqwyztkaZjtWCZEUOT8zA== dependencies: - core-js-pure "^3.25.1" + core-js-pure "^3.30.2" regenerator-runtime "^0.13.11" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" + integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== dependencies: regenerator-runtime "^0.13.11" -"@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.20.7": - version "7.20.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.20.7.tgz#a15090c2839a83b02aa996c0b4994005841fd5a8" - integrity sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw== - dependencies: - "@babel/code-frame" "^7.18.6" - "@babel/parser" "^7.20.7" - "@babel/types" "^7.20.7" - -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.20.5", "@babel/traverse@^7.20.7", "@babel/traverse@^7.21.0", "@babel/traverse@^7.21.2", "@babel/traverse@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.21.4.tgz#a836aca7b116634e97a6ed99976236b3282c9d36" - integrity sha512-eyKrRHKdyZxqDm+fV1iqL9UAHMoIg0nDaGqfIOd8rKH17m5snv7Gn4qgjBoFfLz9APvjFU/ICT00NVCv1Epp8Q== - dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/generator" "^7.21.4" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/parser" "^7.21.4" - "@babel/types" "^7.21.4" +"@babel/template@^7.12.7", "@babel/template@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.22.5.tgz#0c8c4d944509875849bd0344ff0050756eefc6ec" + integrity sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" + +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" + integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== + dependencies: + "@babel/code-frame" "^7.22.5" + "@babel/generator" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/parser" "^7.22.5" + "@babel/types" "^7.22.5" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.7", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.2", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.2", "@babel/types@^7.21.3", "@babel/types@^7.21.4", "@babel/types@^7.4.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.21.4.tgz#2d5d6bb7908699b3b416409ffd3b5daa25b030d4" - integrity sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA== +"@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.21.3", "@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" + integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== dependencies: - "@babel/helper-string-parser" "^7.19.4" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" -"@braintree/sanitize-url@^6.0.0": +"@braintree/sanitize-url@^6.0.2": version "6.0.2" resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== @@ -1203,19 +1253,19 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== -"@docsearch/css@3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.3.3.tgz#f9346c9e24602218341f51b8ba91eb9109add434" - integrity sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg== +"@docsearch/css@3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@docsearch/css/-/css-3.5.1.tgz#4adf9884735bbfea621c3716e80ea97baa419b73" + integrity sha512-2Pu9HDg/uP/IT10rbQ+4OrTQuxIWdKVUEdcw9/w7kZJv9NeHS6skJx1xuRiFyoGKwAzcHXnLp7csE99sj+O1YA== "@docsearch/react@^3.1.1": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.3.3.tgz#907b6936a565f880b4c0892624b4f7a9f132d298" - integrity sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q== + version "3.5.1" + resolved "https://registry.yarnpkg.com/@docsearch/react/-/react-3.5.1.tgz#35f4a75f948211d8bb6830d2147c575f96a85274" + integrity sha512-t5mEODdLzZq4PTFAm/dvqcvZFdPDMdfPE5rJS5SC8OUq9mPzxEy6b+9THIqNM9P0ocCb4UC5jqBrxKclnuIbzQ== dependencies: - "@algolia/autocomplete-core" "1.7.4" - "@algolia/autocomplete-preset-algolia" "1.7.4" - "@docsearch/css" "3.3.3" + "@algolia/autocomplete-core" "1.9.3" + "@algolia/autocomplete-preset-algolia" "1.9.3" + "@docsearch/css" "3.5.1" algoliasearch "^4.0.0" "@docusaurus/core@2.4.1", "@docusaurus/core@^2.4.1": @@ -1660,18 +1710,10 @@ "@types/yargs" "^17.0.8" chalk "^4.0.0" -"@jridgewell/gen-mapping@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz#e5d2e450306a9491e3bd77e323e38d7aff315996" - integrity sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w== - dependencies: - "@jridgewell/set-array" "^1.0.0" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz#c1aedc61e853f2bb9f5dfe6d4442d3b565b253b9" - integrity sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A== + version "0.3.3" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" + integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== dependencies: "@jridgewell/set-array" "^1.0.1" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -1682,39 +1724,34 @@ resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== -"@jridgewell/set-array@^1.0.0", "@jridgewell/set-array@^1.0.1": +"@jridgewell/set-array@^1.0.1": version "1.1.2" resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== -"@jridgewell/source-map@^0.3.2": - version "0.3.2" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.2.tgz#f45351aaed4527a298512ec72f81040c998580fb" - integrity sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" +"@jridgewell/source-map@^0.3.3": + version "0.3.4" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.4.tgz#856a142864530d4059dda415659b48d37db2d556" + integrity sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw== -"@jridgewell/sourcemap-codec@1.4.14", "@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.17" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz#793041277af9073b0951a7fe0f0d8c4c98c36985" - integrity sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g== + version "0.3.18" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" + integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== dependencies: "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@khanacademy/simple-markdown@^0.8.6": - version "0.8.6" - resolved "https://registry.yarnpkg.com/@khanacademy/simple-markdown/-/simple-markdown-0.8.6.tgz#9c9aef1f5ce2ce60292d13849165965a57c26f25" - integrity sha512-mAUlR9lchzfqunR89pFvNI51jQKsMpJeWYsYWw0DQcUXczn/T/V6510utgvm7X0N3zN87j1SvuKk8cMbl9IAFw== - dependencies: - "@types/react" ">=16.0.0" - "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" resolved "https://registry.yarnpkg.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz#b2ac626d6cb9c8718ab459166d4bb405b8ffa78b" @@ -1844,12 +1881,22 @@ resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-7.0.0.tgz#80856c1b7a3b7422d232f6e079f0beb90c4a13e9" integrity sha512-khWbXesWIP9v8HuKCl2NU2HNAyqpSQ/vkIl36Nbn4HIwEYSRWL0H7Gs6idJdha2DkpFDWlsqMELvoCE8lfFY6Q== -"@svgr/babel-plugin-remove-jsx-attribute@*", "@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": +"@svgr/babel-plugin-remove-jsx-attribute@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-8.0.0.tgz#69177f7937233caca3a1afb051906698f2f59186" + integrity sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA== + +"@svgr/babel-plugin-remove-jsx-attribute@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-7.0.0.tgz#91da77a009dc38e8d30da45d9b62ef8736f2d90a" integrity sha512-iiZaIvb3H/c7d3TH2HBeK91uI2rMhZNwnsIrvd7ZwGLkFw6mmunOCoVnjdYua662MqGFxlN9xTq4fv9hgR4VXQ== -"@svgr/babel-plugin-remove-jsx-empty-expression@*", "@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": +"@svgr/babel-plugin-remove-jsx-empty-expression@*": + version "8.0.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-8.0.0.tgz#c2c48104cfd7dcd557f373b70a56e9e3bdae1d44" + integrity sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA== + +"@svgr/babel-plugin-remove-jsx-empty-expression@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-7.0.0.tgz#5154ff1213509e36ab315974c8c2fd48dafb827b" integrity sha512-sQQmyo+qegBx8DfFc04PFmIO1FP1MHI1/QEpzcIcclo5OAISsOJPW76ZIs0bDyO/DBSJEa/tDa1W26pVtt0FRw== @@ -2063,9 +2110,9 @@ "@types/node" "*" "@types/connect-history-api-fallback@^1.3.5": - version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae" - integrity sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#9fd20b3974bdc2bcd4ac6567e2e0f6885cb2cf41" + integrity sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig== dependencies: "@types/express-serve-static-core" "*" "@types/node" "*" @@ -2077,6 +2124,13 @@ dependencies: "@types/node" "*" +"@types/debug@^4.0.0": + version "4.1.8" + resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" + integrity sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ== + dependencies: + "@types/ms" "*" + "@types/eslint-scope@^3.7.3": version "3.7.4" resolved "https://registry.yarnpkg.com/@types/eslint-scope/-/eslint-scope-3.7.4.tgz#37fc1223f0786c39627068a12e94d6e6fc61de16" @@ -2086,31 +2140,27 @@ "@types/estree" "*" "@types/eslint@*": - version "8.37.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.37.0.tgz#29cebc6c2a3ac7fea7113207bf5a828fdf4d7ef1" - integrity sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ== + version "8.40.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d" + integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ== dependencies: "@types/estree" "*" "@types/json-schema" "*" "@types/estree@*", "@types/estree@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.0.tgz#5fb2e536c1ae9bf35366eed879e827fa59ca41c2" - integrity sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ== - -"@types/estree@^0.0.51": - version "0.0.51" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.51.tgz#cfd70924a25a3fd32b218e5e420e6897e1ac4f40" - integrity sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ== + version "1.0.1" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" + integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== "@types/express-serve-static-core@*", "@types/express-serve-static-core@^4.17.33": - version "4.17.33" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz#de35d30a9d637dc1450ad18dd583d75d5733d543" - integrity sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA== + version "4.17.35" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz#c95dd4424f0d32e525d23812aa8ab8e4d3906c4f" + integrity sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg== dependencies: "@types/node" "*" "@types/qs" "*" "@types/range-parser" "*" + "@types/send" "*" "@types/express@*", "@types/express@^4.17.13": version "4.17.17" @@ -2139,10 +2189,15 @@ resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz#4fc33a00c1d0c16987b1a20cf92d20614c55ac35" integrity sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg== +"@types/http-errors@*": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.1.tgz#20172f9578b225f6c7da63446f56d4ce108d5a65" + integrity sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ== + "@types/http-proxy@^1.17.8": - version "1.17.10" - resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.10.tgz#e576c8e4a0cc5c6a138819025a88e167ebb38d6c" - integrity sha512-Qs5aULi+zV1bwKAg5z1PWnDXWmsn+LxIvUGv6E2+OOMYhclZMO+OXd9pYVf2gLykf2I7IV2u7oTHwChPNsvJ7g== + version "1.17.11" + resolved "https://registry.yarnpkg.com/@types/http-proxy/-/http-proxy-1.17.11.tgz#0ca21949a5588d55ac2b659b69035c84bd5da293" + integrity sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA== dependencies: "@types/node" "*" @@ -2166,9 +2221,9 @@ "@types/istanbul-lib-report" "*" "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": - version "7.0.11" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.11.tgz#d421b6c527a3037f7c84433fd2c4229e016863d3" - integrity sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ== + version "7.0.12" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.12.tgz#d70faba7039d5fca54c83c7dbab41051d2b6f6cb" + integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/mdast@^3.0.0": version "3.0.11" @@ -2182,15 +2237,25 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-3.0.1.tgz#5f8f2bca0a5863cb69bc0b0acd88c96cb1d4ae10" integrity sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA== +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== + "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== +"@types/ms@*": + version "0.7.31" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.31.tgz#31b7ca6407128a3d2bbc27fe2d21b345397f6197" + integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== + "@types/node@*": - version "18.15.11" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.11.tgz#b3b790f09cb1696cffcec605de025b088fa4225f" - integrity sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q== + version "20.3.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6" + integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw== "@types/node@^17.0.5": version "17.0.45" @@ -2223,13 +2288,13 @@ integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/react-router-config@*", "@types/react-router-config@^5.0.6": - version "5.0.6" - resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.6.tgz#87c5c57e72d241db900d9734512c50ccec062451" - integrity sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg== + version "5.0.7" + resolved "https://registry.yarnpkg.com/@types/react-router-config/-/react-router-config-5.0.7.tgz#36207a3fe08b271abee62b26993ee932d13cbb02" + integrity sha512-pFFVXUIydHlcJP6wJm7sDii5mD/bCmmAY0wQzq+M+uX7bqS95AQqHZWP1iNMKrWVQSuHIzj5qi9BvrtLX2/T4w== dependencies: "@types/history" "^4.7.11" "@types/react" "*" - "@types/react-router" "*" + "@types/react-router" "^5.1.0" "@types/react-router-dom@*": version "5.3.3" @@ -2240,7 +2305,7 @@ "@types/react" "*" "@types/react-router" "*" -"@types/react-router@*": +"@types/react-router@*", "@types/react-router@^5.1.0": version "5.1.20" resolved "https://registry.yarnpkg.com/@types/react-router/-/react-router-5.1.20.tgz#88eccaa122a82405ef3efbcaaa5dcdd9f021387c" integrity sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q== @@ -2248,10 +2313,10 @@ "@types/history" "^4.7.11" "@types/react" "*" -"@types/react@*", "@types/react@>=16.0.0": - version "18.0.33" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.33.tgz#a1575160cb4376787c2f5fe0312302f824baa61e" - integrity sha512-sHxzVxeanvQyQ1lr8NSHaj0kDzcNiGpILEVt69g9S31/7PfMvNCKLKcsHw4lYKjs3cGNJjXSP4mYzX43QlnjNA== +"@types/react@*": + version "18.2.14" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" + integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2274,6 +2339,14 @@ resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== +"@types/send@*": + version "0.17.1" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.1.tgz#ed4932b8a2a805f1fe362a70f4e62d0ac994e301" + integrity sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/serve-index@^1.9.1": version "1.9.1" resolved "https://registry.yarnpkg.com/@types/serve-index/-/serve-index-1.9.1.tgz#1b5e85370a192c01ec6cec4735cf2917337a6278" @@ -2282,10 +2355,11 @@ "@types/express" "*" "@types/serve-static@*", "@types/serve-static@^1.13.10": - version "1.15.1" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.1.tgz#86b1753f0be4f9a1bee68d459fcda5be4ea52b5d" - integrity sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ== + version "1.15.2" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.2.tgz#3e5419ecd1e40e7405d34093f10befb43f63381a" + integrity sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw== dependencies: + "@types/http-errors" "*" "@types/mime" "*" "@types/node" "*" @@ -2301,10 +2375,10 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== -"@types/ws@^8.5.1": - version "8.5.4" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.4.tgz#bb10e36116d6e570dd943735f86c933c1587b8a5" - integrity sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg== +"@types/ws@^8.5.5": + version "8.5.5" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.5.tgz#af587964aa06682702ee6dcbc7be41a80e4b28eb" + integrity sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg== dependencies: "@types/node" "*" @@ -2320,125 +2394,125 @@ dependencies: "@types/yargs-parser" "*" -"@webassemblyjs/ast@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" - integrity sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw== +"@webassemblyjs/ast@1.11.6", "@webassemblyjs/ast@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.6.tgz#db046555d3c413f8966ca50a95176a0e2c642e24" + integrity sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q== dependencies: - "@webassemblyjs/helper-numbers" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" + "@webassemblyjs/helper-numbers" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" -"@webassemblyjs/floating-point-hex-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz#f6c61a705f0fd7a6aecaa4e8198f23d9dc179e4f" - integrity sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ== +"@webassemblyjs/floating-point-hex-parser@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz#dacbcb95aff135c8260f77fa3b4c5fea600a6431" + integrity sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw== -"@webassemblyjs/helper-api-error@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz#1a63192d8788e5c012800ba6a7a46c705288fd16" - integrity sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg== +"@webassemblyjs/helper-api-error@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz#6132f68c4acd59dcd141c44b18cbebbd9f2fa768" + integrity sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q== -"@webassemblyjs/helper-buffer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz#832a900eb444884cde9a7cad467f81500f5e5ab5" - integrity sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA== +"@webassemblyjs/helper-buffer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz#b66d73c43e296fd5e88006f18524feb0f2c7c093" + integrity sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA== -"@webassemblyjs/helper-numbers@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz#64d81da219fbbba1e3bd1bfc74f6e8c4e10a62ae" - integrity sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ== +"@webassemblyjs/helper-numbers@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz#cbce5e7e0c1bd32cf4905ae444ef64cea919f1b5" + integrity sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g== dependencies: - "@webassemblyjs/floating-point-hex-parser" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" + "@webassemblyjs/floating-point-hex-parser" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" "@xtuc/long" "4.2.2" -"@webassemblyjs/helper-wasm-bytecode@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz#f328241e41e7b199d0b20c18e88429c4433295e1" - integrity sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q== +"@webassemblyjs/helper-wasm-bytecode@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz#bb2ebdb3b83aa26d9baad4c46d4315283acd51e9" + integrity sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA== -"@webassemblyjs/helper-wasm-section@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz#21ee065a7b635f319e738f0dd73bfbda281c097a" - integrity sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg== +"@webassemblyjs/helper-wasm-section@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz#ff97f3863c55ee7f580fd5c41a381e9def4aa577" + integrity sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g== dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" -"@webassemblyjs/ieee754@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz#963929e9bbd05709e7e12243a099180812992614" - integrity sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ== +"@webassemblyjs/ieee754@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz#bb665c91d0b14fffceb0e38298c329af043c6e3a" + integrity sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.1.tgz#ce814b45574e93d76bae1fb2644ab9cdd9527aa5" - integrity sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw== +"@webassemblyjs/leb128@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.11.6.tgz#70e60e5e82f9ac81118bc25381a0b283893240d7" + integrity sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.1.tgz#d1f8b764369e7c6e6bae350e854dec9a59f0a3ff" - integrity sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ== - -"@webassemblyjs/wasm-edit@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz#ad206ebf4bf95a058ce9880a8c092c5dec8193d6" - integrity sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/helper-wasm-section" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-opt" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - "@webassemblyjs/wast-printer" "1.11.1" - -"@webassemblyjs/wasm-gen@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz#86c5ea304849759b7d88c47a32f4f039ae3c8f76" - integrity sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wasm-opt@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz#657b4c2202f4cf3b345f8a4c6461c8c2418985f2" - integrity sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-buffer" "1.11.1" - "@webassemblyjs/wasm-gen" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" - -"@webassemblyjs/wasm-parser@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz#86ca734534f417e9bd3c67c7a1c75d8be41fb199" - integrity sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA== - dependencies: - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/helper-api-error" "1.11.1" - "@webassemblyjs/helper-wasm-bytecode" "1.11.1" - "@webassemblyjs/ieee754" "1.11.1" - "@webassemblyjs/leb128" "1.11.1" - "@webassemblyjs/utf8" "1.11.1" - -"@webassemblyjs/wast-printer@1.11.1": - version "1.11.1" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz#d0c73beda8eec5426f10ae8ef55cee5e7084c2f0" - integrity sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg== - dependencies: - "@webassemblyjs/ast" "1.11.1" +"@webassemblyjs/utf8@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.11.6.tgz#90f8bc34c561595fe156603be7253cdbcd0fab5a" + integrity sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA== + +"@webassemblyjs/wasm-edit@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz#c72fa8220524c9b416249f3d94c2958dfe70ceab" + integrity sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/helper-wasm-section" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-opt" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + "@webassemblyjs/wast-printer" "1.11.6" + +"@webassemblyjs/wasm-gen@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz#fb5283e0e8b4551cc4e9c3c0d7184a65faf7c268" + integrity sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wasm-opt@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz#d9a22d651248422ca498b09aa3232a81041487c2" + integrity sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-buffer" "1.11.6" + "@webassemblyjs/wasm-gen" "1.11.6" + "@webassemblyjs/wasm-parser" "1.11.6" + +"@webassemblyjs/wasm-parser@1.11.6", "@webassemblyjs/wasm-parser@^1.11.5": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz#bb85378c527df824004812bbdb784eea539174a1" + integrity sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ== + dependencies: + "@webassemblyjs/ast" "1.11.6" + "@webassemblyjs/helper-api-error" "1.11.6" + "@webassemblyjs/helper-wasm-bytecode" "1.11.6" + "@webassemblyjs/ieee754" "1.11.6" + "@webassemblyjs/leb128" "1.11.6" + "@webassemblyjs/utf8" "1.11.6" + +"@webassemblyjs/wast-printer@1.11.6": + version "1.11.6" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz#a7bf8dd7e362aeb1668ff43f35cb849f188eff20" + integrity sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A== + dependencies: + "@webassemblyjs/ast" "1.11.6" "@xtuc/long" "4.2.2" "@xtuc/ieee754@^1.2.0": @@ -2459,20 +2533,20 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" -acorn-import-assertions@^1.7.6: - version "1.8.0" - resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz#ba2b5939ce62c238db6d93d81c9b111b29b855e9" - integrity sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw== +acorn-import-assertions@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz#507276249d684797c84e0734ef84860334cfb1ac" + integrity sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA== acorn-walk@^8.0.0: version "8.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== -acorn@^8.0.4, acorn@^8.5.0, acorn@^8.7.1: - version "8.8.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.8.2.tgz#1b2f25db02af965399b9776b0c2c391276d37c4a" - integrity sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw== +acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: + version "8.9.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" + integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2499,7 +2573,7 @@ ajv-keywords@^3.4.1, ajv-keywords@^3.5.2: resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== -ajv-keywords@^5.0.0: +ajv-keywords@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz#69d4d385a4733cdbeab44964a1170a88f87f0e16" integrity sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw== @@ -2516,7 +2590,7 @@ ajv@^6.12.2, ajv@^6.12.4, ajv@^6.12.5: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.0, ajv@^8.8.0: +ajv@^8.0.0, ajv@^8.9.0: version "8.12.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== @@ -2527,31 +2601,31 @@ ajv@^8.0.0, ajv@^8.8.0: uri-js "^4.2.2" algoliasearch-helper@^3.10.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.12.0.tgz#0fe39d49b0290e4aa5e1fe733bd24d857d258e94" - integrity sha512-/j1U3PEwdan0n6P/QqSnSpNSLC5+cEMvyljd5CnmNmUjDlGrys+vFEOwjVEnqELIiAGMHEA/Nl3CiKVFBUYqyQ== + version "3.13.3" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.13.3.tgz#d23341fb88f490c9b2b83fc2362d1551d52117b6" + integrity sha512-jhbbuYZ+fheXpaJlqdJdFa1jOsrTWKmRRTYDM3oVTto5VodZzM7tT+BHzslAotaJf/81CKrm6yLRQn8WIr/K4A== dependencies: "@algolia/events" "^4.0.1" algoliasearch@^4.0.0, algoliasearch@^4.13.1: - version "4.17.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.17.0.tgz#46ed58b2b99509d041f11cd1ea83623edf84355f" - integrity sha512-JMRh2Mw6sEnVMiz6+APsi7lx9a2jiDFF+WUtANaUVCv6uSU9UOLdo5h9K3pdP6frRRybaM2fX8b1u0nqICS9aA== - dependencies: - "@algolia/cache-browser-local-storage" "4.17.0" - "@algolia/cache-common" "4.17.0" - "@algolia/cache-in-memory" "4.17.0" - "@algolia/client-account" "4.17.0" - "@algolia/client-analytics" "4.17.0" - "@algolia/client-common" "4.17.0" - "@algolia/client-personalization" "4.17.0" - "@algolia/client-search" "4.17.0" - "@algolia/logger-common" "4.17.0" - "@algolia/logger-console" "4.17.0" - "@algolia/requester-browser-xhr" "4.17.0" - "@algolia/requester-common" "4.17.0" - "@algolia/requester-node-http" "4.17.0" - "@algolia/transporter" "4.17.0" + version "4.18.0" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.18.0.tgz#1183ad0384a5b2c14f381c3a361da611acc8edb3" + integrity sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA== + dependencies: + "@algolia/cache-browser-local-storage" "4.18.0" + "@algolia/cache-common" "4.18.0" + "@algolia/cache-in-memory" "4.18.0" + "@algolia/client-account" "4.18.0" + "@algolia/client-analytics" "4.18.0" + "@algolia/client-common" "4.18.0" + "@algolia/client-personalization" "4.18.0" + "@algolia/client-search" "4.18.0" + "@algolia/logger-common" "4.18.0" + "@algolia/logger-console" "4.18.0" + "@algolia/requester-browser-xhr" "4.18.0" + "@algolia/requester-common" "4.18.0" + "@algolia/requester-node-http" "4.18.0" + "@algolia/transporter" "4.18.0" ansi-align@^3.0.0, ansi-align@^3.0.1: version "3.0.1" @@ -2705,29 +2779,29 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-polyfill-corejs2@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz#5d1bd3836d0a19e1b84bbf2d9640ccb6f951c122" - integrity sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q== +babel-plugin-polyfill-corejs2@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" + integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== dependencies: "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.4.0" semver "^6.1.1" -babel-plugin-polyfill-corejs3@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz#56ad88237137eade485a71b52f72dbed57c6230a" - integrity sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA== +babel-plugin-polyfill-corejs3@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" + integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" - core-js-compat "^3.25.1" + "@babel/helper-define-polyfill-provider" "^0.4.0" + core-js-compat "^3.30.1" -babel-plugin-polyfill-regenerator@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz#390f91c38d90473592ed43351e801a9d3e0fd747" - integrity sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw== +babel-plugin-polyfill-regenerator@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" + integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== dependencies: - "@babel/helper-define-polyfill-provider" "^0.3.3" + "@babel/helper-define-polyfill-provider" "^0.4.0" bail@^1.0.0: version "1.0.5" @@ -2836,14 +2910,14 @@ braces@^3.0.2, braces@~3.0.2: fill-range "^7.0.1" browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: - version "4.21.5" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.5.tgz#75c5dae60063ee641f977e00edd3cfb2fb7af6a7" - integrity sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w== + version "4.21.9" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" + integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== dependencies: - caniuse-lite "^1.0.30001449" - electron-to-chromium "^1.4.284" - node-releases "^2.0.8" - update-browserslist-db "^1.0.10" + caniuse-lite "^1.0.30001503" + electron-to-chromium "^1.4.431" + node-releases "^2.0.12" + update-browserslist-db "^1.0.11" buffer-from@^1.0.0: version "1.1.2" @@ -2914,10 +2988,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001449, caniuse-lite@^1.0.30001464: - version "1.0.30001474" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001474.tgz#13b6fe301a831fe666cce8ca4ef89352334133d5" - integrity sha512-iaIZ8gVrWfemh5DG3T9/YqarVZoYf0r188IjaGwx68j4Pf0SGY6CQkmJUIE+NZHkkecQGohzXmBGEwWDr9aM3Q== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: + version "1.0.30001511" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001511.tgz#e6e2a1614275c6fb8e3acfd74a8c3a70e53ed233" + integrity sha512-NaWPJawcoedlghN4P7bDNeADD7K+rZaY6V8ZcME7PkEZo/nfOg+lnrUgRWiKbNxcQ4/toFKSxnS4WdbyPZnKkw== ccount@^1.0.0: version "1.1.0" @@ -2959,6 +3033,11 @@ character-entities@^1.0.0: resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== +character-entities@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-2.0.2.tgz#2d09c2e72cd9523076ccb21157dff66ad43fcc22" + integrity sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ== + character-reference-invalid@^1.0.0: version "1.1.4" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" @@ -3106,9 +3185,9 @@ colord@^2.9.1: integrity sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw== colorette@^2.0.10: - version "2.0.19" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.19.tgz#cdf044f47ad41a0f4b56b3a0d5b4e6e1a2d5a798" - integrity sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ== + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== combine-promises@^1.1.0: version "1.1.0" @@ -3241,22 +3320,22 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.25.1: - version "3.30.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.30.0.tgz#99aa2789f6ed2debfa1df3232784126ee97f4d80" - integrity sha512-P5A2h/9mRYZFIAP+5Ab8ns6083IyVpSclU74UNvbGVQ8VM7n3n3/g2yF3AkKQ9NXz2O+ioxLbEWKnDtgsFamhg== +core-js-compat@^3.30.1, core-js-compat@^3.30.2: + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" + integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== dependencies: browserslist "^4.21.5" -core-js-pure@^3.25.1: - version "3.30.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.30.0.tgz#41b6c42e5f363bd53d79999bd35093b17e42e1bf" - integrity sha512-+2KbMFGeBU0ln/csoPqTe0i/yfHbrd2EUhNMObsGtXMKS/RTtlkYyi+/3twLcevbgNR0yM/r0Psa3TEoQRpFMQ== +core-js-pure@^3.30.2: + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.0.tgz#052fd9e82fbaaf86457f5db1fadcd06f15966ff2" + integrity sha512-/AnE9Y4OsJZicCzIe97JP5XoPKQJfTuEG43aEVLFJGOJpyqELod+pE6LEl63DfG1Mp8wX97LDaDpy1GmLEUxlg== core-js@^3.23.3: - version "3.30.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.30.0.tgz#64ac6f83bc7a49fd42807327051701d4b1478dea" - integrity sha512-hQotSSARoNh1mYPi9O2YaWeiq/cEB95kOrFb4NCrO4RIFt1qqNpKsaE+vy/L3oiqvND5cThqXzUU3r9F7Efztg== + version "3.31.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344" + integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ== core-util-is@~1.0.0: version "1.0.3" @@ -3277,11 +3356,6 @@ cose-base@^2.2.0: dependencies: layout-base "^2.0.0" -cosmiconfig-typescript-loader@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.3.0.tgz#c4259ce474c9df0f32274ed162c0447c951ef073" - integrity sha512-NTxV1MFfZDLPiBMjxbHRwSh5LaLcPMwNdCutmnHJCKoVnlvldPWlllonKwrsRJ5pYZBIBGRWWU2tfvzxgeSW5Q== - cosmiconfig@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" @@ -3304,10 +3378,10 @@ cosmiconfig@^7.0.1: path-type "^4.0.0" yaml "^1.10.0" -cosmiconfig@^8.1.3: - version "8.1.3" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.1.3.tgz#0e614a118fcc2d9e5afc2f87d53cd09931015689" - integrity sha512-/UkO2JKI18b5jVMJUp0lvKFMpa/Gye+ZgZjKD+DGEN9y7NRcf/nK1A0sp67ONmKtnDCNMS44E6jrk0Yc3bDuUw== +cosmiconfig@^8.1.3, cosmiconfig@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" + integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== dependencies: import-fresh "^3.2.1" js-yaml "^4.1.0" @@ -3315,16 +3389,16 @@ cosmiconfig@^8.1.3: path-type "^4.0.0" countup.js@^2.5.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/countup.js/-/countup.js-2.6.0.tgz#db25f37653c5ee996b4dfa03d1ab2f430c903fd1" - integrity sha512-GeORCrCcaFUHP3RNf0/dWK+XQX+fsdtrMO31mNvsbKXNNG+DMTcgZ4dWpIG9BnOS8t5+iJbaRXgaaG9oLs0N4g== + version "2.7.0" + resolved "https://registry.yarnpkg.com/countup.js/-/countup.js-2.7.0.tgz#a5521bd935f0ae83417d0128e73f2a2d2543c9c7" + integrity sha512-IP9nYLGgW//0If73eXQdFlReGhpFGHaStqB1v82FknxnUWueF6HFuuOXySW4sEDMc88PsZL1EOn/NPkfTZalmQ== cross-fetch@^3.1.5: - version "3.1.5" - resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f" - integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw== + version "3.1.8" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" + integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== dependencies: - node-fetch "2.6.7" + node-fetch "^2.6.12" cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" @@ -3346,14 +3420,14 @@ css-declaration-sorter@^6.3.1: integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== css-loader@^6.7.1: - version "6.7.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.7.3.tgz#1e8799f3ccc5874fdd55461af51137fcc5befbcd" - integrity sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ== + version "6.8.1" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-6.8.1.tgz#0f8f52699f60f5e679eab4ec0fcd68b8e8a50a88" + integrity sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g== dependencies: icss-utils "^5.1.0" - postcss "^8.4.19" + postcss "^8.4.21" postcss-modules-extract-imports "^3.0.0" - postcss-modules-local-by-default "^4.0.0" + postcss-modules-local-by-default "^4.0.3" postcss-modules-scope "^3.0.0" postcss-modules-values "^4.0.0" postcss-value-parser "^4.2.0" @@ -3522,17 +3596,17 @@ cytoscape-fcose@^2.1.0: cose-base "^2.2.0" cytoscape@^3.23.0: - version "3.23.0" - resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.23.0.tgz#054ee05a6d0aa3b4f139382bbf2f4e5226df3c6d" - integrity sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA== + version "3.25.0" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.25.0.tgz#5289e9d18be0293b073bfe93f83bb95b908b2dc1" + integrity sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q== dependencies: heap "^0.2.6" lodash "^4.17.21" "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: - version "3.2.3" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.3.tgz#39f1f4954e4a09ff69ac597c2d61906b04e84740" - integrity sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ== + version "3.2.4" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" + integrity sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg== dependencies: internmap "1 - 2" @@ -3738,9 +3812,9 @@ d3-zoom@3: d3-transition "2 - 3" d3@^7.4.0, d3@^7.8.2: - version "7.8.4" - resolved "https://registry.yarnpkg.com/d3/-/d3-7.8.4.tgz#e35d45800e4068cab07e59e5d883a4bb42ab217f" - integrity sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA== + version "7.8.5" + resolved "https://registry.yarnpkg.com/d3/-/d3-7.8.5.tgz#fde4b760d4486cdb6f0cc8e2cbff318af844635c" + integrity sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA== dependencies: d3-array "3" d3-axis "3" @@ -3782,9 +3856,9 @@ dagre-d3-es@7.0.10: lodash-es "^4.17.21" dayjs@^1.11.7: - version "1.11.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" - integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== + version "1.11.9" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.9.tgz#9ca491933fadd0a60a2c19f6c237c03517d71d1a" + integrity sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA== debug@2.6.9, debug@^2.6.0: version "2.6.9" @@ -3793,13 +3867,20 @@ debug@2.6.9, debug@^2.6.0: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1: +debug@4, debug@^4.0.0, debug@^4.1.0, debug@^4.1.1: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" +decode-named-character-reference@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz#daabac9690874c394c81e4162a0304b35d824f0e" + integrity sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg== + dependencies: + character-entities "^2.0.0" + decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" @@ -3873,6 +3954,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ== +dequal@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -3906,6 +3992,11 @@ detect-port@^1.3.0: address "^1.0.1" debug "4" +diff@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.1.0.tgz#bc52d298c5ea8df9194800224445ed43ffc87e40" + integrity sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== + dir-glob@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" @@ -3919,9 +4010,9 @@ dns-equal@^1.0.0: integrity sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg== dns-packet@^5.2.2: - version "5.5.0" - resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.5.0.tgz#f59cbf3396c130957c56a6ad5fd3959ccdc30065" - integrity sha512-USawdAUzRkV6xrqTjiAEp6M9YagZEzWcSUaZTcIFAiyQWW1SoI6KyId8y2+/71wbgHKQAKd+iupLv4YvEwYWvA== + version "5.6.0" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-5.6.0.tgz#2202c947845c7a63c23ece58f2f70ff6ab4c2f7d" + integrity sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ== dependencies: "@leichtgewicht/ip-codec" "^2.0.1" @@ -3962,17 +4053,17 @@ domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.1: dependencies: domelementtype "^2.2.0" -domhandler@^5.0.1, domhandler@^5.0.2, domhandler@^5.0.3: +domhandler@^5.0.2, domhandler@^5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31" integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w== dependencies: domelementtype "^2.3.0" -dompurify@2.4.5: - version "2.4.5" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-2.4.5.tgz#0e89a27601f0bad978f9a924e7a05d5d2cccdd87" - integrity sha512-jggCCd+8Iqp4Tsz0nIvpcb22InKEBrGz5dw3EQJMs8HPJDsKbFIO3STYtAvCfDx26Muevn1MHVI0XxjgFfmiSA== +dompurify@3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.3.tgz#4b115d15a091ddc96f232bcef668550a2f6f1430" + integrity sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ== domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" @@ -3984,13 +4075,13 @@ domutils@^2.5.2, domutils@^2.8.0: domhandler "^4.2.0" domutils@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.0.1.tgz#696b3875238338cb186b6c0612bd4901c89a4f1c" - integrity sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" + integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" - domhandler "^5.0.1" + domhandler "^5.0.3" dot-case@^3.0.4: version "3.0.4" @@ -4027,10 +4118,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.284: - version "1.4.352" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.352.tgz#be96bd7c2f4b980deebc9338a49a67430a33ed73" - integrity sha512-ikFUEyu5/q+wJpMOxWxTaEVk2M1qKqTGKKyfJmod1CPZxKfYnxVS41/GCBQg21ItBpZybyN8sNpRqCUGm+Zc4Q== +electron-to-chromium@^1.4.431: + version "1.4.447" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz#ac69d3a7b3713e9ae94bb30ba65c3114e4d76a38" + integrity sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw== elkjs@^0.8.2: version "0.8.2" @@ -4069,10 +4160,10 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^5.10.0: - version "5.12.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz#300e1c90228f5b570c4d35babf263f6da7155634" - integrity sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ== +enhanced-resolve@^5.15.0: + version "5.15.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" + integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== dependencies: graceful-fs "^4.2.4" tapable "^2.2.0" @@ -4083,9 +4174,9 @@ entities@^2.0.0: integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== entities@^4.2.0, entities@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-4.4.0.tgz#97bdaba170339446495e653cfd2db78962900174" - integrity sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA== + version "4.5.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" + integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== error-ex@^1.3.1: version "1.3.2" @@ -4094,10 +4185,10 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-module-lexer@^0.9.0: - version "0.9.3" - resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz#6f13db00cc38417137daf74366f535c8eb438f19" - integrity sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ== +es-module-lexer@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" + integrity sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA== escalade@^3.1.1: version "3.1.1" @@ -4165,9 +4256,9 @@ esutils@^2.0.2: integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== eta@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/eta/-/eta-2.0.1.tgz#199e675359cb6e19d38f29e1f405e1ba0e79a6df" - integrity sha512-46E2qDPDm7QA+usjffUWz9KfXsxVZclPOuKsXs4ZWZdI/X1wpDF7AO424pt7fdYohCzWsIkXAhNGXSlwo5naAg== + version "2.2.0" + resolved "https://registry.yarnpkg.com/eta/-/eta-2.2.0.tgz#eb8b5f8c4e8b6306561a455e62cd7492fe3a9b8a" + integrity sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g== etag@~1.8.1: version "1.8.1" @@ -4277,9 +4368,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.11, fast-glob@^3.2.9: - version "3.2.12" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.12.tgz#7f39ec99c2e6ab030337142da9e0c18f37afae80" - integrity sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w== + version "3.3.0" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" + integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -4326,9 +4417,9 @@ fbjs-css-vars@^1.0.0: integrity sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ== fbjs@^3.0.0, fbjs@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.4.tgz#e1871c6bd3083bac71ff2da868ad5067d37716c6" - integrity sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ== + version "3.0.5" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-3.0.5.tgz#aa0edb7d5caa6340011790bd9249dbef8a81128d" + integrity sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg== dependencies: cross-fetch "^3.1.5" fbjs-css-vars "^1.0.0" @@ -4336,7 +4427,7 @@ fbjs@^3.0.0, fbjs@^3.0.1: object-assign "^4.1.0" promise "^7.1.1" setimmediate "^1.0.5" - ua-parser-js "^0.7.30" + ua-parser-js "^1.0.35" feed@^4.2.2: version "4.2.2" @@ -4476,10 +4567,10 @@ fs-extra@^9.0.0: jsonfile "^6.0.1" universalify "^2.0.0" -fs-monkey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.3.tgz#ae3ac92d53bb328efe0e9a1d9541f6ad8d48e2d3" - integrity sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q== +fs-monkey@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/fs-monkey/-/fs-monkey-1.0.4.tgz#ee8c1b53d3fe8bb7e5d2c5c5dfc0168afdd2f747" + integrity sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ== fs.realpath@^1.0.0: version "1.0.0" @@ -4502,12 +4593,13 @@ gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.0.tgz#7ad1dc0535f3a2904bba075772763e5051f6d05f" - integrity sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q== + version "1.2.1" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" + integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== dependencies: function-bind "^1.1.1" has "^1.0.3" + has-proto "^1.0.1" has-symbols "^1.0.3" get-own-enumerable-property-symbols@^3.0.0: @@ -4611,9 +4703,9 @@ globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: slash "^3.0.0" globby@^13.1.1: - version "13.1.3" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.1.3.tgz#f62baf5720bcb2c1330c8d4ef222ee12318563ff" - integrity sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw== + version "13.2.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.1.tgz#986d44187ba6a9fc4aa9b16caf0ab9a04db94ae9" + integrity sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg== dependencies: dir-glob "^3.0.1" fast-glob "^3.2.11" @@ -4682,6 +4774,11 @@ has-property-descriptors@^1.0.0: dependencies: get-intrinsic "^1.1.1" +has-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" + integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== + has-symbols@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" @@ -4807,9 +4904,9 @@ hpack.js@^2.1.6: wbuf "^1.1.0" html-entities@^2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.3.3.tgz#117d7626bece327fc8baace8868fa6f5ef856e46" - integrity sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA== + version "2.4.0" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-2.4.0.tgz#edd0cee70402584c8c76cc2c0556db09d1f45061" + integrity sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ== html-minifier-terser@^6.0.2, html-minifier-terser@^6.1.0: version "6.1.0" @@ -4835,9 +4932,9 @@ html-void-elements@^1.0.0: integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== html-webpack-plugin@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz#c3911936f57681c1f9f4d8b68c158cd9dfe52f50" - integrity sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw== + version "5.5.3" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-5.5.3.tgz#72270f4a78e222b5825b296e5e3e1328ad525a3e" + integrity sha512-6YrDKTuqaP/TquFH7h4srYWsZx+x6k6+FbsTm0ziCwGHDP78Unr1r9F/H4+sGmMbX08GQcJ+K64x55b+7VM/jg== dependencies: "@types/html-minifier-terser" "^6.0.0" html-minifier-terser "^6.0.2" @@ -5051,9 +5148,9 @@ ipaddr.js@1.9.1: integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== ipaddr.js@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.0.1.tgz#eca256a7a877e917aeb368b0a7497ddf42ef81c0" - integrity sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng== + version "2.1.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-2.1.0.tgz#2119bc447ff8c257753b196fc5f1ce08a4cdf39f" + integrity sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ== is-alphabetical@1.0.4, is-alphabetical@^1.0.0: version "1.0.4" @@ -5092,10 +5189,10 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.9.0: - version "2.11.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.11.0.tgz#ad4cb3e3863e814523c96f3f58d26cc570ff0144" - integrity sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw== +is-core-module@^2.11.0: + version "2.12.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" + integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== dependencies: has "^1.0.3" @@ -5284,10 +5381,15 @@ jest-worker@^29.1.2: merge-stream "^2.0.0" supports-color "^8.0.0" +jiti@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" + integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== + joi@^17.6.0: - version "17.9.1" - resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.1.tgz#74899b9fa3646904afa984a11df648eca66c9018" - integrity sha512-FariIi9j6QODKATGBrEX7HZcja8Bsh3rfdGYy/Sb65sGlZWK/QWesU1ghk7aJWDj95knjXlQfSmzFSPPkLVsfw== + version "17.9.2" + resolved "https://registry.yarnpkg.com/joi/-/joi-17.9.2.tgz#8b2e4724188369f55451aebd1d0b1d9482470690" + integrity sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw== dependencies: "@hapi/hoek" "^9.0.0" "@hapi/topo" "^5.0.0" @@ -5381,10 +5483,10 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== -klona@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.6.tgz#85bffbf819c03b2f53270412420a4555ef882e22" - integrity sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA== +kleur@^4.0.3: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== latest-version@^5.1.0: version "5.1.0" @@ -5566,6 +5668,24 @@ mdast-util-definitions@^4.0.0: dependencies: unist-util-visit "^2.0.0" +mdast-util-from-markdown@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mdast-util-from-markdown/-/mdast-util-from-markdown-1.3.1.tgz#9421a5a247f10d31d2faed2a30df5ec89ceafcf0" + integrity sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww== + dependencies: + "@types/mdast" "^3.0.0" + "@types/unist" "^2.0.0" + decode-named-character-reference "^1.0.0" + mdast-util-to-string "^3.1.0" + micromark "^3.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-decode-string "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + unist-util-stringify-position "^3.0.0" + uvu "^0.5.0" + mdast-util-to-hast@10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz#0cfc82089494c52d46eb0e3edb7a4eb2aea021eb" @@ -5585,6 +5705,13 @@ mdast-util-to-string@^2.0.0: resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz#b8cfe6a713e1091cb5b728fc48885a4767f8b97b" integrity sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w== +mdast-util-to-string@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-3.2.0.tgz#66f7bb6324756741c5f47a53557f0cbf16b6f789" + integrity sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg== + dependencies: + "@types/mdast" "^3.0.0" + mdn-data@2.0.14: version "2.0.14" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.14.tgz#7113fc4281917d63ce29b43446f701e68c25ba50" @@ -5616,11 +5743,11 @@ media-typer@0.3.0: integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memfs@^3.1.2, memfs@^3.4.3: - version "3.4.13" - resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.4.13.tgz#248a8bd239b3c240175cd5ec548de5227fc4f345" - integrity sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg== + version "3.6.0" + resolved "https://registry.yarnpkg.com/memfs/-/memfs-3.6.0.tgz#d7a2110f86f79dd950a8b6df6d57bc984aa185f6" + integrity sha512-EGowvkkgbMcIChjMTMkESFDbZeSh8xZ7kNSF0hAiAN4Jh6jgHCRS0Ga/+C8y6Au+oqpezRHCfPsmJ2+DwAgiwQ== dependencies: - fs-monkey "^1.0.3" + fs-monkey "^1.0.4" merge-descriptors@1.0.1: version "1.0.1" @@ -5638,24 +5765,24 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== mermaid@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.1.0.tgz#6e40d5250174f4750ca6548e4ee00f6ae210855a" - integrity sha512-LYekSMNJygI1VnMizAPUddY95hZxOjwZxr7pODczILInO0dhQKuhXeu4sargtnuTwCilSuLS7Uiq/Qn7HTVrmA== + version "10.2.4" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.2.4.tgz#3358adc61346ce51858b1b5b1078c20411efabdc" + integrity sha512-zHGjEI7lBvWZX+PQYmlhSA2p40OzW6QbGodTCSzDeVpqaTnyAC+2sRGqrpXO+uQk3CnoeClHQPraQUMStdqy2g== dependencies: - "@braintree/sanitize-url" "^6.0.0" - "@khanacademy/simple-markdown" "^0.8.6" + "@braintree/sanitize-url" "^6.0.2" cytoscape "^3.23.0" cytoscape-cose-bilkent "^4.1.0" cytoscape-fcose "^2.1.0" d3 "^7.4.0" dagre-d3-es "7.0.10" dayjs "^1.11.7" - dompurify "2.4.5" + dompurify "3.0.3" elkjs "^0.8.2" khroma "^2.0.0" lodash-es "^4.17.21" + mdast-util-from-markdown "^1.3.0" non-layered-tidy-tree-layout "^2.0.2" - stylis "^4.1.2" + stylis "^4.1.3" ts-dedent "^2.2.0" uuid "^9.0.0" web-worker "^1.2.0" @@ -5665,6 +5792,200 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== +micromark-core-commonmark@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-core-commonmark/-/micromark-core-commonmark-1.1.0.tgz#1386628df59946b2d39fb2edfd10f3e8e0a75bb8" + integrity sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-factory-destination "^1.0.0" + micromark-factory-label "^1.0.0" + micromark-factory-space "^1.0.0" + micromark-factory-title "^1.0.0" + micromark-factory-whitespace "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-classify-character "^1.0.0" + micromark-util-html-tag-name "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + +micromark-factory-destination@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-destination/-/micromark-factory-destination-1.1.0.tgz#eb815957d83e6d44479b3df640f010edad667b9f" + integrity sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-label@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-label/-/micromark-factory-label-1.1.0.tgz#cc95d5478269085cfa2a7282b3de26eb2e2dec68" + integrity sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-factory-space@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-space/-/micromark-factory-space-1.1.0.tgz#c8f40b0640a0150751d3345ed885a080b0d15faf" + integrity sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-title@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-title/-/micromark-factory-title-1.1.0.tgz#dd0fe951d7a0ac71bdc5ee13e5d1465ad7f50ea1" + integrity sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-factory-whitespace@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-factory-whitespace/-/micromark-factory-whitespace-1.1.0.tgz#798fb7489f4c8abafa7ca77eed6b5745853c9705" + integrity sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ== + dependencies: + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-character@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-character/-/micromark-util-character-1.2.0.tgz#4fedaa3646db249bc58caeb000eb3549a8ca5dcc" + integrity sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg== + dependencies: + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-chunked@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-chunked/-/micromark-util-chunked-1.1.0.tgz#37a24d33333c8c69a74ba12a14651fd9ea8a368b" + integrity sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-classify-character@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-classify-character/-/micromark-util-classify-character-1.1.0.tgz#6a7f8c8838e8a120c8e3c4f2ae97a2bff9190e9d" + integrity sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-combine-extensions@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-combine-extensions/-/micromark-util-combine-extensions-1.1.0.tgz#192e2b3d6567660a85f735e54d8ea6e3952dbe84" + integrity sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-types "^1.0.0" + +micromark-util-decode-numeric-character-reference@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-1.1.0.tgz#b1e6e17009b1f20bc652a521309c5f22c85eb1c6" + integrity sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-decode-string@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-decode-string/-/micromark-util-decode-string-1.1.0.tgz#dc12b078cba7a3ff690d0203f95b5d5537f2809c" + integrity sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ== + dependencies: + decode-named-character-reference "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-encode/-/micromark-util-encode-1.1.0.tgz#92e4f565fd4ccb19e0dcae1afab9a173bbeb19a5" + integrity sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw== + +micromark-util-html-tag-name@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-html-tag-name/-/micromark-util-html-tag-name-1.2.0.tgz#48fd7a25826f29d2f71479d3b4e83e94829b3588" + integrity sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q== + +micromark-util-normalize-identifier@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-1.1.0.tgz#7a73f824eb9f10d442b4d7f120fecb9b38ebf8b7" + integrity sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q== + dependencies: + micromark-util-symbol "^1.0.0" + +micromark-util-resolve-all@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-resolve-all/-/micromark-util-resolve-all-1.1.0.tgz#4652a591ee8c8fa06714c9b54cd6c8e693671188" + integrity sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA== + dependencies: + micromark-util-types "^1.0.0" + +micromark-util-sanitize-uri@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-1.2.0.tgz#613f738e4400c6eedbc53590c67b197e30d7f90d" + integrity sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A== + dependencies: + micromark-util-character "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-symbol "^1.0.0" + +micromark-util-subtokenize@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-subtokenize/-/micromark-util-subtokenize-1.1.0.tgz#941c74f93a93eaf687b9054aeb94642b0e92edb1" + integrity sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A== + dependencies: + micromark-util-chunked "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.0" + uvu "^0.5.0" + +micromark-util-symbol@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-symbol/-/micromark-util-symbol-1.1.0.tgz#813cd17837bdb912d069a12ebe3a44b6f7063142" + integrity sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag== + +micromark-util-types@^1.0.0, micromark-util-types@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/micromark-util-types/-/micromark-util-types-1.1.0.tgz#e6676a8cae0bb86a2171c498167971886cb7e283" + integrity sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg== + +micromark@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/micromark/-/micromark-3.2.0.tgz#1af9fef3f995ea1ea4ac9c7e2f19c48fd5c006e9" + integrity sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA== + dependencies: + "@types/debug" "^4.0.0" + debug "^4.0.0" + decode-named-character-reference "^1.0.0" + micromark-core-commonmark "^1.0.1" + micromark-factory-space "^1.0.0" + micromark-util-character "^1.0.0" + micromark-util-chunked "^1.0.0" + micromark-util-combine-extensions "^1.0.0" + micromark-util-decode-numeric-character-reference "^1.0.0" + micromark-util-encode "^1.0.0" + micromark-util-normalize-identifier "^1.0.0" + micromark-util-resolve-all "^1.0.0" + micromark-util-sanitize-uri "^1.0.0" + micromark-util-subtokenize "^1.0.0" + micromark-util-symbol "^1.0.0" + micromark-util-types "^1.0.1" + uvu "^0.5.0" + micromatch@^4.0.2, micromatch@^4.0.4, micromatch@^4.0.5: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -5713,9 +6034,9 @@ mimic-response@^1.0.0, mimic-response@^1.0.1: integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== mini-css-extract-plugin@^2.6.1: - version "2.7.5" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.5.tgz#afbb344977659ec0f1f6e050c7aea456b121cfc5" - integrity sha512-9HaR++0mlgom81s95vvNjxkg52n2b5s//3ZTI1EtzFb98awsLSivs2LMsVqnQ3ay0PVhqWcGNyDaTE961FOcjQ== + version "2.7.6" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz#282a3d38863fddcd2e0c220aaed5b90bc156564d" + integrity sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw== dependencies: schema-utils "^4.0.0" @@ -5736,7 +6057,7 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== -mri@^1.1.5: +mri@^1.1.0, mri@^1.1.5: version "1.2.0" resolved "https://registry.yarnpkg.com/mri/-/mri-1.2.0.tgz#6721480fec2a11a4889861115a48b6cbe7cc8f0b" integrity sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA== @@ -5780,7 +6101,7 @@ multimatch@^4.0.0: arrify "^2.0.1" minimatch "^3.0.4" -nanoid@^3.3.4: +nanoid@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c" integrity sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA== @@ -5810,10 +6131,10 @@ node-emoji@^1.10.0: dependencies: lodash "^4.17.21" -node-fetch@2.6.7: - version "2.6.7" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" - integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== +node-fetch@^2.6.12: + version "2.6.12" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" + integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== dependencies: whatwg-url "^5.0.0" @@ -5822,10 +6143,10 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-releases@^2.0.8: - version "2.0.10" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.10.tgz#c311ebae3b6a148c89b1813fd7c4d3c024ef537f" - integrity sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w== +node-releases@^2.0.12: + version "2.0.12" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" + integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== non-layered-tidy-tree-layout@^2.0.2: version "2.0.2" @@ -6216,13 +6537,12 @@ postcss-discard-unused@^5.1.0: postcss-selector-parser "^6.0.5" postcss-loader@^7.0.0: - version "7.2.4" - resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.2.4.tgz#2884f4ca172de633b2cf1f93dc852968f0632ba9" - integrity sha512-F88rpxxNspo5hatIc+orYwZDtHFaVFOSIVAx+fBfJC1GmhWbVmPWtmg2gXKE1OxJbneOSGn8PWdIwsZFcruS+w== + version "7.3.3" + resolved "https://registry.yarnpkg.com/postcss-loader/-/postcss-loader-7.3.3.tgz#6da03e71a918ef49df1bb4be4c80401df8e249dd" + integrity sha512-YgO/yhtevGO/vJePCQmTxiaEwER94LABZN0ZMT4A0vsak9TpO+RvKRs7EmJ8peIlB9xfXCsS7M8LjqncsUZ5HA== dependencies: - cosmiconfig "^8.1.3" - cosmiconfig-typescript-loader "^4.3.0" - klona "^2.0.6" + cosmiconfig "^8.2.0" + jiti "^1.18.2" semver "^7.3.8" postcss-merge-idents@^5.1.1: @@ -6288,10 +6608,10 @@ postcss-modules-extract-imports@^3.0.0: resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz#cda1f047c0ae80c97dbe28c3e76a43b88025741d" integrity sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw== -postcss-modules-local-by-default@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz#ebbb54fae1598eecfdf691a02b3ff3b390a5a51c" - integrity sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ== +postcss-modules-local-by-default@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz#b08eb4f083050708998ba2c6061b50c2870ca524" + integrity sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA== dependencies: icss-utils "^5.0.0" postcss-selector-parser "^6.0.2" @@ -6405,17 +6725,17 @@ postcss-reduce-transforms@^5.1.0: postcss-value-parser "^4.2.0" postcss-selector-parser@^6.0.2, postcss-selector-parser@^6.0.4, postcss-selector-parser@^6.0.5, postcss-selector-parser@^6.0.9: - version "6.0.11" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz#2e41dc39b7ad74046e1615185185cd0b17d0c8dc" - integrity sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g== + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b" + integrity sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ== dependencies: cssesc "^3.0.0" util-deprecate "^1.0.2" postcss-sort-media-queries@^4.2.1: - version "4.3.0" - resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz#f48a77d6ce379e86676fc3f140cf1b10a06f6051" - integrity sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg== + version "4.4.1" + resolved "https://registry.yarnpkg.com/postcss-sort-media-queries/-/postcss-sort-media-queries-4.4.1.tgz#04a5a78db3921eb78f28a1a781a2e68e65258128" + integrity sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw== dependencies: sort-css-media-queries "2.1.0" @@ -6444,12 +6764,12 @@ postcss-zindex@^5.1.0: resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-5.1.0.tgz#4a5c7e5ff1050bd4c01d95b1847dfdcc58a496ff" integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== -postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.19: - version "8.4.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4" - integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg== +postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21: + version "8.4.24" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" + integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== dependencies: - nanoid "^3.3.4" + nanoid "^3.3.6" picocolors "^1.0.0" source-map-js "^1.0.2" @@ -6459,9 +6779,9 @@ prepend-http@^2.0.0: integrity sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA== prettier@^2.6.2: - version "2.8.7" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.7.tgz#bb79fc8729308549d28fe3a98fce73d2c0656450" - integrity sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw== + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== pretty-error@^4.0.0: version "4.0.0" @@ -6690,9 +7010,9 @@ react-error-overlay@^6.0.11: integrity sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg== react-fast-compare@^3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.1.tgz#53933d9e14f364281d6cba24bfed7a4afb808b5f" - integrity sha512-xTYf9zFim2pEif/Fw16dBiXpe0hoy5PxcD8+OwBnTtNLfIm3g6WxhKNurY+6OmdH1u6Ta/W/Vl6vjbYP1MFnDg== + version "3.2.2" + resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-3.2.2.tgz#929a97a532304ce9fee4bcae44234f1ce2c21d49" + integrity sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ== react-helmet-async@*, react-helmet-async@^1.3.0: version "1.3.0" @@ -6768,9 +7088,9 @@ react-router@5.3.4, react-router@^5.3.3: tiny-warning "^1.0.0" react-textarea-autosize@^8.3.2: - version "8.4.1" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.4.1.tgz#bcfc5462727014b808b14ee916c01e275e8a8335" - integrity sha512-aD2C+qK6QypknC+lCMzteOdIjoMbNlgSFmJjCV+DrfTPwp59i/it9mMNf2HDzvRjQgKAyBDPyLJhcrzElf2U4Q== + version "8.5.1" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.1.tgz#e1e815ac6715c6dbe01c715fd980a7a97031e2a2" + integrity sha512-3GdXBRT2m12xqH7ysRUquzFZYasYQrH/I+BofmT9sdMG5oI+GNfrsiTV1MvZGk3DLmZ72OUCiV5XGMEPKJ7Pog== dependencies: "@babel/runtime" "^7.20.13" use-composed-ref "^1.3.0" @@ -6992,11 +7312,11 @@ resolve-pathname@^3.0.0: integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: - version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" - integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== + version "1.22.2" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" + integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== dependencies: - is-core-module "^2.9.0" + is-core-module "^2.11.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -7025,9 +7345,9 @@ rimraf@^3.0.2: glob "^7.1.3" robust-predicates@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a" - integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g== + version "3.0.2" + resolved "https://registry.yarnpkg.com/robust-predicates/-/robust-predicates-3.0.2.tgz#d5b28528c4824d20fc48df1928d41d9efa1ad771" + integrity sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg== rtl-detect@^1.0.4: version "1.0.4" @@ -7057,12 +7377,19 @@ rw@1: integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ== rxjs@^7.5.4: - version "7.8.0" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.0.tgz#90a938862a82888ff4c7359811a595e14e1e09a4" - integrity sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg== + version "7.8.1" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" + integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== dependencies: tslib "^2.1.0" +sade@^1.7.3: + version "1.8.1" + resolved "https://registry.yarnpkg.com/sade/-/sade-1.8.1.tgz#0a78e81d658d394887be57d2a409bf703a3b2701" + integrity sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A== + dependencies: + mri "^1.1.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -7108,24 +7435,24 @@ schema-utils@^2.6.5: ajv "^6.12.4" ajv-keywords "^3.5.2" -schema-utils@^3.0.0, schema-utils@^3.1.0, schema-utils@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.1.1.tgz#bc74c4b6b6995c1d88f76a8b77bea7219e0c8281" - integrity sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw== +schema-utils@^3.0.0, schema-utils@^3.1.1, schema-utils@^3.2.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" + integrity sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg== dependencies: "@types/json-schema" "^7.0.8" ajv "^6.12.5" ajv-keywords "^3.5.2" schema-utils@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.0.0.tgz#60331e9e3ae78ec5d16353c467c34b3a0a1d3df7" - integrity sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg== + version "4.2.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-4.2.0.tgz#70d7c93e153a273a805801882ebd3bff20d89c8b" + integrity sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw== dependencies: "@types/json-schema" "^7.0.9" - ajv "^8.8.0" + ajv "^8.9.0" ajv-formats "^2.1.1" - ajv-keywords "^5.0.0" + ajv-keywords "^5.1.0" section-matter@^1.0.0: version "1.0.0" @@ -7165,9 +7492,9 @@ semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: - version "7.3.8" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.8.tgz#07a78feafb3f7b32347d725e33de7e2a2df67798" - integrity sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A== + version "7.5.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" + integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== dependencies: lru-cache "^6.0.0" @@ -7274,9 +7601,9 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.7.3: - version "1.8.0" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.0.tgz#20d078d0eaf71d54f43bd2ba14a1b5b9bfa5c8ba" - integrity sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ== + version "1.8.1" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" + integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== shelljs@^0.8.5: version "0.8.5" @@ -7426,9 +7753,9 @@ statuses@2.0.1: integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== std-env@^3.0.1: - version "3.3.2" - resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.2.tgz#af27343b001616015534292178327b202b9ee955" - integrity sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA== + version "3.3.3" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.3.3.tgz#a54f06eb245fdcfef53d56f3c0251f1d5c3d01fe" + integrity sha512-Rz6yejtVyWnVjC1RFvNmYL10kgjC49EOghxWn0RFqlCHGFpQx+Xe7yW3I4ceK1SGrWIGMjD5Kbue8W/udkbMJg== string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" @@ -7479,9 +7806,9 @@ strip-ansi@^6.0.0, strip-ansi@^6.0.1: ansi-regex "^5.0.1" strip-ansi@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" - integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== + version "7.1.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" + integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== dependencies: ansi-regex "^6.0.1" @@ -7520,10 +7847,10 @@ stylehacks@^5.1.1: browserslist "^4.21.4" postcss-selector-parser "^6.0.4" -stylis@^4.1.2: - version "4.1.3" - resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.1.3.tgz#fd2fbe79f5fed17c55269e16ed8da14c84d069f7" - integrity sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA== +stylis@^4.1.3: + version "4.3.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.3.0.tgz#abe305a669fc3d8777e10eefcfc73ad861c5588c" + integrity sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ== supports-color@^5.3.0: version "5.5.0" @@ -7591,24 +7918,24 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0: resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== -terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.3.3: - version "5.3.7" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz#ef760632d24991760f339fe9290deb936ad1ffc7" - integrity sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw== +terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: + version "5.3.9" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz#832536999c51b46d468067f9e37662a3b96adfe1" + integrity sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA== dependencies: "@jridgewell/trace-mapping" "^0.3.17" jest-worker "^27.4.5" schema-utils "^3.1.1" serialize-javascript "^6.0.1" - terser "^5.16.5" + terser "^5.16.8" -terser@^5.10.0, terser@^5.16.5: - version "5.16.8" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.8.tgz#ccde583dabe71df3f4ed02b65eb6532e0fae15d5" - integrity sha512-QI5g1E/ef7d+PsDifb+a6nnVgC4F22Bg6T0xrBrz6iloVB4PUkkunp6V8nzoOOZJIzjWVdAGqCdlKlhLq/TbIA== +terser@^5.10.0, terser@^5.16.8: + version "5.18.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" + integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== dependencies: - "@jridgewell/source-map" "^0.3.2" - acorn "^8.5.0" + "@jridgewell/source-map" "^0.3.3" + acorn "^8.8.2" commander "^2.20.0" source-map-support "~0.5.20" @@ -7685,9 +8012,9 @@ ts-dedent@^2.2.0: integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" - integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== type-fest@^0.20.2: version "0.20.2" @@ -7714,10 +8041,10 @@ typedarray-to-buffer@^3.1.5: dependencies: is-typedarray "^1.0.0" -ua-parser-js@^0.7.30: - version "0.7.35" - resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.35.tgz#8bda4827be4f0b1dda91699a29499575a1f1d307" - integrity sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g== +ua-parser-js@^1.0.35: + version "1.0.35" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.35.tgz#c4ef44343bc3db0a3cbefdf21822f1b1fc1ab011" + integrity sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA== unherit@^1.0.4: version "1.1.3" @@ -7822,6 +8149,13 @@ unist-util-stringify-position@^2.0.0: dependencies: "@types/unist" "^2.0.2" +unist-util-stringify-position@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-3.0.3.tgz#03ad3348210c2d930772d64b489580c13a7db39d" + integrity sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg== + dependencies: + "@types/unist" "^2.0.0" + unist-util-visit-parents@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz#65a6ce698f78a6b0f56aa0e88f13801886cdaef6" @@ -7849,10 +8183,10 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.10: - version "1.0.10" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz#0f54b876545726f17d00cd9a2561e6dade943ff3" - integrity sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ== +update-browserslist-db@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz#9a2a641ad2907ae7b3616506f4b977851db5b940" + integrity sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA== dependencies: escalade "^3.1.1" picocolors "^1.0.0" @@ -7952,6 +8286,16 @@ uuid@^9.0.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-9.0.0.tgz#592f550650024a38ceb0c562f2f6aa435761efb5" integrity sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg== +uvu@^0.5.0: + version "0.5.6" + resolved "https://registry.yarnpkg.com/uvu/-/uvu-0.5.6.tgz#2754ca20bcb0bb59b64e9985e84d2e81058502df" + integrity sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA== + dependencies: + dequal "^2.0.0" + diff "^5.0.0" + kleur "^4.0.3" + sade "^1.7.3" + value-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/value-equal/-/value-equal-1.0.1.tgz#1e0b794c734c5c0cade179c437d356d931a34d6c" @@ -8027,9 +8371,9 @@ webidl-conversions@^3.0.0: integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== webpack-bundle-analyzer@^4.5.0: - version "4.8.0" - resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz#951b8aaf491f665d2ae325d8b84da229157b1d04" - integrity sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg== + version "4.9.0" + resolved "https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.9.0.tgz#fc093c4ab174fd3dcbd1c30b763f56d10141209d" + integrity sha512-+bXGmO1LyiNx0i9enBu3H8mv42sj/BJWhZNFwjz92tVnBa9J3JMGo2an2IXlEleoDOPn/Hofl5hr/xCpObUDtw== dependencies: "@discoveryjs/json-ext" "0.5.7" acorn "^8.0.4" @@ -8054,9 +8398,9 @@ webpack-dev-middleware@^5.3.1: schema-utils "^4.0.0" webpack-dev-server@^4.9.3: - version "4.13.2" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.13.2.tgz#d97445481d78691efe6d9a3b230833d802fc31f9" - integrity sha512-5i6TrGBRxG4vnfDpB6qSQGfnB6skGBXNL5/542w2uRGLimX6qeE5BQMLrzIC3JYV/xlGOv+s+hTleI9AZKUQNw== + version "4.15.1" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-4.15.1.tgz#8944b29c12760b3a45bdaa70799b17cb91b03df7" + integrity sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA== dependencies: "@types/bonjour" "^3.5.9" "@types/connect-history-api-fallback" "^1.3.5" @@ -8064,7 +8408,7 @@ webpack-dev-server@^4.9.3: "@types/serve-index" "^1.9.1" "@types/serve-static" "^1.13.10" "@types/sockjs" "^0.3.33" - "@types/ws" "^8.5.1" + "@types/ws" "^8.5.5" ansi-html-community "^0.0.8" bonjour-service "^1.0.11" chokidar "^3.5.3" @@ -8090,9 +8434,9 @@ webpack-dev-server@^4.9.3: ws "^8.13.0" webpack-merge@^5.8.0: - version "5.8.0" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.8.0.tgz#2b39dbf22af87776ad744c390223731d30a68f61" - integrity sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q== + version "5.9.0" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-5.9.0.tgz#dc160a1c4cf512ceca515cc231669e9ddb133826" + integrity sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg== dependencies: clone-deep "^4.0.1" wildcard "^2.0.0" @@ -8103,21 +8447,21 @@ webpack-sources@^3.2.2, webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.73.0: - version "5.77.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.77.0.tgz#dea3ad16d7ea6b84aa55fa42f4eac9f30e7eb9b4" - integrity sha512-sbGNjBr5Ya5ss91yzjeJTLKyfiwo5C628AFjEa6WSXcZa4E+F57om3Cc8xLb1Jh0b243AWuSYRf3dn7HVeFQ9Q== + version "5.88.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8" + integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ== dependencies: "@types/eslint-scope" "^3.7.3" - "@types/estree" "^0.0.51" - "@webassemblyjs/ast" "1.11.1" - "@webassemblyjs/wasm-edit" "1.11.1" - "@webassemblyjs/wasm-parser" "1.11.1" + "@types/estree" "^1.0.0" + "@webassemblyjs/ast" "^1.11.5" + "@webassemblyjs/wasm-edit" "^1.11.5" + "@webassemblyjs/wasm-parser" "^1.11.5" acorn "^8.7.1" - acorn-import-assertions "^1.7.6" + acorn-import-assertions "^1.9.0" browserslist "^4.14.5" chrome-trace-event "^1.0.2" - enhanced-resolve "^5.10.0" - es-module-lexer "^0.9.0" + enhanced-resolve "^5.15.0" + es-module-lexer "^1.2.1" eslint-scope "5.1.1" events "^3.2.0" glob-to-regexp "^0.4.1" @@ -8126,9 +8470,9 @@ webpack@^5.73.0: loader-runner "^4.2.0" mime-types "^2.1.27" neo-async "^2.6.2" - schema-utils "^3.1.0" + schema-utils "^3.2.0" tapable "^2.1.1" - terser-webpack-plugin "^5.1.3" + terser-webpack-plugin "^5.3.7" watchpack "^2.4.0" webpack-sources "^3.2.3" @@ -8193,9 +8537,9 @@ widest-line@^4.0.1: string-width "^5.0.1" wildcard@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.0.tgz#a77d20e5200c6faaac979e4b3aadc7b3dd7f8fec" - integrity sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/wildcard/-/wildcard-2.0.1.tgz#5ab10d02487198954836b6349f74fff961e10f67" + integrity sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ== wrap-ansi@^7.0.0: version "7.0.0" From 13df4710fafb925fdb10e49bf448799280831a03 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 3 Jul 2023 15:57:01 +0200 Subject: [PATCH 451/665] Update index.md Add wave 19 --- applications/index.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/applications/index.md b/applications/index.md index 63ad90d52cb..f34e433fb66 100644 --- a/applications/index.md +++ b/applications/index.md @@ -13,6 +13,7 @@ Use this page for an overview of all public grants and their status. Use the sid - [2023](#2023) + - [🏄‍♀️ Wave 19 - Q3 2023](#️-wave-19---q3-2023) - [🏄‍♀️ Wave 18 - Q2 2023](#️-wave-18---q2-2023) - [🏄‍♀️ Wave 17 - Q1 2023](#️-wave-17---q1-2023) - [2022](#2022) @@ -38,6 +39,13 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2023 +### 🏄‍♀️ Wave 19 - Q3 2023 + +| Team | Project | Link | Terminated | First Delivery | Completed | +| :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | + +[🔝](#2023) + ### 🏄‍♀️ Wave 18 - Q2 2023 | Team | Project | Link | Terminated | First Delivery | Completed | From b3735e62134d02bb735d7807a2c95534372c9f06 Mon Sep 17 00:00:00 2001 From: caso Date: Mon, 3 Jul 2023 16:49:33 +0200 Subject: [PATCH 452/665] Update index.md (#1831) Fix emoji issue --- applications/index.md | 76 +++++++++++++++++++++---------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/applications/index.md b/applications/index.md index f34e433fb66..b6f4bf9b023 100644 --- a/applications/index.md +++ b/applications/index.md @@ -13,40 +13,40 @@ Use this page for an overview of all public grants and their status. Use the sid - [2023](#2023) - - [🏄‍♀️ Wave 19 - Q3 2023](#️-wave-19---q3-2023) - - [🏄‍♀️ Wave 18 - Q2 2023](#️-wave-18---q2-2023) - - [🏄‍♀️ Wave 17 - Q1 2023](#️-wave-17---q1-2023) + - [🏄 Wave 19 - Q3 2023](#️-wave-19---q3-2023) + - [🏄 Wave 18 - Q2 2023](#️-wave-18---q2-2023) + - [🏄 Wave 17 - Q1 2023](#️-wave-17---q1-2023) - [2022](#2022) - - [🏄‍♀️ Wave 16 - Q4 2022](#️-wave-16---q4-2022) - - [🏄‍♀️ Wave 15 - Q3 2022](#️-wave-15---q3-2022) - - [🏄‍♀️ Wave 14 - Q2 2022](#️-wave-14---q2-2022) - - [🏄‍♀️ Wave 13 - Q1 2022](#️-wave-13---q1-2022) + - [🏄 Wave 16 - Q4 2022](#️-wave-16---q4-2022) + - [🏄 Wave 15 - Q3 2022](#️-wave-15---q3-2022) + - [🏄 Wave 14 - Q2 2022](#️-wave-14---q2-2022) + - [🏄 Wave 13 - Q1 2022](#️-wave-13---q1-2022) - [2021](#2021) - - [🏄‍♀️ Wave 12 - Q4 2021](#️-wave-12---q4-2021) - - [🏄‍♀️ Wave 11 - Q3 2021](#️-wave-11---q3-2021) - - [🏄‍♀️ Wave 10 - Q2 2021](#️-wave-10---q2-2021) - - [🏄‍♀️ Wave 9 - Q1 2021](#️-wave-9---q1-2021) + - [🏄 Wave 12 - Q4 2021](#️-wave-12---q4-2021) + - [🏄 Wave 11 - Q3 2021](#️-wave-11---q3-2021) + - [🏄 Wave 10 - Q2 2021](#️-wave-10---q2-2021) + - [🏄 Wave 9 - Q1 2021](#️-wave-9---q1-2021) - [2020](#2020) - - [🏄‍♀️ Wave 8 - Q4 2020](#️-wave-8---q4-2020) - - [🏄‍♀️ Wave 7 - Q3 2020](#️-wave-7---q3-2020) - - [🏄‍♀️ Wave 6 - Q2 2020](#️-wave-6---q2-2020) - - [🏄‍♀️ Wave 5 - Q1 2020](#️-wave-5---q1-2020) + - [🏄 Wave 8 - Q4 2020](#️-wave-8---q4-2020) + - [🏄 Wave 7 - Q3 2020](#️-wave-7---q3-2020) + - [🏄 Wave 6 - Q2 2020](#️-wave-6---q2-2020) + - [🏄 Wave 5 - Q1 2020](#️-wave-5---q1-2020) - [2019](#2019) - - [🏄‍♀️ Wave 4 - Q4 2019](#️-wave-4---q4-2019) - - [🏄‍♀️ Wave 3 - Q3 2019](#️-wave-3---q3-2019) - - [🏄‍♀️ Wave 2 - Q2 2019](#️-wave-2---q2-2019) - - [🏄‍♀️ Wave 1 - Q1 2019](#️-wave-1---q1-2019) + - [🏄 Wave 4 - Q4 2019](#️-wave-4---q4-2019) + - [🏄 Wave 3 - Q3 2019](#️-wave-3---q3-2019) + - [🏄 Wave 2 - Q2 2019](#️-wave-2---q2-2019) + - [🏄 Wave 1 - Q1 2019](#️-wave-1---q1-2019) ## 2023 -### 🏄‍♀️ Wave 19 - Q3 2023 +### 🏄 Wave 19 - Q3 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | [🔝](#2023) -### 🏄‍♀️ Wave 18 - Q2 2023 +### 🏄 Wave 18 - Q2 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | @@ -89,7 +89,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 17 - Q1 2023 +### 🏄 Wave 17 - Q1 2023 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | @@ -144,7 +144,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2022 -### 🏄‍♀️ Wave 16 - Q4 2022 +### 🏄 Wave 16 - Q4 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -190,7 +190,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 15 - Q3 2022 +### 🏄 Wave 15 - Q3 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -236,7 +236,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 14 - Q2 2022 +### 🏄 Wave 14 - Q2 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :------------------------------------------------------------------------------------------------------ | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -279,7 +279,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 13 - Q1 2022 +### 🏄 Wave 13 - Q1 2022 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------- | :-------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -320,7 +320,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2021 -### 🏄‍♀️ Wave 12 - Q4 2021 +### 🏄 Wave 12 - Q4 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------- | :---------------------------------------------------------------------------------------- | :------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -348,7 +348,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 11 - Q3 2021 +### 🏄 Wave 11 - Q3 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------- | :---------------------------------------------------------------------------------------- | :-------------------------------------------------- | :--------- | :------------: | :-------: | @@ -381,7 +381,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 10 - Q2 2021 +### 🏄 Wave 10 - Q2 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -417,7 +417,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 9 - Q1 2021 +### 🏄 Wave 9 - Q1 2021 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -474,7 +474,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2020 -### 🏄‍♀️ Wave 8 - Q4 2020 +### 🏄 Wave 8 - Q4 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -524,7 +524,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 7 - Q3 2020 +### 🏄 Wave 7 - Q3 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :--------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -562,7 +562,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 6 - Q2 2020 +### 🏄 Wave 6 - Q2 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -602,7 +602,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 5 - Q1 2020 +### 🏄 Wave 5 - Q1 2020 | Team | Project | Link | Terminated | First Delivery | Completed | | :---------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -648,7 +648,7 @@ Use this page for an overview of all public grants and their status. Use the sid ## 2019 -### 🏄‍♀️ Wave 4 - Q4 2019 +### 🏄 Wave 4 - Q4 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -681,7 +681,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 3 - Q3 2019 +### 🏄 Wave 3 - Q3 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | @@ -702,7 +702,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 2 - Q2 2019 +### 🏄 Wave 2 - Q2 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------ | :--------- | :------------: | :-------: | @@ -721,7 +721,7 @@ Use this page for an overview of all public grants and their status. Use the sid [🔝](#2023) -### 🏄‍♀️ Wave 1 - Q1 2019 +### 🏄 Wave 1 - Q1 2019 | Team | Project | Link | Terminated | First Delivery | Completed | | :-------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------------------------------- | :--------- | :------------: | :-------: | From 9b30d274cc45692b5d3ee69dcb6d36fe672716fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 10:27:05 +0200 Subject: [PATCH 453/665] Update index.md SARP M1 and complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b6f4bf9b023..0af3c7a0eaa 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,7 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | -| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☐ | ☐ | +| [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☒ | ☒ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | From cf0e23bbb9a6bac69a0efb193a5ebc703b7a6118 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 10:29:50 +0200 Subject: [PATCH 454/665] Update and rename Static-Analysis-for-Runtime-Pallets.md to Static-Analysis-for-Runtime-Pallets.md --- .../Static-Analysis-for-Runtime-Pallets.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/RFPs/{Open => Under Development}/Static-Analysis-for-Runtime-Pallets.md (95%) diff --git a/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md b/docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md similarity index 95% rename from docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md rename to docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md index f3412e9dfc4..8c88c275f5d 100644 --- a/docs/RFPs/Open/Static-Analysis-for-Runtime-Pallets.md +++ b/docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md @@ -1,5 +1,5 @@ # Static Analysis of Runtime Pallets -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/sarp-basic-functionality.md) * **Proposer:** [Bhargav Bhatt](https://github.com/bhargavbh), [David Hawig](https://github.com/Noc2) ## Project Description :page_facing_up: From dd18ef771b73c8aa018941faf3fd3aa8dbc4b1a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 10:31:33 +0200 Subject: [PATCH 455/665] Update rfps.md Move static analysis to `Under Development` --- docs/rfps.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index 914e0c2ed89..d6872f13d6e 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -31,7 +31,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | | [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 08.05.2023 | -| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Open/Static-Analysis-for-Runtime-Pallets.md) | 06.02.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.11.2021 | | [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 07.01.2023 | @@ -46,8 +45,10 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | | [analysis-website-and-data-platform.md](RFPs/Under%20Development/analysis-website-and-data-platform.md) | 28.06.2023 | | [data_analysis_tools.md](RFPs/Under%20Development/data_analysis_tools.md) | 28.06.2023 | +| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 02.06.2023 | | [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | | [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | @@ -58,10 +59,9 @@ If you find an open RFP here that you think you can address, feel free to [submi | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 27.05.22 | | [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 23.05.2023 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 30.05.2022 | -| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 02.06.2023 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Under%20Development/Static-Analysis-for-Runtime-Pallets.md) | 05.07.2023 | | [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 27.04.2023 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 07.12.2022 | -| [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | From 231a0f4523dfbd1bb77d7c4f60eef36c36d6f36a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 10:38:23 +0200 Subject: [PATCH 456/665] Update index.md Validated Streams complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0af3c7a0eaa..914ff3c4377 100644 --- a/applications/index.md +++ b/applications/index.md @@ -99,7 +99,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | -| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☐ | +| [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☒ | | [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | From e616e2f2fabb2e6ed7f2bc348ff1304628347078 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 5 Jul 2023 13:09:38 +0200 Subject: [PATCH 457/665] Update index.md QRUCIAL DAO complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 914ff3c4377..a37eaf4549e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -194,7 +194,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :----------------------------------------------------------- | :-------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------- | :--------- | :------------: | :-------: | -| [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☐ | +| [QRUCIAL OÜ](https://qrucial.io/) | [QRUCIAL DAO](./QRUCIAL_DAO.md) | [GitHub](https://github.com/Qrucial/QRUCIAL-DAO) | ☐ | ☒ | ☒ | | [Polkadot js plus](http://polkadotjs.plus/) | [Polkadot js plus / Social Recovery Wallet](./Plus-social-recovery-wallet.md) | [GitHub](https://github.com/Nick-1979/polkadot-Js-Plus-extension/wiki) | ☐ | ☒ | ☐ | | [Lee](https://github.com/rust-0x0) | [Hex Space Social Graph](./hex.md) | [GitHub](https://github.com/rust-0x0) | ☐ | ☒ | ☐ | | [Liberland LLC](https://liberland.org/en/) | [Liberland Pallets](./liberland.md) | [GitHub](https://github.com/liberland/liberland_substrate) | ☐ | ☒ | ☒ | From f7d15f4e5b82b5e02db5c7a734313b46f344fbf2 Mon Sep 17 00:00:00 2001 From: Dusan Morhac <55763425+dudo50@users.noreply.github.com> Date: Mon, 10 Jul 2023 09:29:21 +0200 Subject: [PATCH 458/665] Update LightSpell-proposal.md (#1835) --- applications/LightSpell-proposal.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/LightSpell-proposal.md b/applications/LightSpell-proposal.md index 0e3e7c25365..d4a4a3194ca 100644 --- a/applications/LightSpell-proposal.md +++ b/applications/LightSpell-proposal.md @@ -182,8 +182,8 @@ Michael Absolon - Student, XCM SDK & XCM API Core Dev. Faculty of Informatics an ### Legal Structure -- **Registered Address:** TBA later (Switching to the company) -- **Registered Legal Entity:** TBA later (Switching to the company) +- **Registered Address:** Tomášovská 453/2, Kalinovo 98501, Slovak Republic +- **Registered Legal Entity:** Dušan Morháč ### Team's experience - Dušan is the founder & researcher behind this project and he has successfully presented it at the international conference ICECET2022 held in Prague from which there is an article regarding XCMP & ParaSpell project. It is published by IEEE [link](https://ieeexplore.ieee.org/document/9872938). He also successfully presented it at ICBC 2023 conference held in Dubai. Dušan also studies Blockchain technology and had a bachelor's thesis about cross-blockchain sharing from which this idea was born. Dušan continues research on this idea in his Master's thesis. He is actively working on ParaSpell https://github.com/paraspell full-time & has also participated in other ecosystem projects. Recently he attended Polkadot Blockchain Academy 2023 in Buenos Aires which gave him a lot of insight into the ecosystem and he also graduated from the academy successfully. Here is NFT that was minted as a certificate by Parity - [link](https://singular.app/collectibles/statemine/20/12) From a85cef33bde5f91ed7102b4f18299600d7d80737 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 10 Jul 2023 10:07:20 -0300 Subject: [PATCH 459/665] Update index.md (#1836) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a37eaf4549e..56ae0d0809a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -107,7 +107,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☒ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | -| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☐ | +| [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☒ | | [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | From c1c88d5458bdffe2f86371c9ab1f8ece72a1d8d4 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 10 Jul 2023 15:08:27 +0200 Subject: [PATCH 460/665] Update README.md Update team --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 87130862957..e5295e6989b 100644 --- a/README.md +++ b/README.md @@ -86,7 +86,6 @@ The committee consists of individuals who know the funding priorities of the Pol In cases where a niche expert opinion is desirable, one of the committee members may request such a review. -- [Nabil Abdellaoui](https://github.com/randombishop) - [Santiago Balaguer](https://github.com/SBalaguer) - [Aeron Buchanan](https://github.com/aeronbuchanan) - [Gautam Dhameja](https://github.com/gautamdhameja) @@ -104,7 +103,6 @@ In cases where a niche expert opinion is desirable, one of the committee members Evaluators are individuals able to evaluate the technology delivered as a result of the Grants Program. The committee has the right to add or remove evaluators on the basis of supermajority. -- [Nabil Abdellaoui](https://github.com/randombishop) - [Matteo Casonato](https://github.com/0xCaso) - [David Hawig](https://github.com/Noc2) - [Diogo Mendonça](https://github.com/dsm-w3f) From d17cab3d249ef123fc0a1a9bf6322045c3ab0342 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 10 Jul 2023 15:09:05 +0200 Subject: [PATCH 461/665] Update README.md Update Team --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index e5295e6989b..b1d39f5ca1b 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,6 @@ In cases where a niche expert opinion is desirable, one of the committee members Evaluators are individuals able to evaluate the technology delivered as a result of the Grants Program. The committee has the right to add or remove evaluators on the basis of supermajority. -- [Matteo Casonato](https://github.com/0xCaso) - [David Hawig](https://github.com/Noc2) - [Diogo Mendonça](https://github.com/dsm-w3f) - [Sebastian Müller](https://github.com/semuelle) From f044c5d19b74ed87440e2b197b76c24b72b62cff Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 10 Jul 2023 15:10:32 +0200 Subject: [PATCH 462/665] Update team --- docs/Introduction/team.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/Introduction/team.md b/docs/Introduction/team.md index fddb79e2cd5..041476e1fda 100644 --- a/docs/Introduction/team.md +++ b/docs/Introduction/team.md @@ -10,7 +10,6 @@ The committee consists of individuals who know the funding priorities of the Pol In cases where a niche expert opinion is desirable, one of the committee members may request such a review. -- [Nabil Abdellaoui](https://github.com/randombishop) - [Santiago Balaguer](https://github.com/SBalaguer) - [Aeron Buchanan](https://github.com/aeronbuchanan) - [Gautam Dhameja](https://github.com/gautamdhameja) @@ -28,8 +27,6 @@ In cases where a niche expert opinion is desirable, one of the committee members Evaluators are individuals able to evaluate the technology delivered as a result of the Grants Program. The committee has the right to add or remove evaluators on the basis of supermajority. -- [Nabil Abdellaoui](https://github.com/randombishop) -- [Matteo Casonato](https://github.com/0xCaso) - [David Hawig](https://github.com/Noc2) - [Diogo Mendonça](https://github.com/dsm-w3f) - [Sebastian Müller](https://github.com/semuelle) From 3ec63d38fd5ab676f9495515563c04db3bf600cc Mon Sep 17 00:00:00 2001 From: DiegoTorresborda <97901225+DiegoTorresborda@users.noreply.github.com> Date: Mon, 10 Jul 2023 16:00:59 -0300 Subject: [PATCH 463/665] Contract Wizard Proposal (#1742) * Submitting Contract Wizard Proposal Submitting Contract Wizard Proposal * Update Contract_wizard.md Removed point 6 from milestone 2 according to feedback * Update Contract_wizard.md Update FTE Cost to reduce GAP with the previous proposal. * Update Contract_wizard.md Updated Proposal * Update Contract_wizard.md Updated proposal according to feedback. * Update Contract_wizard.md Update fix table --- applications/Contract_wizard.md | 172 ++++++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 applications/Contract_wizard.md diff --git a/applications/Contract_wizard.md b/applications/Contract_wizard.md new file mode 100644 index 00000000000..4354af51aa1 --- /dev/null +++ b/applications/Contract_wizard.md @@ -0,0 +1,172 @@ +# Polkadot Contract Wizard +​ +- **Team Name:** Protofire +- **Payment Address:** 0xD662E05ce522B3861b70FC376F60bF50E200abfA (USDC - Ethereum network) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 +​ +## Project Overview :page_facing_up: +​ +The Polkadot Contract Wizard has successfully completed its initial phase, making it easier for users to create and deploy standard smart contracts on the Polkadot ecosystem. In the next phase, we aim to expand the scope of the project by implementing additional features and supporting multiple chains. Our goal is to continue enhancing the user experience and versatility of the Polkadot Contract Wizard, making it a powerful tool for both developers and non-developers. +​ +### Overview +​ +In the next phase, we plan to implement the following features: +​ +1.- Interaction with deployed contracts through the wizard's UI. +​ +2.- Interaction with smart contracts deployed by the user. +​ +3.- Shareable Contract Interaction Links +​ +4.- Support for multiple chains +​ +These enhancements will allow users to create, modify, deploy and interact with smart contracts on different parachains, making the Contract Wizard an indispensable tool for the community within the Polkadot and Kusama ecosystem. +​ +### Project Details +​ +####
1. Interact with deployed contracts +We will create a functionality that enables users to directly interact with their deployed contracts via the user interface of the wizard. This functionality will be generated dynamically according to the metadata of the contracts. With this, users will be able to conveniently and effectively manage their contracts and carry out interactions using the same tool. +​ +#### 2. Interaction with custom smart contracts +Our platform will offer the capability to interact with any contract of their choice. To utilize this feature, they simply need to provide the metadata, network, and address associated with the contract. Once this information is ready, the user interface will automatically generate a customized user-friendly layout for allowing people to easily interact with their custom contracts. +​ +#### 3. Shareable Contract Interaction Links +To enhance the user experience and encourage collaboration, we plan to implement a feature for shareable contract interaction links. +Once a developer deploys a contract or uploads the metadata for interacting with it on our platform, they can generate a unique, shareable link. This link will contain all necessary information for interacting with the contract, essentially encapsulating the contract's ABI (Application Binary Interface) and its address on the blockchain. +Users receiving this link can interact with the contract directly, without needing to reupload the metadata or know the contract's specifics. This feature not only simplifies the process of contract interaction but also fosters collaboration and sharing within the developer community. +​ +#### 4. Support for multiple chains +This tool will offer a feature that enables users to connect to parachains implementing the contracts pallet. We will provide a list of some of these parachains in Polkadot, Kusama, and Rococo networks. Additionally, users will have the option to connect to a network that is not listed by specifying the web socket. +​ +### Tentative Mockups + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add_contract_1_720.png) + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%202.png) + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%203.png) + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%201.png) + +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%202.png) + +### Ecosystem Fit +​ +The Polkadot Contract Wizard aims to streamline the onboarding process and enhance usability within the Polkadot and Kusama ecosystem. +​ +This project will contribute to the ecosystem in the following ways: +​ +1. **Simplifying smart contract creation**: The Polkadot Contract Wizard will offer a user-friendly interface that allows individuals with varying levels of technical expertise to create smart contracts without the need for extensive programming knowledge. This will empower more people to participate in the ecosystem and explore the possibilities offered by smart contracts. +​ +2. **Enhancing user experience**: By providing video tutorials, detailed documentation, and an intuitive interface, we will create a welcoming environment for new users, making it easier for them to get started with smart contracts on Polkadot and Kusama. +​ +3. **Expanding the ecosystem's reach**: With the inclusion of multiple chains and custom contract creation, the Polkadot Contract Wizard will cater to a broader audience, encouraging more projects and developers to join the Polkadot and Kusama ecosystem. +​ +4. **Encouraging community growth and collaboration**: By offering comprehensive support and resources, we aim to foster a strong, collaborative community around the Polkadot Contract Wizard, encouraging users to share their experiences, contribute to the project, and help one another succeed. +​ +5. **Driving innovation and adoption**: By simplifying the process of working with smart contracts, we hope to inspire more users to experiment with new ideas and solutions, driving innovation and adoption within the Polkadot and Kusama ecosystem. +​ +## Team :busts_in_silhouette: +​ +### Team members +​ +- Diego Torres (Team leader / Product Owner) +- Gabriel Gonzalez (Rust Engineer) +- Luca Auet (Rust Engineer) +- Agustin Longoni (UI/UX Designer) +- Henry Palacios (Front-end engineer) +​ +### Contact +​ +- **Contact Name:** Diego Torres Borda +- **Contact Email:** diego@protofire.io +- **Website:** [protofire.io](https://protofire.io/) +​ +### Legal Structure +​ +- **Registered Address:** 1607 Ponce de Leon Avenue, GM-06, San Juan, PR, 00909 +- **Registered Legal Entity:** Altoros LLC (DBA Protofire) +​ +### Team's experience +​ +Protofire has proven expertise in building decentralized infrastructure, protocols, applications, and developer platforms to accelerate growth of network’s ecosystems. By delivering hands-on coding and contributions, Protofire specializes in supercharging developer adoption, bootstrapping, and network usage +We are not only a dev shop company, but we create long term partnerships with the projects we are part of, building and working as ambassadors for the community. We believe in the projects and also participate by running nodes and taking the validator or staker roles. +​ +### Team Code Repos +​ +- https://github.com/protofire/polkadot-contract-wizard/ +- https://github.com/protofire/ink-compiler-be +- https://github.com/protofire/moonbeam-web-core +- https://github.com/protofire/blockchain-learning-path +- https://github.com/protofire/omen-exchange +- https://github.com/protofire/kyber-pool-master-proxy-contract +​ +GitHub accounts of team members. +- https://github.com/alongoni +- https://github.com/henrypalacios +- https://github.com/0xLucca +- https://github.com/GabrielCamba +​ +### Team LinkedIn Profiles +​ +- https://www.linkedin.com/in/diego-torres-borda-94b70912/ +- https://www.linkedin.com/in/agustinlongoni/ +- https://www.linkedin.com/in/henrydpalacios/ +- https://www.linkedin.com/in/lucaauet/ +- https://www.linkedin.com/in/gabriel-nicolas-gonzalez/ +​ +## Development Status :open_book: +​ +We have successfully completed the previous grant, and we can confidently affirm that our platform, [contractwizard.xyz](https://www.contractwizard.xyz/), is now a user-friendly and highly useful tool. One of the key features of our platform is that it simplifies the deployment of standard smart contracts within the Dotsama ecosystem. With our platform, users no longer have to navigate through complex processes to deploy their contracts. Our streamlined approach means that anyone can deploy a smart contract without requiring advanced technical knowledge, saving time and resources. We are incredibly grateful for the support we have received so far, and we are committed to ensuring that our platform remains a top choice for deploying smart contracts within the Dotsama ecosystem. +​ +## Development Roadmap :nut_and_bolt: +​ +Described in project details. +​ +### Overview +​ +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 2.5 +- **Total Costs:** 52500 U$D +​ +## Milestones +​ +### Milestone 1 — Functionality Implementation and Educational Content +​ +- **Estimated duration:** 3 months +- **FTE:** 2.5 +- **Costs:** 52500 + +​ +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can use the new features. | +| **0c.** | Testing and Testing Guide | The code will have unit-test coverage to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that allows users to easily run the application. | +| 1. | Interaction with deployed contracts | The functionallity based on [step 1](#step1) of the Project Details section. | +| 2. | Interaction with custom smart contracts | The functionality based on [step 2](#step2) of the Project Details section. | +| 3. | Shareable Contract Interaction Links | The functionality corresponds to what's described on [step 3](#step3) of the Project Details section. | +| 4. | Support for multiple chains | The functionality to be implemented corresponds to [step 4](#step4) of the Project Details section. | + +​ +## Future Plans +​ +At contractwizard.xyz team in protofire, our mission is to continue innovating and developing our platform to cater to the ever-changing needs of the smart contract community. We recognize the importance of providing our users with a comprehensive tool that enables them to manage all ink! smart contracts, including those they have created custom. +​ +As we continue to develop our platform, we understand the importance of building a community around it. We believe that by creating a community of users, we can facilitate the sharing of knowledge, contracts, and different approaches to problem-solving. Through our platform, users will have the ability to share their experiences, ask questions, and engage with others within the community. This will create an environment that fosters innovation and encourages collaboration, leading to the development of new and exciting ideas. Our hope is that our platform will serve as a hub for all things smart contract-related, where users can come together to learn, grow, and innovate. +​ +**Custom contracts** +- Add the possibility of creating custom contracts, not only with the modifiers but adding the ability to write code using the interface. +- Compile the generated code and deploy it to different parachains. +- Following the comments made on the [pull request](https://github.com/w3f/Grants-Program/pull/1413#pullrequestreview-1234970716), our approach will be based on the [ink-playground](https://github.com/paritytech/ink-playground) in order to integrate writing custom code and compiling it. +​ +**Social Interaction** +- Create an account to store information. +- Save your created smart contracts. +- Be able to share them with the community and ask for help. +- Provide assistance to other community members. +​ +## Additional Information :heavy_plus_sign: +​ +**How did you hear about the Grants Program?** Web3 Foundation Website From 32b22c9e45af7bfbc2caf5743c2fab647a301426 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 10 Jul 2023 21:39:17 +0200 Subject: [PATCH 464/665] Update index.md --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index 56ae0d0809a..0c61e39c242 100644 --- a/applications/index.md +++ b/applications/index.md @@ -43,6 +43,8 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | +| [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | + [🔝](#2023) From 2266d78f46593c41fb720451ce171d0097c22a0f Mon Sep 17 00:00:00 2001 From: DarkingLee <49502360+DarkingLee@users.noreply.github.com> Date: Tue, 11 Jul 2023 04:00:47 +0800 Subject: [PATCH 465/665] Add Melodot proposal (#1804) * Create Melodot.md * Update milestones * Add milestone detail description --- applications/Melodot.md | 238 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 238 insertions(+) create mode 100644 applications/Melodot.md diff --git a/applications/Melodot.md b/applications/Melodot.md new file mode 100644 index 00000000000..56a692562d6 --- /dev/null +++ b/applications/Melodot.md @@ -0,0 +1,238 @@ +# Melodot: Incentive-compatible data availability layer + +- **Team Name:** ZeroDAO +- **Payment Address:** 0xEBCDa7c73EB5Dd7a4314cFf395bE07EB1E24c046 (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview 📄 + +#### Data Availability Layer + +The current data availability layer scheme requires the assumption that the network has at least the minimum number of honest nodes.However, due to the need to prevent data retention attacks, the samplers are required to be anonymous, making it difficult to measure the number of samplers. At the same time, samplers are more concerned with data related to themselves, resulting in an uneven distribution of total active samplers over time. The assumption of a minimum number of honest nodes affects the robustness of the data availability layer. + +Challenging issues in the data availability layer also include: who will perform distributed generation, who will reconstruct the data, who will store the data, how long will the data be stored, and how to ensure that these tasks are well done. + +One possible approach is to delegate these tasks to consensus validators, but there is a lack of effective incentive mechanisms. For cost considerations, not performing distributed generation, data reconstruction, and data storage is the most profitable for validators. In addition, consuming too many resources of consensus validators is very unfavorable for scalability. + +Melodot introduces the role of farmers by combining PoSpace, alleviating the system's dependence on the minimum number of honest nodes assumption, and completing an incentive-compatible distributed generation and data storage scheme. Consensus validators now act more like light clients, improving future scalability. You can learn more from this preliminary [whitepaper](https://www.notion.so/zerodao/Melodot-Data-Availability-Layer-Whitepaper-b72b1f3de81c40fc94a56763756ce34a). + +## Project Details + +### Architecture + +#### Erasure Coding and KZG Commitment + +Melodot uses 2D Reed-Solomon for data expansion, providing better sampling efficiency. It generates KZG commitments in the row direction, avoiding fraud proofs, similar to Ethereum's Darksharding. Block headers contain KZG commitments and data locations for different apps, allowing light clients to sample or download only data relevant to themselves. + +#### Farmers + +Farmers receive rewards through PoSpace, which is used to verify that participants have allocated a certain amount of storage space on their devices. The consensus mechanism is achieved through a time-memory trade-off approach, which has its origins in the [Beyond Hellman](https://www.semanticscholar.org/paper/Beyond-Hellman's-Time-Memory-Trade-Offs-with-to-of-Abusalah-Alwen/39e70d67eeb5ce140171f6d0629daec3b54d74f3) paper and has been adopted for use in the [Chia protocol](https://docs.chia.net/proof-of-space/). This method allows for a more efficient and secure consensus process compared to traditional energy-intensive mechanisms such as Proof of Work. [Subspace improves PoSpace](https://github.com/subspace/consensus-v2-research-paper) for storing "useful data" and is closely linked to KZG commitments. We are inspired by them, in contrast, Melodot's farmers receive rewards through PoSpace rather than reaching consensus. This incentive mechanism ensures that the network can still recover data when natural sampling samples are insufficient and guarantees data storage for at least a specific duration. + +Farmers need to complete the distributed generation of specified data, expanding the data generated by block proposers in the column direction. They then calculate the challenge eligibility through the generated data, similar to [Chia's filter](https://docs.chia.net/signage-and-infusion-points/), with only a small portion of farmers eligible to further search for solutions. This design reduces the computation load on farmers, avoids missing the submission of solutions, and allows farmers to devote more bandwidth and capacity resources to data availability sampling and storage. In addition, farmers are more inclined to generate all specified data in a distributed manner, as each chunk represents a potential lottery ticket. + +Farmers use the committed space to store blob data and maintain its timeliness. New data receives more rewards, while expired data will not be rewarded. Upon obtaining challenge eligibility, farmers need to search for solutions in the stored data, including chunk, data proofs, space proofs, etc. The system adjusts the difficulty based on the reward claims situation. Ultimately, the rewards farmers receive are linearly related to the size of the stored data space and depend on whether they have correctly and promptly completed distributed generation and necessary data reconstruction. + +#### Lifecycle + +![Untitled](https://pic.tom24h.com/zerodao/life.png) + +A complete blob transaction includes: + +- Publishing a blob transaction, including the original KZG commitment +- Block builders collect blob transactions and build blocks, erasure code data, and generate new commitments to be added to the block header +- Consensus validators verify block validity and, along with farmers, perform preliminary availability sampling (not ensuring 100% validity, but with high probability of being valid), either rejecting or accepting the block +- Farmers use the block data, commitments, and proofs learned in the previous step to generate specified columns in a distributed manner +- When the block is finalized + - Farmers with challenge eligibility complete solutions and claim rewards + - Light clients and consensus validators perform sampling simultaneously + - Farmers obtain more specified data from the network for storage and delete expired data + +Melodot is developed in phases, with the first phase not implementing the complete process. + +### Components + +In this phase, we will implement the following core components: + +1. **Erasure-Coding** + + A core module for erasure coding and KZG based on [rust-kzg](https://github.com/sifraitech/rust-kzg), including expanding data and generating commitments and proofs, verifying blob, batch verifying blobs, recovering data, verifying the correct expansion of 2D commitments, and expanding column data and witnesses. + +2. **Melo-Store** + + Interfaces for registering and managing applications, uploading data, and storing data validity data. + +3. **Consensus-related extensions** + +**`excutive_das`** pallet: An extension of the **`frame-excutive`** pallet for scheduling block execution and validation related to DAS + +**`system_das`** pallet: An extension of the **`frame-system`** pallet, adding new block header generation, actual data generation, and validation. + +4. **Sampling Core** + +The core crate that actually performs sampling, which several clients in the system depend on. This includes data availability sampling, obtaining and propagating data from the DHT network, and managing data through rocksdb. + +5. **Light Client** + +A light client that connects to the network and performs sampling based on the block state, including network implementation, distributed generation, data storage, and actual sampling. + +6. **`Melo-PoSpace`** + +A pallet for assigning distributed generation columns to farmers, verifying farmers' challenge chunk, and issuing rewards. + +7. **Farmer Client** + +Connects to the network, obtains raw data, and performs distributed generation; obtains challenges from the chain and searches for solutions to claim rewards. + +### **Non-Goals** + +The goal of the first phase is to minimally implement a usable system and will not fully implement the details described in the whitepaper. The main differences are: + +**PoSpace** + +In the first phase, we will only implement a preliminary version of PoSpace, not including the complete PoSpace process. [Subspace has done an excellent exploration in this regard](https://subspacelabs.notion.site/Subspace-Dilithium-Consensus-Specification-v2-3-274a730b53eb4c93a8d879b90de532ce). In the next phase of development, we should be able to reuse much of their work. + +**Complete Distributed Generation** + +This phase does not include complete distributed generation. Users still need to submit actual data transactions, so farmers and validators do not need to perform the first phase of sampling. + +## **Ecosystem Fit** + +### Similar Projects + +There are currently several data availability layer projects, including Ethereum Danksharding, Celestia, Avail, and Eigen DA. Our main difference from them is the introduction of farmers, which solves many tricky problems faced by the data availability layer. Unlike Danksharding, we decouple an independent data availability layer, which is the same principle as Polkadot not supporting smart contracts. Celestia uses a Merkle encoding pattern, requiring fraud proofs and additional assumptions, which we avoid. Avail's data layout uses a 1.5D scheme, which is unacceptable in terms of sampling efficiency, as detailed in the Melodot white paper. Eigen DA is an Ethereum re-collateralization layer implementation of a data availability scheme, with limited public information available, [but it should be in the form of a DA committee](https://ethresear.ch/t/unbundling-pbs-towards-protocol-enforced-proposer-commitments-pepc/13879), which has its applicable scenarios, but is not the same as Melodot. + +### **Relationship with Polkadot and substrate** + +1. With Melodot as a data availability layer, any parallel chain can easily become a Rollup settlement layer. Polkadot brings more secure interactions between settlement layers, significantly increasing Polkadot's capacity. +2. Other teams can develop their own data availability layers based on Melodot. + +## Team 👥 + +### Team members + +- Daqin Lee +- Zhidong Chen +- Sober Man + +### Contact + +- **Contact Name:** Daqin Lee +- **Contact Email:** [lee@melodot.io](mailto:lee@melodot.io) + +### Team's experience + +Daqin Lee: Full-stack Developer, Rust and Substrate Developer, core developer of Melodot. + +Chen Zhidong: Full-stack Developer, Tesla Machine Learning Engineer, [GoHack 2017](http://gohack2017.golangfoundation.org/) Hackathon [First Prize](https://github.com/sillydong/lbsengine), will serve as a technical advisor for Melodot. + +Sober Man: Embedded Engineer, with years of backend and embedded development experience. + +### Team Code Repos + +- https://github.com/ZeroDAO +- https://github.com/DarkingLee +- https://github.com/sillydong + +### Development Status + +ZeroDAO previously developed the Ourspace project, which is a reputation system utilizing social relationships and received support from W3F. After that, we shifted our focus to calculating all social networks in Web3. In this process, we found that they were either expensive to interact with or difficult to securely use on-chain. Through in-depth analysis, we summarized these issues as a lack of visibility. Therefore, we temporarily paused the development of Ourspace (we will continue to develop it later) and focused on researching the "visibility" issue, discovering that rollup technology is a good solution to this problem. The data availability layer is the first step in achieving this, and after extensive research, we designed Melodot. The work we have completed so far includes: + +1. [Whitepaper](https://www.notion.so/zerodao/Melodot-Data-Availability-Layer-Whitepaper-b72b1f3de81c40fc94a56763756ce34a): Completed a preliminary whitepaper. +2. [Research](https://zerodao.notion.site/Rollup-product-tracking-research-b9448e4464404736858e55972ea12152): We conducted some research on Rollup and data availability layer projects, and you can see the project list here. + +## Development Roadmap + +### Overview + +- **Total Estimated Duration:** 4.5 months +- **Full-Time Equivalent (FTE):** 1.5 +- **Total Costs:** 28,000 DAI + +### Milestone 1 — Erasure coding and KZG + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| ------- | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how the new functionality works and how they are used. | +| **0c.** | Testing and Testing Guide | Unit tests will completely cover the Core functionality to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles to demonstrate the full functionality of erasure coding and KZG commitments. | +| 1. | melo_erasure_coding | The core part of the system, including 2D erasure coding and KZG commitment-related primitives and common interfaces. | + +### Milestone 2 — Consensus + +- **Estimated duration:** 1.5 months +- **FTE:** 1 +- **Costs:** 7,000 USD + +| Number | Deliverable | Specification | +| ------- | ------------------------------ | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can spin up a client, connect to the client management application and data through a browser, and create a local development chain. | +| **0c.** | Testing and Testing Guide | Higher-level integration tests and unit tests for all modules. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles to start multiple nodes with different roles, create a local test network, and run all integration tests. | +| 1. | Substrate pallet: excutive_das | Depends on the `frame-executive` pallet, extending the DAS-related scheduling and data structures. The main functionalities include scheduling data availability throughout the lifecycle of blocks, which involves the block proposer constructing data, erasure coding, KZG commitments, and generating extended block headers. Validators verify if they are generated correctly. | +| 2. | Substrate pallet: system_das | Depends on the `frame-system` pallet, extending the DAS-related actual operations. The system_das is a specific implementation of the executive_das functionality, which primarily includes: 1) Extracting availability data 2)Applying erasure coding 3) Generating KZG commitments and proofs 4)Generating extended block headers. Validators: 1) Verify the correctness of the generated KZG commitments 2) Validate the proofs by conducting non-interactive challenge 3) Verify the correct generation of data availability block headers. | +| 3. | Substrate pallet: melo_store | Pallet for managing apps and submitting data. The main functions include dispatchable functions for application registration, permission management, and uploading availability data. It also encompasses an interface for availability management, allowing validators to modify data availability based on availability sampling. | +| 4. | melodot-client | Fully implemented data availability layer node client. | + +### Milestone 3 — Sampling + +- **Estimated duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 7,000 USD + +| Number | Deliverable | Specification | +| ------- | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can start a light client and connect to the network. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide Dockerfiles to start a light client, connect to the local test network, and run all integration tests. | +| **0e.** | Article | We will publish an article explaining how Melodot works, how to run a local test network, and how to run a light client. | +| 1. | Light client | A light client that connects to the network and efficiently performs sampling, stores sampling data, and maintains data availability confidence. | +| 2. | melo_sampling | A decoupled sampling module that provides core functionality related to data sampling. | + +### Milestone 4 — Farmer + +- **Estimated duration:** 1 month +- **FTE:** 2 +- **Costs:** 9,000 USD + +| Number | Deliverable | Specification | +| ------- | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can run a farmer client and earn rewards. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | We will publish an article explaining the farmer part and the future plans for Melodot, as well as how to run a farmer client. | +| 1. | melo_farmer | Implementation of the farmer client, used to connect to the melodot-client, solve challenges, and distribute and store data. | +| 2. | melo_PoSpace | A pallet used to assign distributed generation tasks to farmers and distribute rewards to farmers. | + +## **Future Plans** + +In the near future, we plan to establish a company as the core development team. Our long-term plan is to build the entire ecosystem through a DAO, and we have already formulated a centralized version of the DAO to be developed after the launch of the Melodot testnet. + +Our short-to-medium-term plan (6 months) includes: + +Melodot + +- Launch the testnet +- Identify and eliminate all possible security threats +- Complete the full PoSpace and distributed generation + +SDK + +- Develop an SDK based on Substrate for quickly launching settlement layers and sequencer + +## Additional Information➕ + +**How did you hear about the Grant Program?** + +Web3 Foundation website + +- Previous grant applications + +We have previously applied for ZeroDAO-node, which has now been renamed to ([ourspace](https://github.com/ZeroDAO/ourspace)). From ec72c6d607485ebb8b1a67b33187d6edb7692f6f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 11 Jul 2023 09:22:53 +0200 Subject: [PATCH 466/665] Update index.md Add Melodot --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 0c61e39c242..7711f3ccbe1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -44,6 +44,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | | [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | +| [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | [🔝](#2023) From ed5de3518d6b0ab8a35706735241b692969de9a2 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Tue, 11 Jul 2023 09:25:56 +0200 Subject: [PATCH 467/665] Fix website --- applications/Contract_wizard.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/applications/Contract_wizard.md b/applications/Contract_wizard.md index 4354af51aa1..a8c112eafa8 100644 --- a/applications/Contract_wizard.md +++ b/applications/Contract_wizard.md @@ -24,18 +24,18 @@ These enhancements will allow users to create, modify, deploy and interact with ​ ### Project Details ​ -#### 1. Interact with deployed contracts +#### 1. Interact with deployed contracts We will create a functionality that enables users to directly interact with their deployed contracts via the user interface of the wizard. This functionality will be generated dynamically according to the metadata of the contracts. With this, users will be able to conveniently and effectively manage their contracts and carry out interactions using the same tool. ​ -#### 2. Interaction with custom smart contracts +#### 2. Interaction with custom smart contracts Our platform will offer the capability to interact with any contract of their choice. To utilize this feature, they simply need to provide the metadata, network, and address associated with the contract. Once this information is ready, the user interface will automatically generate a customized user-friendly layout for allowing people to easily interact with their custom contracts. ​ -#### 3. Shareable Contract Interaction Links +#### 3. Shareable Contract Interaction Links To enhance the user experience and encourage collaboration, we plan to implement a feature for shareable contract interaction links. Once a developer deploys a contract or uploads the metadata for interacting with it on our platform, they can generate a unique, shareable link. This link will contain all necessary information for interacting with the contract, essentially encapsulating the contract's ABI (Application Binary Interface) and its address on the blockchain. Users receiving this link can interact with the contract directly, without needing to reupload the metadata or know the contract's specifics. This feature not only simplifies the process of contract interaction but also fosters collaboration and sharing within the developer community. ​ -#### 4. Support for multiple chains +#### 4. Support for multiple chains This tool will offer a feature that enables users to connect to parachains implementing the contracts pallet. We will provide a list of some of these parachains in Polkadot, Kusama, and Rococo networks. Additionally, users will have the option to connect to a network that is not listed by specifying the web socket. ​ ### Tentative Mockups @@ -102,10 +102,10 @@ We are not only a dev shop company, but we create long term partnerships with th - https://github.com/protofire/kyber-pool-master-proxy-contract ​ GitHub accounts of team members. -- https://github.com/alongoni -- https://github.com/henrypalacios -- https://github.com/0xLucca -- https://github.com/GabrielCamba +- https://github.com/alongoni +- https://github.com/henrypalacios +- https://github.com/0xLucca +- https://github.com/GabrielCamba ​ ### Team LinkedIn Profiles ​ From 8f4705650fc56450cec124702e7654f1823bfb59 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 11 Jul 2023 14:52:15 +0200 Subject: [PATCH 468/665] Update index.md --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7711f3ccbe1..1cc96a4d5d1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -62,7 +62,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | -| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☐ | ☐ | +| [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☒ | ☒ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | From 8565e27445cfa360910b2821a8662ec23ae2e018 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 11 Jul 2023 17:07:15 +0200 Subject: [PATCH 469/665] Update index.md High-availability validator setup complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1cc96a4d5d1..f2fc9531b18 100644 --- a/applications/index.md +++ b/applications/index.md @@ -136,7 +136,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | -| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☐ | +| [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | From de056edff7f6b1efe48b349e8505a3cd32cdf7da Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 12 Jul 2023 02:28:35 -0400 Subject: [PATCH 470/665] Update index.md (#1841) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index f2fc9531b18..12d9a901979 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,7 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☒ | ☒ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | From 7b9a4d96f88a826780b72f593ab4824043d9ccb6 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 12 Jul 2023 02:29:00 -0400 Subject: [PATCH 471/665] Update index.md (#1840) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 12d9a901979..0c97c92e820 100644 --- a/applications/index.md +++ b/applications/index.md @@ -165,7 +165,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TDSoftware](https://www.tdsoftware.de/) | [Substrate IPFS Utilities](ipfs_utilities.md) | [GitHub](https://github.com/TDSoftware) | ☐ | ☒ | ☒ | | [Ink Boxes Team](https://github.com/nerdsince98) | [Ink Boxes](ink-boxes.md) | [GitHub](https://github.com/avirajkhare00/ink-boxes/) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell Phase 2](ParaSpell_follow-up.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | -| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☐ | +| [SubRelay](http://subrelay.xyz/) | [SubRelay](subrelay.md) | [GitHub](https://github.com/subrelay) | ☐ | ☒ | ☒ | | [Wow Labz](http://www.wowlabz.com) | [Dot Marketplace Phase 3](dot_marketplace-Phase3.md) | [GitHub](https://github.com/orgs/WowLabz) | ☐ | ☒ | ☒ | | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☒ | ☒ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | From 14f65aa703fc0b5a02ea08f4bddd9a6c085f8b74 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Wed, 12 Jul 2023 03:29:20 -0300 Subject: [PATCH 472/665] Update index.md (#1839) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0c97c92e820..215d9f07da8 100644 --- a/applications/index.md +++ b/applications/index.md @@ -315,7 +315,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stardust Labs Inc.](https://stardust.finance/) | [Uncollateralized Stablecoin Research and Design](./stardust.md) | [GitHub](https://github.com/adit313/) | ☐ | ☒ | ☒ | | [Hashed Systems](https://hashed.io) | [Native Bitcoin Vaults (NBV)](./native-bitcoin-vaults.md) | [GitHub](https://github.com/hashed-io) | ☐ | ☒ | ☒ | | [Setheum](https://setheum.xyz/) | [Setheum HighEnd LaunchPad Crowdsales Module](./setheum.md) | [GitHub](https://github.com/Setheum-Labs) | ☐ | ☐ | ☐ | -| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☐ | +| [SaaS3 Lab](https://www.saas3.io) | [SaaS3](./SaaS3.md) | [GitHub](https://github.com/SaaS3Lab) | ☐ | ☒ | ☒ | | [NUTS Finance](https://nuts.finance) | [DOT-pegged derivative built on top of the stable asset protocol](./tdot.md) | [GitHub](https://github.com/nutsfinance/) | ☒ | ☒ | ☐ | | [Strategy Object](https://strategyobject.com/) | [Substrate Client for Java](./substrate_client_java.md) | [GitHub](https://github.com/strategyobject/substrate-client-java) | ☐ | ☒ | ☐ | From 482d9cddbf9dcc6d6bdd756d8bef096b7b91a150 Mon Sep 17 00:00:00 2001 From: anshulWeb3 <100308982+anshulWeb3@users.noreply.github.com> Date: Wed, 12 Jul 2023 12:30:45 +0530 Subject: [PATCH 473/665] xcm tool for NFTs (#1798) * xcm tool for NFTs * social proof added --- applications/xNFT.md | 119 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 applications/xNFT.md diff --git a/applications/xNFT.md b/applications/xNFT.md new file mode 100644 index 00000000000..8d6df048fee --- /dev/null +++ b/applications/xNFT.md @@ -0,0 +1,119 @@ +# xNFT + +- **Team Name:** Starks +- **Payment Address:** 0x2492237FA7698B8F3B35F2be4be3B1128439Ec8d (USDC) ** +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is in response to the open RFP [xcm-tools](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/xcm-tool.md) + +### Overview + +The Crosschain NFT Pallet is a unique initiative designed to facilitate the smooth movement of NFTs across various blockchain networks, utilizing the XCM protocol. Through the implementation of this pallet, individuals can effortlessly exchange NFTs between relay chains and parachains. + +### Project Details + +![xNFT](https://github.com/anshulWeb3/Grants-Program/assets/100308982/9ad19535-10d4-4dbe-a2ac-4f1ba22f1c00) + +#### The xNFT Pallet provides the following extrinsics (functions): + +1. transferSingle(nft_id, dest, dest_weight_limit) —> DispatchResult ; transfer an NFT with the NFT ID + - nft_id — the ID of the NFT being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). + - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +2. transferMulti(nfts, dest, dest_weight_limit) —> DispatchResult ; transfer multiple non-fungible tokens, defined by their multilocation + - nfts — the IDs of the NFTs being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate) + - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +3. transferSingleWithFee(nft_id, dest_fee, dest, dest_weight_limit) —> DispatchResult ; transfer a non-fungible tokens, but it allows the sender to pay the fee with a different asset, defined by its multilocation + - nft_id — the ID of the NFT being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). + - dest_fee — a multilocation to define the asset used to pay for the XCM execution in the target chain + - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +4. transferMultiWithFees(nfts, dest_fee, dest, dest_weight_limit) —> DispatchResult ; transfer several non-fingible tokens, but it allows the sender to pay the fee with a different asset, defined by their multilocation + - nfts — the IDs of the NFTs being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). + - dest_fee — a multilocation to define the asset used to pay for the XCM execution in the target chain + - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +#### A feature will be added to the XCM VM for minting NFt on target chain using the encoded data from source chain. +#### This xNFT pallet will be tightly coupled with the NFT pallet in Substrate + +#### Project does not include: +- This pallet does not let you create, mint or burn any NFT this just to send them to other chains by making use of the XCM functionality +- This pallet will not be able to transfer any NFT that is not registered using the NFT pallet for Substrate(i.e NFT deployed as smart contracts). + +### Ecosystem Fit + +- The implementation of the xNFT pallet would introduce improved interoperability, expanded applications, increased liquidity, and enhanced flexibility to the Substrate ecosystem. It would foster the growth and vitality of the community, while facilitating seamless exchange and utilization of NFTs across different Substrate-based blockchains. +1. Interoperability: The xNFT pallet would enable effortless transfer of NFTs across various blockchains within the Substrate ecosystem. This would enhance connectivity and compatibility between Substrate-based chains, promoting a more integrated and interconnected ecosystem. +2. Expanded Applications: Cross-chain NFT transfers would unlock new possibilities and use cases for NFTs within the Substrate ecosystem. Developers and users would have the ability to leverage NFTs from different chains, enabling cross-chain collaborations, marketplace integrations, and enhanced utility for NFT-based applications. +3. Improved NFT Liquidity: By facilitating cross-chain transfers, the xNFT pallet would enhance liquidity for NFTs within the Substrate ecosystem. NFTs from different chains could be freely traded and utilized, expanding their market reach and creating more opportunities for value exchange. +4. Flexibility and Choice: The xNFT pallet would provide developers and users with the flexibility to choose the most suitable blockchain for their NFT requirements. They would be able to mint, transfer, and interact with NFTs on various Substrate chains, ensuring compatibility with specific needs or preferences. +5. Ecosystem Growth: The introduction of the xNFT pallet would contribute to the growth of the Substrate ecosystem, attracting developers and projects interested in building NFT-related applications or platforms. This would foster innovation and expand the range of offerings within the ecosystem. +6. Adoption of XCM: By utilizing XCM for cross-chain NFT transfers, the xNFT pallet would promote broader adoption of the Cross-Chain Messaging protocol within the Substrate ecosystem. This would reinforce the significance of interoperability and cross-chain communication, encouraging other projects and pallets to integrate XCM for various use cases. +7. Community Engagement: The xNFT pallet would generate interest among developers, NFT enthusiasts, and users within the Substrate community. It would encourage collaboration, knowledge sharing, and participation in the development of cross-chain NFT solutions, further strengthening community bonds and promoting ecosystem growth. + +## Team :busts_in_silhouette: + +### Team members + +- **Team lead:** [Aqueel Abbas](https://github.com/tur461) +- **Team member:** [Jatinder Singh](https://github.com/jatinder116?tab=repositories) + + +### Contact + +- **Contact Name:** Jatinder Singh +- **Contact Email:** jatindersngh116@gmail.com + +### Legal Structure + +- **Registered Address:** C-208, Phase 8B, Industrial Area, Sector 74, Sahibzada Ajit Singh Nagar, Punjab 160059 +- **Registered Legal Entity:** AntLabs India Pvt. Ltd. + +### Team's experience + +We are a skilled and dedicated group of professionals who possess extensive experience working with the Substrate ecosystem. Our team members have successfully completed numerous projects related to Substrate development, including building custom blockchains, implementing governance mechanisms, and designing smart contract for intuitive dApp functionalites. We understand the importance of technical partnerships in fostering innovation and growth within the blockchain industry. We are confident that our knowledge of the Substrate framework and its capabilities will enable us to contribute significantly to the development and expansion of Polka's ecosystem. + +Stack exchange profiles of some of our team members: +1. https://substrate.stackexchange.com/users/3136/wakar-seraj-khan +2. https://substrate.stackexchange.com/users/406/akash-singh +3. https://substrate.stackexchange.com/users/4068/upendra-singh + +We are the technical partners for [Peer Coin](https://explorer.peer.inc/) + +## Development Status :open_book: + +[xcm-tools](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/xcm-tool.md) + +## Development Roadmap :nut_and_bolt: + +### Overview + +### Milestone 1 — xNFT Pallet + +* **Total Estimated Duration:** 6 weeks +* **Total Costs:** 9800 USD +- **FTE:** 2 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can transfer nft across chains | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | +| 1. | xNFT | We will create a Substrate module that will handle cross-chain NFT transfers using these functions: 1. transferSingle 2. transferMulti 3. transferSingleWithFee 4. transferMultiWithFees | + +## Future Plans + +Currently this project is solely to transfer NFT between Substrate based chains. In future we plan to extend this functionality to non-substrate chains like Ethereum, Solana etc. We also plan to extend the functionality of this pallet to substrate based solo-chains as well(solo to solo). We will also add support to transfer NFT deployed to the chains as smart contracts. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** A friend recommended From 846b90f73a5bd8f286b3d0fce55b129f87d2be9f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 12 Jul 2023 09:03:09 +0200 Subject: [PATCH 474/665] Update index.md Add XCM tool for NFTs --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 215d9f07da8..7ea65f3f53c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -45,6 +45,7 @@ Use this page for an overview of all public grants and their status. Use the sid | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | | [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | | [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | +| [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | [🔝](#2023) From f89bff2cee5067816f8e7ec7c3dae254bfe95db3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 12 Jul 2023 16:39:04 +0200 Subject: [PATCH 475/665] Update README.md Fix link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b1d39f5ca1b..41719ccf59d 100644 --- a/README.md +++ b/README.md @@ -154,7 +154,7 @@ The W3F Grants Program offers different grant levels to help you best depending 2. In the newly created fork, create a copy of the application template ([`applications/application-template.md`](applications/application-template.md)). If you're using the GitHub web interface, you will need to create a new file and copy the [contents](https://raw.githubusercontent.com/w3f/Grants-Program/master/applications/application-template.md) of the template inside the new one. Make sure you **do not modify the template file directly**. In the case of a maintenance application, use the maintenance template ([`maintenance template`](applications/maintenance/maintenance-template.md)) instead. In the case of a research application, use the research template ([`research template`](applications/application-template-research.md)) instead. 3. Name the new file after your project: `project_name.md`. 4. Fill out the template with the details of your project. The more information you provide, the faster the review. Please refer to our [Grant guidelines for most popular grant categories](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md) and make sure your deliverables present a similar same level of detail. To get an idea of what a strong application looks like, you can have a look at the following examples: [1](https://github.com/w3f/Grants-Program/blob/master/applications/project_aurras_mvp_phase_1.md), [2](https://github.com/w3f/Grants-Program/blob/master/applications/project_bodhi.md), [3](https://github.com/w3f/Grants-Program/blob/master/applications/pontem.md), [4](https://github.com/w3f/Grants-Program/blob/master/applications/spartan_poc_consensus_module.md). Naturally, if you're only applying for a smaller grant that only consists of, say, UI work, you don't need to provide as much detail. - 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. + 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grants-Program). The pull request should only contain _one new file_—the Markdown file you created from the template. 6. You will see a comment template that contains a checklist. You can leave it as is and tick the checkboxes once the pull request has been created. Please read through these items and check all of them. 7. Sign off on the [terms and conditions](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) presented by the [CLA assistant](https://github.com/claassistantio) bot as a Contributor License Agreement. You might need to reload the pull request to see its comment. From 217af20ae10d07b2046377feff46f5f7c0402d88 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 12 Jul 2023 11:10:05 -0400 Subject: [PATCH 476/665] Delete application_approved.yml (#1843) --- .github/workflows/application_approved.yml | 30 ---------------------- 1 file changed, 30 deletions(-) delete mode 100644 .github/workflows/application_approved.yml diff --git a/.github/workflows/application_approved.yml b/.github/workflows/application_approved.yml deleted file mode 100644 index 2448ce96af9..00000000000 --- a/.github/workflows/application_approved.yml +++ /dev/null @@ -1,30 +0,0 @@ -name: Approvals notification - -on: - pull_request_review: - types: [submitted] - -jobs: - send_matrix_approved_msg: - if: github.event.review.state == 'approved' && contains(github.event.pull_request.body, 'Project Abstract') - runs-on: ubuntu-latest - steps: - - run: echo 'APPROVALS=?' >> $GITHUB_ENV - - if: contains(github.event.pull_request.body, '[x] **Level 1**') - run: echo 'APPROVALS=2' >> $GITHUB_ENV - - if: contains(github.event.pull_request.body, '[x] **Level 2**') - run: echo 'APPROVALS=3' >> $GITHUB_ENV - - if: contains(github.event.pull_request.body, '[x] **Level 3**') - run: echo 'APPROVALS=5' >> $GITHUB_ENV - - id: 'reviews' - uses: 'jrylan/github-action-reviews-counter@main' - with: - repo-token: '${{ secrets.GITHUB_TOKEN }}' - - uses: fadenb/matrix-chat-message@v0.0.6 - with: - homeserver: 'matrix.web3.foundation' - token: ${{ secrets.MATRIX_TOKEN }} - channel: ${{ secrets.MATRIX_CHANNEL_ID }} - message: | - PR APPROVED: [${{ github.event.pull_request.title }}](https://github.com/w3f/Grants-Program/pull/${{ github.event.pull_request.number }}) has been approved by ${{ github.event.review.user.login }}. - Approvals: ${{ steps.reviews.outputs.approved }}/${{ env.APPROVALS }} \ No newline at end of file From 3a18a5bc486b004187eaeed352fe897d3ef25712 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 13 Jul 2023 10:47:04 +0200 Subject: [PATCH 477/665] update yarn lock --- yarn.lock | 507 +++++++++++++++++++++++++++--------------------------- 1 file changed, 253 insertions(+), 254 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1967817b8e3..980a636fa0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -153,10 +153,10 @@ dependencies: "@babel/highlight" "^7.22.5" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.5.tgz#b1f6c86a02d85d2dd3368a2b67c09add8cd0c255" - integrity sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA== +"@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.22.9.tgz#71cdb00a1ce3a329ce4cbec3a44f9fef35669730" + integrity sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ== "@babel/core@7.12.9": version "7.12.9" @@ -181,30 +181,30 @@ source-map "^0.5.0" "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.21.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.5.tgz#d67d9747ecf26ee7ecd3ebae1ee22225fe902a89" - integrity sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f" + integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w== dependencies: "@ampproject/remapping" "^2.2.0" "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" - "@babel/helper-module-transforms" "^7.22.5" - "@babel/helpers" "^7.22.5" - "@babel/parser" "^7.22.5" + "@babel/generator" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.9" + "@babel/helper-module-transforms" "^7.22.9" + "@babel/helpers" "^7.22.6" + "@babel/parser" "^7.22.7" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" + "@babel/traverse" "^7.22.8" "@babel/types" "^7.22.5" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" - semver "^6.3.0" + semver "^6.3.1" -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.5.tgz#1e7bf768688acfb05cf30b2369ef855e82d984f7" - integrity sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA== +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.7", "@babel/generator@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" + integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== dependencies: "@babel/types" "^7.22.5" "@jridgewell/gen-mapping" "^0.3.2" @@ -225,52 +225,51 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz#fc7319fc54c5e2fa14b2909cf3c5fd3046813e02" - integrity sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw== +"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892" + integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== dependencies: - "@babel/compat-data" "^7.22.5" + "@babel/compat-data" "^7.22.9" "@babel/helper-validator-option" "^7.22.5" - browserslist "^4.21.3" + browserslist "^4.21.9" lru-cache "^5.1.1" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.5.tgz#2192a1970ece4685fbff85b48da2c32fcb130b7c" - integrity sha512-xkb58MyOYIslxu3gKmVXmjTtUPvBU4odYzbiIQbWwLKIHCsx6UGZGX6F1IznMFVnDdirseUZopzN+ZRt8Xb33Q== +"@babel/helper-create-class-features-plugin@^7.22.5", "@babel/helper-create-class-features-plugin@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" + integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-member-expression-to-functions" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/helper-replace-supers" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - semver "^6.3.0" + "@babel/helper-split-export-declaration" "^7.22.6" + semver "^6.3.1" "@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.5.tgz#bb2bf0debfe39b831986a4efbf4066586819c6e4" - integrity sha512-1VpEFOIbMRaXyDeUwUfmTIxExLwQ+zkW+Bh5zXpApA3oQedBx9v/updixWxnx/bZpKw7u8VxWjb/qWpIcmPq8A== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz#9d8e61a8d9366fe66198f57c40565663de0825f6" + integrity sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" regexpu-core "^5.3.1" - semver "^6.3.0" + semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz#487053f103110f25b9755c5980e031e93ced24d8" - integrity sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg== +"@babel/helper-define-polyfill-provider@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a" + integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A== dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" debug "^4.1.1" lodash.debounce "^4.0.8" resolve "^1.14.2" - semver "^6.1.2" "@babel/helper-environment-visitor@^7.22.5": version "7.22.5" @@ -306,19 +305,16 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz#0f65daa0716961b6e96b164034e737f60a80d2ef" - integrity sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw== +"@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.22.5", "@babel/helper-module-transforms@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz#92dfcb1fbbb2bc62529024f72d942a8c97142129" + integrity sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-module-imports" "^7.22.5" "@babel/helper-simple-access" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" "@babel/helper-validator-identifier" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" "@babel/helper-optimise-call-expression@^7.22.5": version "7.22.5" @@ -332,32 +328,28 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== "@babel/helper-remap-async-to-generator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz#14a38141a7bf2165ad38da61d61cf27b43015da2" - integrity sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" + integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" - "@babel/helper-wrap-function" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/helper-wrap-function" "^7.22.9" -"@babel/helper-replace-supers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz#71bc5fb348856dea9fdc4eafd7e2e49f585145dc" - integrity sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg== +"@babel/helper-replace-supers@^7.22.5", "@babel/helper-replace-supers@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz#cbdc27d6d8d18cd22c81ae4293765a5d9afd0779" + integrity sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-member-expression-to-functions" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" - "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" - "@babel/types" "^7.22.5" "@babel/helper-simple-access@^7.22.5": version "7.22.5" @@ -373,10 +365,10 @@ dependencies: "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz#88cf11050edb95ed08d596f7a044462189127a08" - integrity sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ== +"@babel/helper-split-export-declaration@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c" + integrity sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g== dependencies: "@babel/types" "^7.22.5" @@ -395,23 +387,22 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz#de52000a15a177413c8234fa3a8af4ee8102d0ac" integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== -"@babel/helper-wrap-function@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz#44d205af19ed8d872b4eefb0d2fa65f45eb34f06" - integrity sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw== +"@babel/helper-wrap-function@^7.22.9": + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9" + integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q== dependencies: "@babel/helper-function-name" "^7.22.5" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.5.tgz#74bb4373eb390d1ceed74a15ef97767e63120820" - integrity sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" + integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== dependencies: "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.5" + "@babel/traverse" "^7.22.6" "@babel/types" "^7.22.5" "@babel/highlight@^7.22.5": @@ -423,10 +414,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.5.tgz#721fd042f3ce1896238cf1b341c77eb7dee7dbea" - integrity sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q== +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" + integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" @@ -621,10 +612,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.5.tgz#7336356d23380eda9a56314974f053a020dab0c3" - integrity sha512-gGOEvFzm3fWoyD5uZq7vVTD57pPJ3PczPUD/xCFGjzBpUosnklmXyKnGQbbbGs1NPNPskFex0j93yKbHt0cHyg== +"@babel/plugin-transform-async-generator-functions@^7.22.7": + version "7.22.7" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz#053e76c0a903b72b573cb1ab7d6882174d460a1b" + integrity sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" @@ -671,19 +662,19 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.5.tgz#635d4e98da741fad814984639f4c0149eb0135e1" - integrity sha512-2edQhLfibpWpsVBx2n/GKOz6JdGQvLruZQfGr9l1qes2KQaWswjBzhQF7UDUZMNaMMQeYnQzxwOMPsbYF7wqPQ== +"@babel/plugin-transform-classes@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz#e04d7d804ed5b8501311293d1a0e6d43e94c3363" + integrity sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-optimise-call-expression" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-replace-supers" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" globals "^11.1.0" "@babel/plugin-transform-computed-properties@^7.22.5": @@ -879,10 +870,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.5.tgz#1003762b9c14295501beb41be72426736bedd1e0" - integrity sha512-AconbMKOMkyG+xCng2JogMCDcqW8wedQAqpVIL4cOSescZ7+iW8utC6YDZLMCSUIReEA733gzRSaOSXMAt/4WQ== +"@babel/plugin-transform-optional-chaining@^7.22.5", "@babel/plugin-transform-optional-chaining@^7.22.6": + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564" + integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -976,16 +967,16 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.18.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz#ca975fb5e260044473c8142e1b18b567d33c2a3b" - integrity sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz#a87b11e170cbbfb018e6a2bf91f5c6e533b9e027" + integrity sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ== dependencies: "@babel/helper-module-imports" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - semver "^6.3.0" + babel-plugin-polyfill-corejs2 "^0.4.4" + babel-plugin-polyfill-corejs3 "^0.8.2" + babel-plugin-polyfill-regenerator "^0.5.1" + semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.22.5": version "7.22.5" @@ -1024,12 +1015,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typescript@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.5.tgz#5c0f7adfc1b5f38c4dbc8f79b1f0f8074134bd7d" - integrity sha512-SMubA9S7Cb5sGSFFUlqxyClTA9zWJ8qGQrppNUm05LtFuN1ELRFNndkix4zUJrC9F+YivWwa1dHMSyo0e0N9dA== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz#91e08ad1eb1028ecc62662a842e93ecfbf3c7234" + integrity sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.22.5" @@ -1065,12 +1056,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.20.2": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.5.tgz#3da66078b181f3d62512c51cf7014392c511504e" - integrity sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A== + version "7.22.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.9.tgz#57f17108eb5dfd4c5c25a44c1977eba1df310ac7" + integrity sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g== dependencies: - "@babel/compat-data" "^7.22.5" - "@babel/helper-compilation-targets" "^7.22.5" + "@babel/compat-data" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.9" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" @@ -1095,13 +1086,13 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.5" + "@babel/plugin-transform-async-generator-functions" "^7.22.7" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" "@babel/plugin-transform-block-scoping" "^7.22.5" "@babel/plugin-transform-class-properties" "^7.22.5" "@babel/plugin-transform-class-static-block" "^7.22.5" - "@babel/plugin-transform-classes" "^7.22.5" + "@babel/plugin-transform-classes" "^7.22.6" "@babel/plugin-transform-computed-properties" "^7.22.5" "@babel/plugin-transform-destructuring" "^7.22.5" "@babel/plugin-transform-dotall-regex" "^7.22.5" @@ -1126,7 +1117,7 @@ "@babel/plugin-transform-object-rest-spread" "^7.22.5" "@babel/plugin-transform-object-super" "^7.22.5" "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.22.6" "@babel/plugin-transform-parameters" "^7.22.5" "@babel/plugin-transform-private-methods" "^7.22.5" "@babel/plugin-transform-private-property-in-object" "^7.22.5" @@ -1144,11 +1135,11 @@ "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" "@babel/preset-modules" "^0.1.5" "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.3" - babel-plugin-polyfill-corejs3 "^0.8.1" - babel-plugin-polyfill-regenerator "^0.5.0" - core-js-compat "^3.30.2" - semver "^6.3.0" + babel-plugin-polyfill-corejs2 "^0.4.4" + babel-plugin-polyfill-corejs3 "^0.8.2" + babel-plugin-polyfill-regenerator "^0.5.1" + core-js-compat "^3.31.0" + semver "^6.3.1" "@babel/preset-modules@^0.1.5": version "0.1.5" @@ -1190,17 +1181,17 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.18.6": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.5.tgz#bbc769b48edb2bdfd404b65ad1fc3952bf33e3c2" - integrity sha512-TNPDN6aBFaUox2Lu+H/Y1dKKQgr4ucz/FGyCz67RVYLsBpVpUFf1dDngzg+Od8aqbrqwyztkaZjtWCZEUOT8zA== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz#e8e625eb3db29491e0326b3aeb9929c43b270ae4" + integrity sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw== dependencies: core-js-pure "^3.30.2" regenerator-runtime "^0.13.11" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.5.tgz#8564dd588182ce0047d55d7a75e93921107b57ec" - integrity sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA== + version "7.22.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" + integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== dependencies: regenerator-runtime "^0.13.11" @@ -1213,18 +1204,18 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.5.tgz#44bd276690db6f4940fdb84e1cb4abd2f729ccd1" - integrity sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ== +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": + version "7.22.8" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" + integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== dependencies: "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.5" + "@babel/generator" "^7.22.7" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" - "@babel/helper-split-export-declaration" "^7.22.5" - "@babel/parser" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/parser" "^7.22.7" "@babel/types" "^7.22.5" debug "^4.1.0" globals "^11.1.0" @@ -1691,19 +1682,19 @@ dependencies: "@hapi/hoek" "^9.0.0" -"@jest/schemas@^29.4.3": - version "29.4.3" - resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.4.3.tgz#39cf1b8469afc40b6f5a2baaa146e332c4151788" - integrity sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg== +"@jest/schemas@^29.6.0": + version "29.6.0" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.0.tgz#0f4cb2c8e3dca80c135507ba5635a4fd755b0040" + integrity sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ== dependencies: - "@sinclair/typebox" "^0.25.16" + "@sinclair/typebox" "^0.27.8" -"@jest/types@^29.5.0": - version "29.5.0" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.5.0.tgz#f59ef9b031ced83047c67032700d8c807d6e1593" - integrity sha512-qbu7kN6czmVRc3xWFQcAN03RAUamgppVUdXrvl1Wr3jlNF93o9mJbGcDWrwGB6ht44u7efB1qCFgVQmca24Uog== +"@jest/types@^29.6.1": + version "29.6.1" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.1.tgz#ae79080278acff0a6af5eb49d063385aaa897bf2" + integrity sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw== dependencies: - "@jest/schemas" "^29.4.3" + "@jest/schemas" "^29.6.0" "@types/istanbul-lib-coverage" "^2.0.0" "@types/istanbul-reports" "^3.0.0" "@types/node" "*" @@ -1730,9 +1721,12 @@ integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== "@jridgewell/source-map@^0.3.3": - version "0.3.4" - resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.4.tgz#856a142864530d4059dda415659b48d37db2d556" - integrity sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw== + version "0.3.5" + resolved "https://registry.yarnpkg.com/@jridgewell/source-map/-/source-map-0.3.5.tgz#a3bb4d5c6825aab0d281268f47f6ad5853431e91" + integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== + dependencies: + "@jridgewell/gen-mapping" "^0.3.0" + "@jridgewell/trace-mapping" "^0.3.9" "@jridgewell/sourcemap-codec@1.4.14": version "1.4.14" @@ -1792,6 +1786,11 @@ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== +"@nicolo-ribaudo/semver-v6@^6.3.3": + version "6.3.3" + resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" + integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1852,10 +1851,10 @@ resolved "https://registry.yarnpkg.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz#cff8ffadc372ad29fd3f78277aeb29e632cc70df" integrity sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ== -"@sinclair/typebox@^0.25.16": - version "0.25.24" - resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" - integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== "@sindresorhus/is@^0.14.0": version "0.14.0" @@ -2140,9 +2139,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.40.2" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.40.2.tgz#2833bc112d809677864a4b0e7d1de4f04d7dac2d" - integrity sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ== + version "8.44.0" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.0.tgz#55818eabb376e2272f77fbf5c96c43137c3c1e53" + integrity sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2173,11 +2172,11 @@ "@types/serve-static" "*" "@types/hast@^2.0.0": - version "2.3.4" - resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.4.tgz#8aa5ef92c117d20d974a82bdfb6a648b08c0bafc" - integrity sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g== + version "2.3.5" + resolved "https://registry.yarnpkg.com/@types/hast/-/hast-2.3.5.tgz#08caac88b44d0fdd04dc17a19142355f43bd8a7a" + integrity sha512-SvQi0L/lNpThgPoleH53cdjB3y9zpLlVjRbqB3rH8hx1jiRSBGAhyjV3H+URFjNVRqt2EdYNrbZE5IsGlNfpRg== dependencies: - "@types/unist" "*" + "@types/unist" "^2" "@types/history@^4.7.11": version "4.7.11" @@ -2226,11 +2225,11 @@ integrity sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA== "@types/mdast@^3.0.0": - version "3.0.11" - resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.11.tgz#dc130f7e7d9306124286f6d6cee40cf4d14a3dc0" - integrity sha512-Y/uImid8aAwrEA24/1tcRZwpxX3pIFTSilcNDKSPn+Y2iDywSEachzRuvgAYYLR3wpGXAsMbv5lvKLDZLeYPAw== + version "3.0.12" + resolved "https://registry.yarnpkg.com/@types/mdast/-/mdast-3.0.12.tgz#beeb511b977c875a5b0cc92eab6fcac2f0895514" + integrity sha512-DT+iNIRNX884cx0/Q1ja7NyUPpZuv0KPyL5rGNxm1WC1OtHstl7n4Jb7nk+xacNShQMbczJjt8uFzznpp6kYBg== dependencies: - "@types/unist" "*" + "@types/unist" "^2" "@types/mime@*": version "3.0.1" @@ -2253,9 +2252,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*": - version "20.3.3" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.3.3.tgz#329842940042d2b280897150e023e604d11657d6" - integrity sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw== + version "20.4.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" + integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== "@types/node@^17.0.5": version "17.0.45" @@ -2370,10 +2369,10 @@ dependencies: "@types/node" "*" -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": - version "2.0.6" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.6.tgz#250a7b16c3b91f672a24552ec64678eeb1d3a08d" - integrity sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ== +"@types/unist@^2", "@types/unist@^2.0.0", "@types/unist@^2.0.2", "@types/unist@^2.0.3": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.7.tgz#5b06ad6894b236a1d2bd6b2f07850ca5c59cf4d6" + integrity sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g== "@types/ws@^8.5.5": version "8.5.5" @@ -2544,9 +2543,9 @@ acorn-walk@^8.0.0: integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.0.4, acorn@^8.7.1, acorn@^8.8.2: - version "8.9.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" - integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== + version "8.10.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" + integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== address@^1.0.1, address@^1.1.2: version "1.2.2" @@ -2779,29 +2778,29 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-polyfill-corejs2@^0.4.3: - version "0.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz#75044d90ba5043a5fb559ac98496f62f3eb668fd" - integrity sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw== +babel-plugin-polyfill-corejs2@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b" + integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA== dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.4.0" - semver "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.1" + "@nicolo-ribaudo/semver-v6" "^6.3.3" -babel-plugin-polyfill-corejs3@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz#39248263c38191f0d226f928d666e6db1b4b3a8a" - integrity sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q== +babel-plugin-polyfill-corejs3@^0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e" + integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - core-js-compat "^3.30.1" + "@babel/helper-define-polyfill-provider" "^0.4.1" + core-js-compat "^3.31.0" -babel-plugin-polyfill-regenerator@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz#e7344d88d9ef18a3c47ded99362ae4a757609380" - integrity sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g== +babel-plugin-polyfill-regenerator@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3" + integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" + "@babel/helper-define-polyfill-provider" "^0.4.1" bail@^1.0.0: version "1.0.5" @@ -2909,7 +2908,7 @@ braces@^3.0.2, braces@~3.0.2: dependencies: fill-range "^7.0.1" -browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.3, browserslist@^4.21.4, browserslist@^4.21.5: +browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9: version "4.21.9" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== @@ -2989,9 +2988,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: - version "1.0.30001511" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001511.tgz#e6e2a1614275c6fb8e3acfd74a8c3a70e53ed233" - integrity sha512-NaWPJawcoedlghN4P7bDNeADD7K+rZaY6V8ZcME7PkEZo/nfOg+lnrUgRWiKbNxcQ4/toFKSxnS4WdbyPZnKkw== + version "1.0.30001515" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" + integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== ccount@^1.0.0: version "1.1.0" @@ -3304,9 +3303,9 @@ cookie@0.5.0: integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== copy-text-to-clipboard@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.1.0.tgz#6bf40deef0a51ac6858efb0d76ded2c6d6a15059" - integrity sha512-PFM6BnjLnOON/lB3ta/Jg7Ywsv+l9kQGD4TWDCSlRBGmqnnTM5MrDkhAFgw+8HZt0wW6Q2BBE4cmy9sq+s9Qng== + version "3.2.0" + resolved "https://registry.yarnpkg.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.0.tgz#0202b2d9bdae30a49a53f898626dcc3b49ad960b" + integrity sha512-RnJFp1XR/LOBDckxTib5Qjr/PMfkatD0MUCQgdpqS8MdKiNUzBjAQBEN6oUy+jW7LI93BBG3DtMB2KOOKpGs2Q== copy-webpack-plugin@^11.0.0: version "11.0.0" @@ -3320,22 +3319,22 @@ copy-webpack-plugin@^11.0.0: schema-utils "^4.0.0" serialize-javascript "^6.0.0" -core-js-compat@^3.30.1, core-js-compat@^3.30.2: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.0.tgz#4030847c0766cc0e803dcdfb30055d7ef2064bf1" - integrity sha512-hM7YCu1cU6Opx7MXNu0NuumM0ezNeAeRKadixyiQELWY3vT3De9S4J5ZBMraWV2vZnrE1Cirl0GtFtDtMUXzPw== +core-js-compat@^3.31.0: + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0" + integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA== dependencies: - browserslist "^4.21.5" + browserslist "^4.21.9" core-js-pure@^3.30.2: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.0.tgz#052fd9e82fbaaf86457f5db1fadcd06f15966ff2" - integrity sha512-/AnE9Y4OsJZicCzIe97JP5XoPKQJfTuEG43aEVLFJGOJpyqELod+pE6LEl63DfG1Mp8wX97LDaDpy1GmLEUxlg== + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.1.tgz#73d154958881873bc19381df80bddb20c8d0cdb5" + integrity sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw== core-js@^3.23.3: - version "3.31.0" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.0.tgz#4471dd33e366c79d8c0977ed2d940821719db344" - integrity sha512-NIp2TQSGfR6ba5aalZD+ZQ1fSxGhDo/s1w0nx3RYzf2pnJxt7YynxFlFScP6eV7+GZsKO95NSjGxyJsU3DZgeQ== + version "3.31.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.1.tgz#f2b0eea9be9da0def2c5fece71064a7e5d687653" + integrity sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ== core-util-is@~1.0.0: version "1.0.3" @@ -3415,9 +3414,9 @@ crypto-random-string@^2.0.0: integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== css-declaration-sorter@^6.3.1: - version "6.4.0" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.0.tgz#630618adc21724484b3e9505bce812def44000ad" - integrity sha512-jDfsatwWMWN0MODAFuHszfjphEXfNw9JUAhmY4pLu3TyTU+ohUpsbVtbU+1MZn4a47D9kqh03i4eyOm+74+zew== + version "6.4.1" + resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71" + integrity sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g== css-loader@^6.7.1: version "6.8.1" @@ -4119,9 +4118,9 @@ ee-first@1.1.1: integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== electron-to-chromium@^1.4.431: - version "1.4.447" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.447.tgz#ac69d3a7b3713e9ae94bb30ba65c3114e4d76a38" - integrity sha512-sxX0LXh+uL41hSJsujAN86PjhrV/6c79XmpY0TvjZStV6VxIgarf8SRkUoUTuYmFcZQTemsoqo8qXOGw5npWfw== + version "1.4.459" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.459.tgz#25a23370f4ae8aaa8f77aaf00133aa4994f4148e" + integrity sha512-XXRS5NFv8nCrBL74Rm3qhJjA2VCsRFx0OjHKBMPI0otij56aun8UWiKTDABmd5/7GTR021pA4wivs+Ri6XCElg== elkjs@^0.8.2: version "0.8.2" @@ -4367,7 +4366,7 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-glob@^3.2.11, fast-glob@^3.2.9: +fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== @@ -4703,13 +4702,13 @@ globby@^11.0.1, globby@^11.0.4, globby@^11.1.0: slash "^3.0.0" globby@^13.1.1: - version "13.2.1" - resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.1.tgz#986d44187ba6a9fc4aa9b16caf0ab9a04db94ae9" - integrity sha512-DPCBxctI7dN4EeIqjW2KGqgdcUMbrhJ9AzON+PlxCtvppWhubTLD4+a0GFxiym14ZvacUydTPjLPc2DlKz7EIg== + version "13.2.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592" + integrity sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w== dependencies: dir-glob "^3.0.1" - fast-glob "^3.2.11" - ignore "^5.2.0" + fast-glob "^3.3.0" + ignore "^5.2.4" merge2 "^1.4.1" slash "^4.0.0" @@ -5047,7 +5046,7 @@ icss-utils@^5.0.0, icss-utils@^5.1.0: resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae" integrity sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA== -ignore@^5.1.4, ignore@^5.2.0: +ignore@^5.1.4, ignore@^5.2.0, ignore@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== @@ -5350,12 +5349,12 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jest-util@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.5.0.tgz#24a4d3d92fc39ce90425311b23c27a6e0ef16b8f" - integrity sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ== +jest-util@^29.6.1: + version "29.6.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb" + integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== dependencies: - "@jest/types" "^29.5.0" + "@jest/types" "^29.6.1" "@types/node" "*" chalk "^4.0.0" ci-info "^3.2.0" @@ -5372,19 +5371,19 @@ jest-worker@^27.4.5: supports-color "^8.0.0" jest-worker@^29.1.2: - version "29.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.5.0.tgz#bdaefb06811bd3384d93f009755014d8acb4615d" - integrity sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA== + version "29.6.1" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.1.tgz#64b015f0e985ef3a8ad049b61fe92b3db74a5319" + integrity sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA== dependencies: "@types/node" "*" - jest-util "^29.5.0" + jest-util "^29.6.1" merge-stream "^2.0.0" supports-color "^8.0.0" jiti@^1.18.2: - version "1.18.2" - resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.18.2.tgz#80c3ef3d486ebf2450d9335122b32d121f2a83cd" - integrity sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg== + version "1.19.1" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.19.1.tgz#fa99e4b76a23053e0e7cde098efe1704a14c16f1" + integrity sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg== joi@^17.6.0: version "17.9.2" @@ -6144,9 +6143,9 @@ node-forge@^1: integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== node-releases@^2.0.12: - version "2.0.12" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.12.tgz#35627cc224a23bfb06fb3380f2b3afaaa7eb1039" - integrity sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ== + version "2.0.13" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" + integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== non-layered-tidy-tree-layout@^2.0.2: version "2.0.2" @@ -6765,9 +6764,9 @@ postcss-zindex@^5.1.0: integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21: - version "8.4.24" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.24.tgz#f714dba9b2284be3cc07dbd2fc57ee4dc972d2df" - integrity sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg== + version "8.4.25" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.25.tgz#4a133f5e379eda7f61e906c3b1aaa9b81292726f" + integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -7088,9 +7087,9 @@ react-router@5.3.4, react-router@^5.3.3: tiny-warning "^1.0.0" react-textarea-autosize@^8.3.2: - version "8.5.1" - resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.1.tgz#e1e815ac6715c6dbe01c715fd980a7a97031e2a2" - integrity sha512-3GdXBRT2m12xqH7ysRUquzFZYasYQrH/I+BofmT9sdMG5oI+GNfrsiTV1MvZGk3DLmZ72OUCiV5XGMEPKJ7Pog== + version "8.5.2" + resolved "https://registry.yarnpkg.com/react-textarea-autosize/-/react-textarea-autosize-8.5.2.tgz#6421df2b5b50b9ca8c5e96fd31be688ea7fa2f9d" + integrity sha512-uOkyjkEl0ByEK21eCJMHDGBAAd/BoFQBawYK5XItjAmCTeSbjxghd8qnt7nzsLYzidjnoObu6M26xts0YGKsGg== dependencies: "@babel/runtime" "^7.20.13" use-composed-ref "^1.3.0" @@ -7482,19 +7481,19 @@ semver-diff@^3.1.1: semver "^6.3.0" semver@^5.4.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@^6.0.0, semver@^6.1.1, semver@^6.1.2, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: - version "7.5.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" - integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== dependencies: lru-cache "^6.0.0" @@ -7930,9 +7929,9 @@ terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: terser "^5.16.8" terser@^5.10.0, terser@^5.16.8: - version "5.18.2" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.18.2.tgz#ff3072a0faf21ffd38f99acc9a0ddf7b5f07b948" - integrity sha512-Ah19JS86ypbJzTzvUCX7KOsEIhDaRONungA4aYBjEP3JZRf4ocuDzTg4QWZnPn9DEMiMYGJPiSOy7aykoCc70w== + version "5.19.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.0.tgz#7b3137b01226bdd179978207b9c8148754a6da9c" + integrity sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" From 785ebca63811c3007f9fd5f1038c27602ae81d8d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 13 Jul 2023 12:36:22 +0200 Subject: [PATCH 478/665] Update index.md Add Snap --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7ea65f3f53c..ce0c2f0278c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -46,7 +46,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | | [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | - +| [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | [🔝](#2023) From e9948cfd05468be77db240106cd01b6f3780af6d Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 14 Jul 2023 13:33:10 +0200 Subject: [PATCH 479/665] Update numbers --- src/components/HomepageFeatures.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/HomepageFeatures.js b/src/components/HomepageFeatures.js index ba9a776a5fb..bf4ab04dd8b 100644 --- a/src/components/HomepageFeatures.js +++ b/src/components/HomepageFeatures.js @@ -6,14 +6,14 @@ import CountUp from 'react-countup'; const FeatureList = [ { - title: 1300, + title: 1500, description: ( <>applications ), }, { - title: 500, + title: 550, description: ( <>projects funded From caba104029355fc98722e2a8f0a90a33b211df22 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 14 Jul 2023 13:47:42 +0200 Subject: [PATCH 480/665] update announcement --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 4eaf0628243..b7614ad54eb 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -28,7 +28,7 @@ module.exports = { announcementBar: { id: 'announcement', content: - 'Check out our 500 GRANTS blogpost!', + 'Check out our Wave 18 blogpost', backgroundColor: '#000', textColor: '#ffffff', isCloseable: true, From f1e26debfb63254992e390f13a7a090bf61361f3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 14 Jul 2023 17:04:17 +0200 Subject: [PATCH 481/665] Update index.md Update Interoperable State Machine Protocol --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index ce0c2f0278c..2e7d5b9c29c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,7 +67,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Supercomputing Systems AG](https://www.scs.ch) | [SARP - A Static Analysis Tool for Runtime Pallets](./sarp-basic-functionality.md) | [GitHub](https://github.com/scs) | ☐ | ☒ | ☒ | | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | -| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☐ | ☐ | +| [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | From 5899fd3fa72a582ae6738d82d25e91162d7e8d86 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Sat, 15 Jul 2023 10:03:04 -0300 Subject: [PATCH 482/665] Update index.md (#1845) --- applications/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/index.md b/applications/index.md index 2e7d5b9c29c..52add95dc7c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -74,7 +74,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☐ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | @@ -140,7 +140,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | -| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☐ | +| [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | @@ -179,7 +179,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zondax](http://zondax.ch/) | [Hybrid node research grant](hybrid_node_research.md) | [GitHub](https://github.com/ZondaX) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [ZK-Snarks Tutorial](ZK-Snarks%20tutorial.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [Common Orbit LLC](https://brson.github.io) | [wasm-opt-for-rust maintenance](maintenance/wasm-opt-for-rust.md) | [GitHub](https://github.com/brson/wasm-opt-rs) | ☐ | ☒ | ☐ | -| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☒ | ☐ | +| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang developer experience improvements](Solang_developer_experience_improvements.md) | [GitHub](https://github.com/hyperledger/solang) | ☐ | ☒ | ☒ | | [Optymalizacja AI Grzegorz Miebs](https://github.com/miepsik) | [Validator selection](validators_selection.md) | [GitHub](https://github.com/miepsik) | ☐ | ☒ | ☒ | | [Applied Blockchain Ltd](https://appliedblockchain.com/) | [Silent Data](project_silentdata.md) | [GitHub](https://github.com/appliedblockchain) | ☐ | ☒ | ☒ | | [Web3Box Labs](https://github.com/web3box-labs) | [Web3Box](Web3Box.md) | [GitHub](https://github.com/web3box-labs) | ☐ | ☒ | ☒ | From b67f2cc0f5a7330dc84c76be35f10313c0a37983 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mert=20K=C3=B6kl=C3=BC?= <37740842+justmert@users.noreply.github.com> Date: Mon, 17 Jul 2023 21:59:48 +0300 Subject: [PATCH 483/665] DOTLY: Revolutionizing Polkadot Account Statistics (#1784) * Create dotly.md * Update dotly.md * Update dotly.md * Update dotly.md --- applications/dotly.md | 177 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 applications/dotly.md diff --git a/applications/dotly.md b/applications/dotly.md new file mode 100644 index 00000000000..8cd59263bd7 --- /dev/null +++ b/applications/dotly.md @@ -0,0 +1,177 @@ +# DOTLY: Revolutionizing Polkadot Account Statistics + +- **Team Name:** justmert +- **Payment Address:** [0xf5412558d977915D56d8B4d3773871142d379E74](https://etherscan.io/address/0xf5412558d977915D56d8B4d3773871142d379E74) (USDC, Ethereum (ERC20)) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +The growth of Polkadot, leading blockchain platform, presents a challenge for users in understanding and tracking their account activities. Existing solutions lack intuitive and engaging tools to present comprehensive statistics, leaving users with limited insights into their impact within the ecosystem. + +DOTLY is an innovative application that addresses this problem head-on. By providing a user-friendly platform with visually captivating and interactive displays, DOTLY transforms Polkadot account statistics into an informative and ingsightful experience. Users gain access to a wide range of statistics, including account overviews, balance and extrinsic histories, badges, and action insights. DOTLY goes beyond numbers by incorporating visually appealing charts. + +With DOTLY's intuitive interface, users can understand their account activities at a glance. DOTLY aims to bridge the gap between account statistics and user accessibility, empowering Polkadot account holders to maximize their potential and contribute to the growth and success of the network. + +### Project Details + +**Mockups** + +| Overview Page | Stats Page | +| ------------- | ----------- | +|![Overview](https://github.com/justmert/dotly/assets/37740842/520060fa-899a-4d28-9599-649843a7df43) |![Stats](https://github.com/justmert/dotly/assets/37740842/6f4bba33-6ccc-40e6-9a5f-437530db3dbb)| + +| Extrinsics Page | Badges Page | +| ------------- | ------------- | +|![Extrinsics](https://github.com/justmert/dotly/assets/37740842/1b5d36e1-6933-4991-bb71-bea1fc202940)| ![Badges](https://github.com/justmert/dotly/assets/37740842/556bea7d-99d0-49cc-bc34-30751dc609c4) | + +--- + +
+ +**Technical Scheme** + +![technical_scheme](https://github.com/justmert/dotly/assets/37740842/80de9ebd-729c-450f-aec7-ced758636329) + +--- + +
+ +**API Scheme** + +![fast_api](https://github.com/justmert/dotly/assets/37740842/079cce64-2f6a-4906-8cee-0518aadf1f25) + +--- + + +
+ +**Technical Stack** + +- Frontend: NextJS, Tailwind CSS, Apache ECharts +- Backend: Python, Fast API +- Integrations: Google Analytics + + +### Ecosystem Fit + +**Target audience** + +DOTLY targets a diverse range of individuals within the Polkadot ecosystem, including existing Polkadot account owners seeking a comprehensive solution to track and understand their on-chain account activities, new users looking for an intuitive onboarding experience, and ecosystem enthusiasts interested in monitoring their involvement with pursuing badges. + +**Impact** + +- **Comprehensive Account Insights**: DOTLY offers users comprehensive statistics and insights about their Polkadot accounts, including total transfers, transaction rates, balance summaries, and more. By providing this deep level of visibility, DOTLY enables users to make informed decisions, optimize their engagement, and monitor their progress within the ecosystem. + +- **Uniqueness**: While there may be block explorers offering Polkadot ecosystem account statistics, such as balance history (and not much else), DOTLY differentiates itself through its focus on user experience, and rich charts/insights. + + +## Team :busts_in_silhouette: + +### Team members + +- Mert Köklü - Project Owner + +### Contact + +- **Contact Name:** Mert Köklü +- **Contact Email:** +- **Website:** + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** Individual + +### Team's experience + +**Mert Köklü** + +Acted as an ambassador of many organizations including ACM, Microsoft and NVIDIA as Certified Instructor. In the Web3 space, he co-manage the AAVE Turkey Community and advocate for The Graph. Was working with AI video pipelines at an NVIDIA distributor company in Turkey before getting involved with blockchain. + +Develops ecosystem tools and applications with various tech stacks. AAVE, W3F, Flow and Filecoin grantee with an accepted multiple projects and now developing open-source, user-friendly applications that add value to the DOT ecosystem. + +### Team Code Repos + +- (PolkaFlow Frontend - ) +- (PolkaFlow Backend) +- (Aave GraphQL Documentation Website - ) +- (Aave GraphQL Editor Website) +- (Peer CLI: Swiss Army Knife for the IPFS) +- (Aave API Telegram Bot) +- (Kadena Chainweb Python Bindings) + +**Github Account** + +- + +### Team LinkedIn Profiles (if available) + +- + +## Development Status :open_book: + +API scheme, technical stack and mockups are ready for development. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** 10,000 USD + +### Milestone 1 - Frontend and Backend + +- **Estimated duration:** 2 months +- **FTE:** 1 FTE +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | I will provide both **inline documentation** of the code and a basic **set-up** page that explains how a user can run frontend/backend repositories of the project in their local environment. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | I will publish an article that explains the charts/widgets in DOTLY and publish it with ecosystem. | +| 1. | Search Page | Implement search page that allows users to search for an account by address in Polkadot ecosystem. | +| 2. | Overview Page | Implement overview page that displays brief stats, parachain balance pie, parachain balance list, weekly transaction rate widgets. | +| 3. | Overview Page - Brief Stats | Implement an endpoint for brief stats widget that displays summaries like, total transfers sent\received, time with Polkadot, extrinsic count, nonce, role, tags, display name, twitter, web, Judgements, email (if these are exists) etc. | +| 4. | Overview Page - Parachain Balance Pie | Implement an endpoint for balance pie widget that displays **three** pie charts. The first pie chart will show parachain that account address has balance. The second pie displays distribution of balance like Transferrable balance, Locked balance etc. and the third pie chart will show sub-distribution balance of the first pie chart selection like Election Lock, Democracy Lock, etc. | +| 5. | Overview Page - Parachain Balance List | Implement an endpoint for balance list widget that displays list of parachains with respective balance summary of account address. | +| 6. | Overview Page - Weekly Transaction Rate | Implement an endpoint for weekly transaction rate widget that is the number of transactions account have sent over the past 7 days. | +| 7. | Stats Page | Implement stats page that displays balance history, transaction history, top 5 senders/receivers, incoming/outgoing transfer, staking/pool reward history widgets. | +| 8. | Stats Page - Balance History | Implement an endpoint for balance history widget that shows DOT balance change over time on account using chart. | +| 9. | Stats Page - Transaction History | Implement an endpoint for relationship chart widget that shows relationship with different accounts. It can show most frequent accounts that user has interacts with. | +| 10. | Stats Page - Top Senders/Receivers | Implement an endpoint for top senders/receivers widget that lists top senders and receivers (transfer) of the account. | +| 11. | Stats Page - Incoming/Outgoing Transfer Widget | Implement an endpoint for top incoming/outgoing transfer widget that displays count of incoming/outgoing transfers over time with two line charts. | +| 12. | Stats Page - Staking/Pool Reward History | Implement an endpoint for staking/pool reward widget that displays count of staking/pool reward over time with a line chart. | +| 13. | Extrinsics Page | Implement an extrinsics page that displays extrinsics count history, extrinsics success rate, top interacted modules/calls, action insight widgets. | +| 14. | Extrinsics Page - Extrinsics Count History | Implement an endpoint for extrinsics count history widget that displays count of extrinsics over time with a line chart. | +| 15. | Extrinsics Page - Extrinsics Success Rate | Implement an endpoint for extrinsics success rate widget that displays success rate of extrinsics on pie chart. | +| 16. | Extrinsics Page - Top Interacted Modules/Calls | Implement an endpoint for top interacted modules/pallets and calls widget. Top interacted calls will be listed based on selection of module. | +| 17. | Extrinsics Page - Action Insight | Implement an endpoint for action insight widget that displays two pie charts and one line chart. The first pie chart will show count distribution of modules user interacte with (such as balances), and the second pie chart will show count distribution of calls (such as transfer, transfer_keep_alive etc.) based on selected module. The line chart will show that call's count over time. | +| 18. | Badges Page | Implement badges page that displays badges widget. | +| 19. | Badges Page - Badges | Implement an endpoint for badges widget. It will return all badges that user has achieved and yet to achieve. For example a badge will look like this: "Join the party! - Perform a token transfer". | +| 20. | Google Analytics Integration | Integrate Google Analytics to track user interactions. | +| 21. | Share Feature | Make every widget on the pages shareable. | + + +## Future Plans + +Altough DOTLY is initially focused on Polkadot, it offers detailed balance overview on parachains that user has balances. I plan to expand its capabilities to include other networks within the Polkadot ecosystem, such as Kusama and other parachains. Users can change parachain to see their stats in other parachains as well just like parachain explorers. This will allow users to track and analyze their activities across multiple interconnected networks, providing a comprehensive view of their participation in the wider Web3 ecosystem. + +Also I am planning to add quests that incentivize users to perform certain actions. Altough this is done by badges (for now) that are awarded to users, quests are a bit different. For example I can incentivize users to swap in X protocol, or stake in Y protocol, or provide liquidity in Z protocol. This will be a great way to increase user engagement and participation in the Polkadot ecosystem. The rewards for quests can be DOT, KSM, NFTs, etc. and can be provided from respective X, Y, Z protocol/tools. This feature is not included in the proposal since it adds complexity to the project and it will take more time to implement. + + +## Referral Program (optional) :moneybag: + +- **Referrer:** - +- **Payment Address:** - + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +I am **grantee** of Web3 Foundation Grants Program. From 6eacd835612781af8940f04cf097b32b1d17e415 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 17 Jul 2023 21:01:46 +0200 Subject: [PATCH 484/665] Update index.md Add DOTLY --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 52add95dc7c..7913380c1ea 100644 --- a/applications/index.md +++ b/applications/index.md @@ -47,6 +47,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | +| [justmert](https://github.com/justmert) | DOTLY: Revolutionizing Polkadot Account Statistics | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | [🔝](#2023) From b40ba16b548565b10257c1142d9d1a1f50b79df3 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Mon, 17 Jul 2023 21:17:43 +0200 Subject: [PATCH 485/665] fix website --- applications/dotly.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/applications/dotly.md b/applications/dotly.md index 8cd59263bd7..8847fd1536f 100644 --- a/applications/dotly.md +++ b/applications/dotly.md @@ -28,7 +28,7 @@ With DOTLY's intuitive interface, users can understand their account activities --- -
+
**Technical Scheme** @@ -36,7 +36,7 @@ With DOTLY's intuitive interface, users can understand their account activities --- -
+
**API Scheme** @@ -45,7 +45,7 @@ With DOTLY's intuitive interface, users can understand their account activities --- -
+
**Technical Stack** @@ -76,8 +76,8 @@ DOTLY targets a diverse range of individuals within the Polkadot ecosystem, incl ### Contact - **Contact Name:** Mert Köklü -- **Contact Email:** -- **Website:** +- **Contact Email:** kklumert@gmail.com +- **Website:** https://github.com/justmert ### Legal Structure @@ -94,21 +94,21 @@ Develops ecosystem tools and applications with various tech stacks. AAVE, W3F, F ### Team Code Repos -- (PolkaFlow Frontend - ) -- (PolkaFlow Backend) -- (Aave GraphQL Documentation Website - ) -- (Aave GraphQL Editor Website) -- (Peer CLI: Swiss Army Knife for the IPFS) -- (Aave API Telegram Bot) -- (Kadena Chainweb Python Bindings) +- https://github.com/justmert/eco-flow-frontend (PolkaFlow Frontend - http://polkaflow.xyz/) +- https://github.com/justmert/eco-flow-backend (PolkaFlow Backend) +- https://github.com/justmert/aave-graphql-doc (Aave GraphQL Documentation Website - https://www.aaveql.org/ ) +- https://github.com/justmert/aave-graphql-editor (Aave GraphQL Editor Website) +- https://github.com/justmert/peer-cli (Peer CLI: Swiss Army Knife for the IPFS) +- https://github.com/justmert/Aave-API-Telegram-Bot (Aave API Telegram Bot) +- https://github.com/justmert/chainweb.py (Kadena Chainweb Python Bindings) **Github Account** -- +- https://github.com/justmert ### Team LinkedIn Profiles (if available) -- +- https://www.linkedin.com/in/mertkoklu/ ## Development Status :open_book: From 92c24b1847525e15915b60e18c7c5cbdaaa537f4 Mon Sep 17 00:00:00 2001 From: Whisker17 Date: Tue, 18 Jul 2023 03:18:38 +0800 Subject: [PATCH 486/665] fix: fix contract-wizard display errors (#1850) --- applications/Contract_wizard.md | 40 +++++++++++++++++---------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/applications/Contract_wizard.md b/applications/Contract_wizard.md index a8c112eafa8..4095fa0218f 100644 --- a/applications/Contract_wizard.md +++ b/applications/Contract_wizard.md @@ -12,43 +12,43 @@ The Polkadot Contract Wizard has successfully completed its initial phase, makin ​ In the next phase, we plan to implement the following features: ​ -1.- Interaction with deployed contracts through the wizard's UI. +1. Interaction with deployed contracts through the wizard's UI. ​ -2.- Interaction with smart contracts deployed by the user. +2. Interaction with smart contracts deployed by the user. ​ -3.- Shareable Contract Interaction Links +3. Shareable Contract Interaction Links ​ -4.- Support for multiple chains +4. Support for multiple chains ​ These enhancements will allow users to create, modify, deploy and interact with smart contracts on different parachains, making the Contract Wizard an indispensable tool for the community within the Polkadot and Kusama ecosystem. ​ ### Project Details ​ -#### 1. Interact with deployed contracts +#### 1. Interact with deployed contracts We will create a functionality that enables users to directly interact with their deployed contracts via the user interface of the wizard. This functionality will be generated dynamically according to the metadata of the contracts. With this, users will be able to conveniently and effectively manage their contracts and carry out interactions using the same tool. ​ -#### 2. Interaction with custom smart contracts +#### 2. Interaction with custom smart contracts Our platform will offer the capability to interact with any contract of their choice. To utilize this feature, they simply need to provide the metadata, network, and address associated with the contract. Once this information is ready, the user interface will automatically generate a customized user-friendly layout for allowing people to easily interact with their custom contracts. ​ -#### 3. Shareable Contract Interaction Links +#### 3. Shareable Contract Interaction Links To enhance the user experience and encourage collaboration, we plan to implement a feature for shareable contract interaction links. Once a developer deploys a contract or uploads the metadata for interacting with it on our platform, they can generate a unique, shareable link. This link will contain all necessary information for interacting with the contract, essentially encapsulating the contract's ABI (Application Binary Interface) and its address on the blockchain. Users receiving this link can interact with the contract directly, without needing to reupload the metadata or know the contract's specifics. This feature not only simplifies the process of contract interaction but also fosters collaboration and sharing within the developer community. ​ -#### 4. Support for multiple chains +#### 4. Support for multiple chains This tool will offer a feature that enables users to connect to parachains implementing the contracts pallet. We will provide a list of some of these parachains in Polkadot, Kusama, and Rococo networks. Additionally, users will have the option to connect to a network that is not listed by specifying the web socket. ​ ### Tentative Mockups -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add_contract_1_720.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add_contract_1_720.png?raw=true) -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%202.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%202.png?raw=true) -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%203.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/add%20contract%203.png?raw=true) -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%201.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%201.png?raw=true) -![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%202.png) +![](https://github.com/protofire/assets/blob/c18c2adb8f40c692134bffbb4e92e0a78872744e/networks%202.png?raw=true) ### Ecosystem Fit ​ @@ -100,7 +100,7 @@ We are not only a dev shop company, but we create long term partnerships with th - https://github.com/protofire/blockchain-learning-path - https://github.com/protofire/omen-exchange - https://github.com/protofire/kyber-pool-master-proxy-contract -​ + GitHub accounts of team members. - https://github.com/alongoni - https://github.com/henrypalacios @@ -137,7 +137,7 @@ Described in project details. - **FTE:** 2.5 - **Costs:** 52500 -​ + | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | Apache 2.0 | @@ -147,7 +147,7 @@ Described in project details. | 1. | Interaction with deployed contracts | The functionallity based on [step 1](#step1) of the Project Details section. | | 2. | Interaction with custom smart contracts | The functionality based on [step 2](#step2) of the Project Details section. | | 3. | Shareable Contract Interaction Links | The functionality corresponds to what's described on [step 3](#step3) of the Project Details section. | -| 4. | Support for multiple chains | The functionality to be implemented corresponds to [step 4](#step4) of the Project Details section. | +| 4. | Support for multiple chains | The functionality to be implemented corresponds to [step 4](#step4) of the Project Details section. | ​ ## Future Plans @@ -155,12 +155,12 @@ Described in project details. At contractwizard.xyz team in protofire, our mission is to continue innovating and developing our platform to cater to the ever-changing needs of the smart contract community. We recognize the importance of providing our users with a comprehensive tool that enables them to manage all ink! smart contracts, including those they have created custom. ​ As we continue to develop our platform, we understand the importance of building a community around it. We believe that by creating a community of users, we can facilitate the sharing of knowledge, contracts, and different approaches to problem-solving. Through our platform, users will have the ability to share their experiences, ask questions, and engage with others within the community. This will create an environment that fosters innovation and encourages collaboration, leading to the development of new and exciting ideas. Our hope is that our platform will serve as a hub for all things smart contract-related, where users can come together to learn, grow, and innovate. -​ + **Custom contracts** - Add the possibility of creating custom contracts, not only with the modifiers but adding the ability to write code using the interface. - Compile the generated code and deploy it to different parachains. - Following the comments made on the [pull request](https://github.com/w3f/Grants-Program/pull/1413#pullrequestreview-1234970716), our approach will be based on the [ink-playground](https://github.com/paritytech/ink-playground) in order to integrate writing custom code and compiling it. -​ + **Social Interaction** - Create an account to store information. - Save your created smart contracts. @@ -169,4 +169,6 @@ As we continue to develop our platform, we understand the importance of building ​ ## Additional Information :heavy_plus_sign: ​ -**How did you hear about the Grants Program?** Web3 Foundation Website +**How did you hear about the Grants Program?** + +Web3 Foundation Website From e66f4a6b068c83e60989471593e6c1f43cde796e Mon Sep 17 00:00:00 2001 From: Federico Cicciarella <58514549+FedeC87p@users.noreply.github.com> Date: Thu, 20 Jul 2023 22:18:07 +0200 Subject: [PATCH 487/665] Create tracking_chain.md (#1847) * Create tracking_chain.md * Update tracking_chain.md * Update tracking_chain.md * Update tracking_chain.md * Update tracking_chain.md * Update tracking_chain.md --- applications/tracking_chain.md | 215 +++++++++++++++++++++++++++++++++ 1 file changed, 215 insertions(+) create mode 100644 applications/tracking_chain.md diff --git a/applications/tracking_chain.md b/applications/tracking_chain.md new file mode 100644 index 00000000000..895dd9c9697 --- /dev/null +++ b/applications/tracking_chain.md @@ -0,0 +1,215 @@ +# Tracking Chain + +- **Team Name:** Federico Cicciarella +- **Payment Address:** 15ofeBpTMQ7MNbqViRRRbkVz2y3eQt8SCgBy6yVVfsTKhMn2 (USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +During this time, I have had the opportunity to work with several companies that wanted to adopt blockchain technology. However, I have observed that they often face challenges that hinder their adoption, mainly due to the following reasons: + + - Difficulties integrating legacy software with blockchain, such as dealing with long confirmation times or scalability issues when handling a large number of transactions. I have personally spoken with clients who need to handle over a million transactions per year, with peaks of thousands of requests per minute. + + - Concerns regarding wallet security, custody, accounting management, and the purchase of tokens for transaction fees. + + - Challenges in querying the blockchain to retrieve or interpret transactions over time, lacking a user-friendly interface. + + - High cost of using the blockchain (those who are not familiar with the blockchain world have heard of ethereum and how much it costs to do operations on it) + +There is a significant market potential for smart contracts, such as tracking the lifecycle of a product or certifying the immutability of sensitive files, among other use cases. While these challenges may seem trivial, integrating existing and well-tested software with experimental projects like blockchains (this is the common thinking of web2 companies) often leads to insurmountable issues, resulting in project abandonment. + +Our project offers an intuitive and user-friendly tool to simplify blockchain integration for all businesses. + +We are aware of the interest expressed by various companies in using blockchain technology, and we want to demonstrate how easy and advantageous it is to integrate blockchain into their business processes. + +We aim to convey that adopting blockchain is no longer a complex and costly process but can be accomplished effortlessly with our intuitive tool, leveraging the scalability capabilities of Polkadot and its Parachains. + +Our ultimate goal is to help companies embrace the benefits offered by blockchain, opening the doors to a new way of doing business. We firmly believe that our project can be a turning point for widespread adoption of blockchain in the corporate sector, simplifying the integration process and providing a seamless and positive experience. + +We have already scheduled several demos with our clients, including one that has requested a demonstration of how to support a high number of transactions launched within a short timeframe and how to effectively manage them. + +The client's request highlights the importance of efficient transaction management in a high-volume blockchain environment. + +Furthermore, we will illustrate our transaction management strategies that enable fair and optimized resource allocation, avoiding overload issues and ensuring a continuous flow of operations. + +### Overview + +To address these challenges, I have decided to create a web application specifically designed for companies and users who are eager to venture into the world of blockchain. The application aims to bridge the gap between "Web2" and "Web3" by providing a simple API call to feed data into smart contracts, with an immediate response providing a unique identifier. + +To achieve this, I am developing a microservices architecture capable of handling millions of requests and scaling to accommodate peak traffic. Over the years, I have gained significant experience in building such systems, including a web application that processed tens of thousands of daily orders (including data-heavy files like photos for immediate printing) and effectively scaled during peak periods (e.g., the holiday season). + +My plan involves creating an endpoint that can be accessed from Web2, exclusively responsible for collecting data values to be inserted into a smart contract. Currently, I am focusing on storing key-value pairs; however, I intend to dynamically handle more complex cases in the future. In this way, the Web2 user will be relieved of any concerns regarding the bottleneck presented by the blockchain, as their task will already be completed (which we address through our bridge development), we can manage an unlimited number of requests per second, ensuring a smooth user experience. Upon successful transaction completion, we will send a registration notification to the customer, including all relevant onchain transaction data. Additionally, we will provide a graphical tool enabling users to verify their transactions onchain, ensuring transparency and data correctness. + +The application will handle all the necessary infrastructure setup for transaction transmission, including endpoint creation, failed transaction recovery, private key security, among others. The customer's role will be to select the appropriate smart contract type and chain for deployment, based on their future needs. For instance, in the future, certain data inputs may generate NFTs representing the final products, which could be utilized in other contexts through interoperability. Please note that this initial idea will not be present in the alpha version. Furthermore, we can leverage interoperability to store data in backup smart contracts created on secondary blockchains in case the primary chain faces congestion or other issues. + +### Project Details + +The project will consist of 8 microservices, each with a well-defined task. + +![TrackingChainSchema](https://github.com/FedeC87p/PublicImage/assets/58514549/74186f4f-ac66-4ac6-afc1-90f19c9b479d) + +![StepTracking](https://github.com/FedeC87p/PublicImage/assets/58514549/7f535c65-fc16-4cdb-a34a-b3b9cac13bea) + +1. Triage API: + - Purpose: Receives tracking requests, consults the registry, and associates a destination smart contract with each request based on a Profile. + - Scalability: Can scale by increasing endpoints during high load periods due to no concurrency access issues. + +2. Aggregator Pool Worker: + - Purpose: Moves tracking requests from Triage to the Pool after pre-filtering. + - Scalability: Cannot scale due to concurrent access management but can handle large workloads efficiently. + +3. Tx Generator Worker: + - Purpose: Sends transactions on-chain for tracked items in the Pool. + - Behavior: Doesn't wait for transaction responses, only saves the returned Hash. + +4. Tx Watcher Worker: + - Purpose: Monitors tracked items in the Pool with associated transactions for finalization. + - Outcome: Inserts successful transactions into the transaction Registry; performs recovery actions for failed transactions. + +5. Frontend Admin: + - Purpose: Manages the creation of associated accounts. + +6. Frontend Monitor: + - Purpose: Monitors and manages tracking statuses in various states. + +7. Frontend Registry: + - Purpose: Provides a user-friendly visualization of all tracked codes with direct links for on-chain verification. + +8. Web Application Triage: + - Purpose: Give the possibility to enter or view the status of onchain traced codes. (it will be fundamental for the demo that will have to lead us users to use the blockchain). + +![Screenshot_Insert](https://github.com/FedeC87p/TrackingChainGrant/assets/58514549/2e850a3b-1375-4889-a371-8593410b3282) + +### **Overview of the technology stack to be used** +We are planning on using a combination of blockchain technology, cloud services, and front-end development tools to build a performant, secure, and user-friendly platform. + +**Blockchain Layer:** +- **Smart Contracts**: Ink! and Solidity version for store the tracking values. + +**Backend Layer:** +- **.Net**: For our backend services, we'll use C# +- **Sql Server**: As for the database, we will be using Sql Server. Actually the system is designed to support almost all relational databases. https://learn.microsoft.com/en-us/ef/core/providers + +**Frontend Layer:** +- **Asp.Net MVC**: These libraries will be used for interacting with the API from our frontend application. + +### Ecosystem Fit + +I plan to develop a WASM version, integrating the SubstrateGaming https://github.com/SubstrateGaming library developed by Ajuna and EVM smart contracts (C# will be utilized with the Nethereum library https://nethereum.com/ for interaction with compatible EVM networks). + +To ensure user authenticity, all smart contracts and wallets created on various chains will integrate with Kilt, associating a digital identity with each user utilizing the smart contract to certify data ownership. + +## Team :busts_in_silhouette: + +### Team members + +- Federico Cicciarella + +### Contact + +- **Contact Name:** Federico Cicciarella +- **Contact Email:** federico.cicciarella@gmail.com +- **Website:** [Linkedin](https://it.linkedin.com/in/federicocicciarella) + + +### Team's experience + +My name is [Federico Cicciarella](https://it.linkedin.com/in/federicocicciarella), and I have been a Microsoft .Net (C#) developer for almost 20 years. In recent years, I have developed a strong interest in the blockchain, particularly in the use of Polkadot ecosystem (I am actively involved in Ajuna and Moonbeam as an ambassador, in Astar where I participate in the Ink! Academy and the Italian community). + +Over the years, I have gained significant experience in building such systems, including a web application that processed tens of thousands of daily orders (including data-heavy files like photos for immediate printing) and effectively scaled during peak periods (e.g., the holiday season). + +I'm working on a project for a censorship-resistant decentralized video platform. + +### Team Code Repos + +- https://github.com/TrackingChains/TrackingChain +- https://github.com/TrackingChains/EVMTrackingChain +- https://github.com/FedeC87p + +### Team LinkedIn Profiles (if available) + +- https://it.linkedin.com/in/federicocicciarella + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 4 month +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10.000 USD + +### Milestone 1 — Basic functionality + +- **Estimated duration:** 3 month +- **FTE:** 1 +- **Costs:** 8.500 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide a basic **tutorial** that explains how a user can configure the data entry for create profile for to associate the tracking requests to a smart contract transaction. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains how to use. | +| 1. | API: Triage | Written in Asp.Net, The Triage API acts as the gateway between the "Web2" world, which receives the Tracking requests, and the "Web3" world, where these requests will be saved. To do this it will verify that the incoming request is compatible with one of the profiles associated in the configuration, if so it will save the request in the Triage (and return an Guid to client) which will then be processed by the next service. In case the incoming request does not match any profile, it will be rejected. The Triage operation does not involve any concurrent processing, allowing for seamless scalability. It can accept requests simultaneously or even create multiple endpoints. The API expects a POST call with the following data: field Code used as a Key in the smart contract, field valueData used as one of the elements of the Value and the field Category that will be used to associate a profile with Tracking | +| 2. | Aggregator Pool Worker | Written in C#,The Aggregator Pool Worker will used to transfer processable data from Triage that has no time dependencies into the Pool. A transaction is transferable when there is no pending Transaction with same Profile to be completed in the pool | +| 3. | Tx Generator Worker | Written in C#,The Tx Generator Worker Worker will used to take data from Pool and make a transaction on onchain via smartcontract. In this case each worker instance takes one of the transactions entered into the pool and will process it by calling the selected smartcontract (this selection of smartcontract has already been made by Triage). Once the transaction has been made, it will save the HASH of the Tx so that it can be used by the next service. This service supports both (Ink! and EVM) TrackingChain smart contracts. The selection of the version of the smart contract to use will be given by the profile that was associated in the Triage phase | +| 4. | Tx Watcher Worker | Written in C#,The Tx Generator Worker Worker will used to check all Tx pending for finalized (or failed) status. Each worker instance takes a pending transaction and through the hash it will verify if it has been finalized successfully. This service supports both (Ink! and EVM) TrackingChain smart contracts. The selection of the version of the smart contract to use will be given by the profile that was associated in the Triage phase | +| 5. | API: Registry | Written in C#,Provide API for check the status of each Tracking request. Wich Guid of tracking request is possibile to watch the status of transaction. For example, the API will tell if the Tracking is in Trigae/Pool/Pending/Complete status and will provide all the times with which it moved from one status to another, as well as the onchain transaction information (gas used, hash tx. ..) | +| 6. | Web Application | Written in Asp.Net MVC pages for manage the insert tracking and views. A web interface from which it will be possible through a simple form to select the fields required to make a request towards the triage. | +| 7. | Ink! Smart contracts. | We will deliver a set of Ink! smart contracts that will able to track the key values. In particular, it will take care of saving in a dictionary key-value formed by a "Key" byte32 and the "Value" a list of bytes. A get call will also be available, which given a "Key" byte32 returns the entire "Value" list of Bytes saved over time, also providing the block number in which the transaction was carried out. It will also include the C# function that the "Tx Generator Worker" service will have to do to write onchain and the read call that will be used by the "Tx Watcher Worker" service. The implementation will partially reuse the [C# SubstrateGaming library](https://github.com/SubstrateGaming) | +| 8. | EVM Smart contracts | We will deliver a set of EVM smart contracts that will able to track the key values. In particular, it will take care of saving in a dictionary key-value formed by a "Key" byte32 and the "Value" a list of bytes. A get call will also be available, which given a "Key" byte32 returns the entire "Value" list of Bytes saved over time, also providing the block number in which the transaction was carried out. It will also include the C# function that the "Tx Generator Worker" service will have to do to write onchain and the read call that will be used by the "Tx Watcher Worker" service. The implementation will partially reuse the [C# Nethereum library](https://nethereum.com/) | + +### Milestone 2 — Monitor and Recovery functionality + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 1.500 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide a basic **tutorial** that explains how a user can use a frontend to easily configure profile, watch the transaction status and use recovery tool for failed transactions. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains how to use. | +| 1. | Tx Recovery Worker | Written in C#, The Tx Recovery Worker will used to managed all transaction in failed status. It takes care of trying to re-process any transactions that have ended in error. in case of a new error, the transaction will be cancelled | +| 2. | Frontend Admin Tools | Written in Asp.Net MVC, The frontend for manage all configuration like smart contract used, wallet used, profile association. | +| 3. | Frontend Transaction Monitor | Written in Asp.Net MVC, The monitor to watch all tracking request. A graphical tool that allows you to display the status of all queues on screen. For example showing how many Triage there are, how many Pending, how many failed transactions. | +| 4. | Frontend Registry | Written in Asp.Net MVC, The frontend for user friendly graph of specific product tracked onchain. For each value Key will be show all data Values insured and in wich block/time was performed | + +## Future Plans + +- Pres ent the demo to customers and onboard our first major customer. +- Continue meetings with customers interested in entering the web3 and onboard other customers. +- Participate in events to be able to demonstrate how our demo works, also showing the portfolio of customers who have already chosen to use it. +- Integration DID with Kilt +- Continue development of other features + - Dynamic smart contract data instead of single key-value pairs + - Support message bus (like RabbitMQ) + - Use a dedicated database for each individual component + - Support complex case of triage profile + - Migrate to Dot Net Core 8 and AOT where supported + - Improve security of sensitive data (like private key) + - Improve Frontend Registry pages + - Tool for massive Triage call + - Implement any improvements requested by users + - Improve Frontend Admin Tools (dynamic creation smartcontract, chainstatus monitor...) + +## Referral Program (optional) :moneybag: + +- **Referrer:** Patrizia De Bella +- **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** I've been actively following polkadot for a few years, I'm an ambassador for some projects including Ajuna, Moonbean and I'm part of Astar Ink! Academy + +1. Work you have already done + - Starting in June 2023 to developing the project's code. Over the past year, we've been offering our product to potential customers, gathering valuable feedback along the way. These inputs guided us in creating the current version of the product, which we presented through an engaging demo and which piqued the interest of many customers. +2. If there are any other teams who have already contributed (financially) to the project. + - No, all "Future Plans" will be covered by new clients or carried forward by me. +3. Have you applied for other grants so far? + - No From 5dce545fd552e667619240385a891467739050ea Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 21 Jul 2023 00:50:36 -0400 Subject: [PATCH 488/665] Update index.md (#1858) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7913380c1ea..8735a7ff5ea 100644 --- a/applications/index.md +++ b/applications/index.md @@ -132,7 +132,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☒ | ☒ | -| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☐ | +| [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☒ | | [Zkverse](https://github.com/Zkvers) | [Zkverse](zkverse.md) | [GitHub](https://github.com/Zkvers/substrate-zk) | ☐ | ☐ | ☐ | | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☒ | ☒ | From 14d5daef97b2aff70aafafa770864a4358b1fa73 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 21 Jul 2023 06:58:06 +0200 Subject: [PATCH 489/665] Update index.md Add Tracking Chain --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 8735a7ff5ea..0ac9c478d05 100644 --- a/applications/index.md +++ b/applications/index.md @@ -48,6 +48,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | DOTLY: Revolutionizing Polkadot Account Statistics | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | +| [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | [🔝](#2023) From a964ee8875d1aaebd9ab4b6ff0534102f9a08ea3 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 21 Jul 2023 06:59:34 +0200 Subject: [PATCH 490/665] Update index.md Add dotly link --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0ac9c478d05..46f1f6b4691 100644 --- a/applications/index.md +++ b/applications/index.md @@ -47,7 +47,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | -| [justmert](https://github.com/justmert) | DOTLY: Revolutionizing Polkadot Account Statistics | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | +| [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | [🔝](#2023) From 95efd8c475f78c194c8eeaeda1f0c4d6303b5215 Mon Sep 17 00:00:00 2001 From: its-a-setup <96050384+its-a-setup@users.noreply.github.com> Date: Tue, 25 Jul 2023 01:19:44 +0700 Subject: [PATCH 491/665] add TPScore project (#1837) --- applications/TPScore.md | 198 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 198 insertions(+) create mode 100644 applications/TPScore.md diff --git a/applications/TPScore.md b/applications/TPScore.md new file mode 100644 index 00000000000..6951775c1ab --- /dev/null +++ b/applications/TPScore.md @@ -0,0 +1,198 @@ +# TPScore + +- **Team Name:** TPScore +- **Payment Address:** 0xa8E10a8E6EEfB7175fB529b24e1a0b8DdBD29510 (USDC) +- **Level:** 1 + +## Project Overview :page_facing_up: + +This application is in response to the RFP [Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/data_analysis_tools.md) + +### Overview + +TPScore simplifies TPS Data Analysis for non-technical users in the Polkadot Ecosystem. + +TPScore aims to provide non-technical users in the Polkadot ecosystem with an accessible and user-friendly platform for analyzing TPS (Transactions per Second) data. Our goal is to bridge the gap between technical intricacies and user-friendly visualization, empowering individuals to make informed decisions about blockchain adoption, investment, and development. + +Adoption levels and community engagement are vital indicators of a blockchain's success. They directly impact the attractiveness of a network and its potential for growth. While social media followers, media coverage, and developer activity are commonly considered metrics, the true measure of adoption lies in TPS. TPS is a robust metric that correlates with the economic activity on a blockchain, making it a crucial parameter for understanding and evaluating different chains. + +When users choose a blockchain for investment or development purposes, conducting a thorough analysis of each chain is essential. Polkadot's unique architecture and scalability prospects, with its interconnected parachains, offer a vast ecosystem of possibilities. However, determining the TPS of Polkadot and its 40+ parachains is currently a complex task that requires technical knowledge and data analytics expertise. This creates a significant barrier for non-technical users and even presents challenges for those with technical know-how, as gathering TPS data for multiple parachains can be time-consuming. + +TPScore aims to simplify the process of TPS analysis by providing an intuitive and user-friendly analytics website. We remove the need for users to perform complex ETL (Extract, Transform, Load) work or possess specialized data analytics skills. Our platform presents TPS numbers for the Polkadot Relay chain and parachains in a readily understandable format, accessible to anyone. We empower individuals to effortlessly access and compare TPS data across different parachains, enabling them to make informed decisions regarding investments, project selection, and engagement within the Polkadot ecosystem. + +### Project Details + +The final state of the project will consist of two key components: + +1. ETL System: This component will be responsible for fetching data from the blockchain, transforming it, and storing it in a relational database. + +2. User Interface (UI) with data visualizations: The UI will provide a user-friendly interface to access and analyze TPS data. It will include visually appealing and informative visualizations of the data, reducing users barier to understanding blockchain metrics. + +The initial version of TPScore, which will serve as a POC, will cover the Relay chain and 38 parachains. The UI interface will be designed to be accessible on both desktop and mobile devices, ensuring a seamless user experience across various platforms. + +To fetch blockchain data, we will leverage two methods: +1. Subscan API ([list of parachains accessed with Subscan API](https://github.com/its-a-setup/tpscore/blob/main/parachain_info/subscan_parachains.json)) +2. Public endpoints ([list of parachains accessed by public endpoints](https://github.com/its-a-setup/tpscore/blob/main/parachain_info/endpoint_parachains.json)) + +#### 1. ETL System + +We will retrieve blockchain data using either the [Subscan API](https://support.subscan.io/#introduction) or connect to the public endpoints of parachains using the [Substrate interface library](https://pypi.org/project/substrate-interface/1.0.3/). + +To ensure streamlined and efficient data processing, we will leverage Apache Airflow. + +To calculate the average TPS, we will take the number of transactions within the last 100 blocks. We will fetch raw data at regular intervals of every 10 minutes. This raw data will then undergo processing within Airflow's DAGs using Python Operators, ensuring efficient data transformation and preparation. + +Finally, the processed data will be stored in a MySQL database to be later picked up by Next.js framework. + +#### 2. User Interface (UI) with data visualizations + +We will use Next.js as our full-stack framework. It allows us to both retrieve data from MySQL database and render React app on a server. + +To visualize data, we will use a simple and concise UI: the grid of cards with the blockchain's name and TPS. We expect one common use case: users go to our website and scan through all chains to find a desired one. So we will simplify this process by adding handy sorting and filtering. + +#### Architecture + +![Architecture diagram](https://raw.githubusercontent.com/its-a-setup/tpscore_grant/main/static/architecture.png) + +#### Database schema + +![](https://raw.githubusercontent.com/its-a-setup/tpscore_grant/main/static/db_schema.png) + +#### UI Design + +##### Desktop Design + +![Desktop UI design](https://raw.githubusercontent.com/its-a-setup/tpscore_grant/main/static/desktop_main_screen.png) + +##### Mobile Design + +![Mobile UI design](https://raw.githubusercontent.com/its-a-setup/tpscore_grant/main/static/mobile_main_screen.png) + +#### Technology stack +1. Apache Airflow +2. Python + Data Analysis Libraries +3. Next.js & React + +#### Out of scope details + +During this stage, our focus will be solely on the Polkadot ecosystem, and we won't be providing coverage for the Kusama ecosystem. This decision allows us to concentrate on testing the market fit of our Proof of Concept (POC) within the Polkadot network. + +Additionally, we will exclude a specific set of parachains from our analysis ([out of scope parachains](https://github.com/its-a-setup/tpscore_grant/blob/main/parachain_info/out_of_scope_parachains.json)). These parachains are either not yet live on the mainnet or lack a public endpoint for data access. + +### Ecosystem Fit + +Our project addresses a critical gap within the Polkadot ecosystem by providing comprehensive data visualization and analysis tool. Currently, obtaining data from Substrate-based blockchains relies on block explorers that offer a limited set of metrics or require technical skills to access and transform raw data from parachain endpoints. Recognizing this challenge, we aim to simplify the life of Polkadot ecosystem users with easy access to sophisticated network metrics for analyzing network parameters and comparing blockchains. + +Our target audience comprises advanced blockchain users who seek convenient access to comprehensive network metrics but lack the technical expertise or time to perform complex analyses independently. We understand their need for intuitive tools that enable efficient evaluation of blockchain networks, helping them to make informed decisions. + +As of the time of this application, no tools exist for checking TPS across the Polkadot Relay chain and parachains. However, there are 2 similar projects, [ETHTPS](https://ethtps.info/) and [RealTPS](https://realtps.net/), which focus on the Ethereum and other layer-1 networks. The presence of these projects indicates the existence of user needs and market fit. Unfortunately, both of these projects do not cover Polkadot ecosystem and fall short in terms of user-friendliness, highlighting the need for improvement in its UI design. + +## Team :busts_in_silhouette: + +### Team members + +- Ilya Andreev +- Nikita Grechino + +### Contact + +- **Contact Name:** Ilya Andreev +- **Contact Email:** tpscore.engineering@gmail.com + +### Legal Structure + +- **Registered Address:** no registered address +- **Registered Legal Entity:** no registered entity + +### Team's experience + +**Ilya Andreev** has 4+ years of experience in product management, out of which 3 years were spent in P&G focusing on the management and development of Big Data solutions. He has been in the blockchain industry for 3+ years with more than a year working full-time in one of the startups in the DotSama ecosystem. + +**Nikita Grechino** is a Fullstack engineer with more than 5 years of experience. He has been working in the blockchain space since early 2022, focusing on the development of the front-end interface for crypto trading platforms. + +### Team Code Repos + +- https://github.com/its-a-setup +- https://github.com/fromaline + +## Development Status :open_book: + +This project is a response to RFP [Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/data_analysis_tools.md) + +Up until now, our primary focus has revolved around two key objectives: +1. Finding product-market fit +2. Ensuring credible API/endpoints availability for the Polkadot ecosystem + +#### 1. Finding product-market fit + +Max TPS has long been a core indicator of blockchain performance and speed. Numerous articles and blogs compare the maximum TPS of different networks, highlighting its significance ([Article 1](https://academy.binance.com/en/glossary/transactions-per-second-tps), [Article 2](https://www.analyticsinsight.net/top-10-cryptocurrencies-with-a-high-transaction-speed-in-2022/), [Article 3](https://medium.com/codex/cardano-solana-polkadot-fantom-and-telos-vs-the-clock-d439aa73e4a2), etc.). However, max TPS is often based on theoretical calculations rather than real network utilization, making real-time TPS measurement a more valuable alternative. Notably, projects like [ETHTPS](https://ethtps.info/) and [RealTPS](https://realtps.net/) already track TPS outside the Polkadot ecosystem, indicating a growing interest in real-time TPS tracking. + +#### 2. Ensuring credible API/endpoints availability for the Polkadot ecosystem + + +We have successfully identified methods to retrieve data from the Polkadot Relay chain and 38 parachains. We will utilize the [Subscan API](https://support.subscan.io/#introduction) or connect to the public endpoints of parachains using the [Substrate interface library](https://pypi.org/project/substrate-interface/1.0.3/). It is important to note that locating functional parachain endpoints may be challenging for average blockchain users, as there is no centralized source providing all parachain endpoints. Moreover, certain parachains lack public endpoints and will be excluded from this POC. However, we may consider including them in future versions by directly engaging with the respective parachain teams. + +For a detailed list of the parachains accessed through the Subscan API, parachain endpoints, and the out-of-scope parachains, please refer to the provided [link](https://github.com/its-a-setup/tpscore_grant/tree/main/parachain_info) + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 10,000 USD + +### Milestone 1 - ETL System + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3| +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Database schema | We will implement the schema in MySQL database. | +| 2. | Airflow DAGs | We will create Airflow DAGs for data gathering and calculation of TPS metrics. | + + +### Milestone 2 — User Interface (UI) with data visualizations + +- **Estimated Duration:** 1 month +- **FTE:** 1 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | GPLv3 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial**. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that explains how to use TPScore product and how it was build. | +| 1. | Data access | We will access the MySQL database from our Next.js app and process data on the server to make the client as lightweight as possible. | +| 2. | UI | We will build UI according to the designs and test it thoroughly under different conditions. | + + +## Future Plans + +Our primary goal for this project is to develop a POC and validate our assumptions regarding its market fit and appeal to Polkadot users. If we receive a positive response from the community, we intend to dedicate more time and resources to further develop the project. + +In future versions, we have identified several potential features to consider: + +1. Including support for Polkadot parachains that are currently out of scope for the POC by directly engaging with the respective parachain teams. +2. Incorporating historical data and visualizations to observe the TPS dynamics of specific parachains or the relay chain over time. +3. Expanding the project to include data from the Kusama Relay chain and its associated parachains. +4. Enabling easy comparisons by incorporating data from other non-Substrate-based blockchains. +5. Extending the project beyond TPS tracking to include other valuable parachain-related data that is typically challenging to retrieve without technical expertise. + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +We learned about it via Web3 Foundation Website. We've been closely monitoring the DotSama ecosystem for more than a year, we've read documentation, tested various projects/parachains, and participated in staking. After getting a deeper understanding of the technology and the ecosystem we decided to test our own idea and build a POC of a data analytics website for the Polkadot ecosystem. + +This application is a logical next step in our continued interest in Substrate-based chains and Polkadot in particular. \ No newline at end of file From e8593027eaef2d75a64819d5a9d01ebd1492e25f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 24 Jul 2023 20:21:58 +0200 Subject: [PATCH 492/665] Update index.md Add TPScore --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 46f1f6b4691..8b017207276 100644 --- a/applications/index.md +++ b/applications/index.md @@ -49,6 +49,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | +| [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | [🔝](#2023) From 34de1265af69c288dd24896bf683de40386bf6bd Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 24 Jul 2023 15:22:41 -0300 Subject: [PATCH 493/665] Update index.md (#1861) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 8b017207276..e8b9c72f7f4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | | [Collective Intelligence Labs](https://collectiveintelligence.dev/)| [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | -| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☐ | ☐ | +| [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☒ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | | [727.ventures](https://727.ventures) | [Patron](./patron.md) | [GitHub](https://github.com/727-Ventures) | ☐ | ☒ | ☒ | From 07e77b39c026ccc85dada290ae0cbf87cc202dfd Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 25 Jul 2023 01:06:28 -0400 Subject: [PATCH 494/665] Update index.md (#1862) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e8b9c72f7f4..adb6d234d5c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -142,7 +142,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | -| [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☐ | ☐ | +| [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☒ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | From f29b9893f4787e928463d56955c1d2e4990a3ca1 Mon Sep 17 00:00:00 2001 From: Chiro Hiro Date: Tue, 25 Jul 2023 14:12:22 +0700 Subject: [PATCH 495/665] Add Orochi Network's proposal for research and development MPC ECDSA (#1786) --- applications/orochi-network-orosign-part1.md | 139 +++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 applications/orochi-network-orosign-part1.md diff --git a/applications/orochi-network-orosign-part1.md b/applications/orochi-network-orosign-part1.md new file mode 100644 index 00000000000..3e92a275415 --- /dev/null +++ b/applications/orochi-network-orosign-part1.md @@ -0,0 +1,139 @@ +# Orochi Network's proposal for research and development MPC ECDSA + +- **Team Name:** Orochi Network +- **Payment Address:** 0x2d309e09149259bD2b9a8C88985581B724d058b2 (ETH) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Overview + +Users are now able to take advantage of the highest security feature similar to a cold storage while experiencing flexibility and convenience of the mobile app at minimal cost. Orosign is a self-managing custodial Mobile App for digital assets/identity that suits all demands of Web3. + +### Project Details + +Orosign project utilize cryptographic primitives and Multiparty Computation (MPC) to help people manage/secure their digital assets, it could provide highest security meanwhile friendly to end-users. Orosign provides following features: + +- **Gasless Multi-signature:** We use ECDSA proofs to perform off-chain voting to manage multi-signature wallet. +- **Gaming & NFT:** Support gaming by providing automation transaction signing for Web3 game, this wallet can manage and display NFTs. +- **ZeroKey:** A MPC based wallet, we build ECDSA on top of MPC to secure the signing process where user can perform the signing without any actual private key. +- **Web3 Passport:** Support Proof of Carrying Data (PCD) for the Web3 authorization. +- **Account Abstraction with MPC:** You could see the raise of Account Abstraction at the smart contract level, we want to take it a bit further with MPC. We want to provide a MPC based account abstraction for the end-users, so they can manage their digital assets in a more secure way. + +![](https://orochi.network/assets/images/orosign.png) + +### Ecosystem Fit + +- **Non-custodial** Users are holding their own digital asset that meant the encrypted private keys is stored in their crypto wallet and hold the major secret shares in MPC wallet. Orosign was design to make sure no one able to touch people digital asset even Orochi Network. +- **High Customizability** In gasless Multi-signature Wallet and MPC Wallet, user can customize number of participants and the threshold to perform signing process. +- **Highest Level of Security** Orosign can be provide the first MPC Wallet on Polkadot. +- **NFT & games optimization** Automatic showcase for all NFT collectibles, and support automation transaction signing for Web3 game. + +**What is the benefit of this solution compared to others?** + +- Multi-signature and MPC Wallet enable highest level of security in co-ownership for vast majority of Polkadot's users. +- Providing the first MPC Wallet as a mobile application on Polkadot +- Orosign is building toward the vision of Web3 passport, it allos user to manage their digital identity and assets in one place. + +**Is this meant to be an enterprise-grade security wallet such as this SaaS wallet?** + +- Orosign is a self-custodian wallet, we offer enterprise-grade security for retail and semi-retail users. + +**Will it be cross-chain compatible or is it only meant for substrate chains?** + +- In the budget of this proposal we only able to support Polkadot's chain and its parachains. We will consider to support other chains in the future. + +**Can you further expand on the technical details of the wallet in the deliverables?** + +- We implement DKG to generate secret shares that will be used to perform signing process without actual private key. +- User will hold let's say 3 shares (2 sign shares and 1 backup) of 5 shares (Orochi Network hold 2). We created a threshold signature 3 of 5, it's required at least 1 share from user to perform transaction co-signing. + - Orochi Network can't perform the signing process. + - User can perform the signing process with or without Orochi Network. + +## Team :busts_in_silhouette: + +### Team members + +- Chiro Hiro - CEO Orochi Network [Github](https://github.com/chiro-hiro) +- Hubert Nguyen - CGO Orochi Network [Github](https://github.com/hubertnguyen88) +- Minh - R&D Specialist [Github](https://github.com/phamnhatminh1292001) +- James - Front-end Developer [Github](https://github.com/seawish369) +- Kevin - Back-end Developer [Github](https://github.com/dqtkien) +- Trang - Business Analysis + +### Contact + +- **Contact Name:** Hubert Nguyen +- **Contact Email:** hubert@orochi.network +- **Website:** www.orochi.network + +### Legal Structure + +- **Registered Address:** OROCHI NETWORK PTE. LTD,68 CIRCULAR ROAD , #02-01 , SINGAPORE (049422) +- **Registered Legal Entity:** OROCHI NETWORK PTE. LTD,68 CIRCULAR ROAD , #02-01 , SINGAPORE (049422) + +### Team's experience + +We are focusing in cryptography and especially ZKP, we want to utilize cryptography to provide **Verifiable Computation**. + +- Our technical blog [https://docs.orochi.network/](https://docs.orochi.network/) +- Our Github repo [https://github.com/orochi-network](https://github.com/orochi-network) +- Our proposal for zkMemory [https://hackmd.io/@chiro-hiro/SkqNGtcW2](https://hackmd.io/@chiro-hiro/SkqNGtcW2) + +### Team Code Repos + +- https://github.com/orochi-network + +### Team LinkedIn Profiles (if available) + +- [Chiro Hiro](https://www.linkedin.com/in/chiro8x) +- [Hubert Nguyen](https://www.linkedin.com/in/hungnguyen88) + +## Development Status :open_book: + +[https://github.com/orochi-network](https://github.com/orochi-network) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 +- **Full-time equivalent (FTE):** 2 +- **Total Costs:** $10,000 + +### Milestone 1 + +In this milestone, our team use cryptography to build a bridge from Digital Signature Algorithm (DSA especially ECDSA, EdDSA, Schnorr Signature) to Multi-Party Computation (MPC) allow the signing process to be performed without actual private key. There are 3 DSAs were used by Polkadot: `secp256k1`, `ed25519`, `sr25519`. Before we can build a MPC based DSA, we need to research the algorithm and figure out how we could fit MPC into it. You may notice that each curve have different parameters and different field, after the research we can specify how MPC should be implement without harm its security. + +- **Estimated Duration:** 2 months +- **FTE:** 2 +- **Costs:** $10,000 + +| Number | Deliverable | Specification | +| ------- | ----------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | CC0 1.0 | +| **0b.** | Research | Researching about Polkadot signature system and research their compatibility with MPC by which we can be fully comptabile with Polkadot and its parachains | +| **0c.** | Research | Public technical report for every research we made, everything published under [CC0 1.0](https://creativecommons.org/publicdomain/zero/1.0/) | +| **1.** | Research | Researching about MPC in ECDSA (all supported signatures by Polkadot) | +| **2.** | Research | Researching MPC for `secp256k1` and providing the document that describe how the MPC will be built and its security consideration | +| **3.** | Research | Researching MPC for `ed25519` and providing the document that describe how the MPC will be built and its security consideration | +| **4.** | Research | Researching MPC in `sr25519` and providing the document that describe how the MPC will be built and its security consideration | + +## Future Plans + +- Implement MPC as a Rust crate that supports `secp256k1`, `ed25519`, `sr25519`, supporting multiparty computation to perform transaction/message signing with mentioned DSA. This module will implement with Rust programing language and compile to Wasm opcode or native lib for React Native app. +- Implement a node of MPC's distributed network to perform MPC. +- Implement API interface for distributed system, allow Wallet API to connect to MPC nodes. +- Integrate wallet API with node's RPC, provide back-end for Orosign front-end. +- Integrate wallet API with Orosign front-end, allow users to use MPC wallet. +- Integrate MPC in both front-end and back-end of Orosign, allow user to perform transaction signing with mobile device. +- Support PCD (Proof of Carrying Data) + +## Additional Information :heavy_plus_sign: + +We do research about MPC, especially ECDSA threshold signature for 1 year, publish several articles on our blog ([docs.orochi.network](https://docs.orochi.network)). Drafting the paper to consider right method to Implement threshold signature (ECDSA), considering different methods to for implementation. Have some related work on MPC [ECVRF](https://github.com/orochi-network/orochimaru/tree/main/libecvrf) which is shared some similar primitives to ECDSA. + +- Are there are any teams who have already contributed (financially) to the project? + - No, our project is self funded till now +- Have you applied for other grants so far? + - No From 94fb52baba28ccd5d4e37f73765af8aaaaa7a655 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 25 Jul 2023 09:14:36 +0200 Subject: [PATCH 496/665] Update index.md --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index adb6d234d5c..3f2db78e0f9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -50,6 +50,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | | [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | +| [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | [🔝](#2023) From c658d45c69b23aac0f4d270622796388b587d81d Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Tue, 25 Jul 2023 14:56:41 +0700 Subject: [PATCH 497/665] Amend milestone 3. (#1859) * Amend milestone 3. * Update applications/hybrid.md Co-authored-by: S E R A Y A --------- Co-authored-by: S E R A Y A --- applications/hybrid.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/applications/hybrid.md b/applications/hybrid.md index f11f38c7077..a8c7131e949 100644 --- a/applications/hybrid.md +++ b/applications/hybrid.md @@ -223,11 +223,10 @@ Development has not started on the project, however the codebase will largely fo | **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can build a chain-specific Hybrid Indexer and use the rudimentary explorer dapp. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 0e. | Video | We will publish a video that explains and demonstrates all aspects of the explorer. | -| 1. | Dapp | The dapp will be extended to query block and state via either the Substrate Connect light client, or via direct connect to a full node via WSS. | -| 2. | Cross-chain UI | When a Tx includes a XCM, it will be easy and intuitive to open the relevant block from the other chain(s). | -| 3. | Support event schema changes | It will be possible to index old events that have changed their Rust type in a runtime upgrade. | -| 4. | Per-chain build | Indexer needs to be built for the chain, e.g. hybrid-indexer-polkadot - custom pallets can be indexed. | +| 0e. | Blog post | We will publish a blog post that explains and demonstrates all aspects of the explorer. | +| 1. | Hybrid Indexer Library | Convert hybrid-indexer into a library that can be used by a Substrate chain indexer. Write macros for indexing all standard Substrate pallets. | +| 2. | Polkadot Indexer | New rust project using hybrid-indexer library to index polkadot, kusama, rococo & westend. | +| 3. | Chain select | The Hybrid dapp will have a dropdown to switch between the 4 polkadot chains. | ## Future Plans From 1c35866ee1fd79772919089087d6fe444a952b54 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 27 Jul 2023 12:29:43 -0300 Subject: [PATCH 498/665] Update index.md (#1867) --- applications/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/index.md b/applications/index.md index 3f2db78e0f9..bdff7366135 100644 --- a/applications/index.md +++ b/applications/index.md @@ -78,10 +78,10 @@ Use this page for an overview of all public grants and their status. Use the sid | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | -| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☐ | +| [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | -| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☐ | ☐ | +| [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☒ | ☒ | | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | From 07e344419b46dafd98af562ec1a7dfedab738252 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 28 Jul 2023 04:20:49 -0300 Subject: [PATCH 499/665] Update index.md (#1868) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index bdff7366135..1ffd62fe111 100644 --- a/applications/index.md +++ b/applications/index.md @@ -76,7 +76,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | -| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☐ | ☐ | +| [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☒ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | From 7647004cf0850a3f464643fc712aff573cd14ba4 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 28 Jul 2023 12:07:40 -0300 Subject: [PATCH 500/665] Update index.md to check performance benchmark (#1871) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1ffd62fe111..29690994ed5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Ed Anderson](https://github.com/eca20) | [Blockchainia](./blockchainia.md) | [GitHub](https://github.com/eca20) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | -| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☐ | ☐ | +| [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | From 1db25efd883614cba5203a7e995cbc0213b04804 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 28 Jul 2023 15:13:17 -0400 Subject: [PATCH 501/665] Update RedStone Network.md (#1870) --- applications/RedStone Network.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/RedStone Network.md b/applications/RedStone Network.md index f6934258d2c..8731b5d6ab4 100644 --- a/applications/RedStone Network.md +++ b/applications/RedStone Network.md @@ -3,6 +3,7 @@ - **Team Name:** Redstone Network - **Payment Address:** 0x24cfc36f699dacc5cb652630ddd894a8df658233 (Ethereum ERC20 USDT) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1093#issuecomment-1624203004) ## Project Overview :page_facing_up: From 05bea6d322ae595bb84fe0d83e059488b6e02fce Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 28 Jul 2023 15:13:36 -0400 Subject: [PATCH 502/665] Update FuzzLand.md (#1869) --- applications/FuzzLand.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/FuzzLand.md b/applications/FuzzLand.md index 8f7397d813c..9a712bc9370 100644 --- a/applications/FuzzLand.md +++ b/applications/FuzzLand.md @@ -3,6 +3,7 @@ - **Team Name:** FuzzLand - **Payment Address:** 0x3a2a700d9d822D23D3F0F55F4b097753b5B2FC9A (ERC20 DAI/USDT) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1499#issuecomment-1634849391) ## Project Overview :page_facing_up: From 879f18908e07953fbc8681699b98f35ef809307e Mon Sep 17 00:00:00 2001 From: Aviraj Khare <49766964+avirajkhare00@users.noreply.github.com> Date: Sat, 29 Jul 2023 15:32:14 +0530 Subject: [PATCH 503/665] [Aviraj] Amend polkasearch.xyz contract (#1872) --- applications/polkasearch.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/applications/polkasearch.md b/applications/polkasearch.md index 1154ebceabf..9f9d6e5b665 100644 --- a/applications/polkasearch.md +++ b/applications/polkasearch.md @@ -1,7 +1,7 @@ # polkasearch.xyz - **Team Name:** Aviraj Khare -- **Payment Address:** Bitcoin Address: bc1qtr9993ch6zlr29j5c22zzax57h62x5gj24wtxk +- **Payment Address:** USDC(ERC20) Address: 0x123FfB2efB8D74D10d6B3a882A94531D99234B11 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview :page_facing_up: @@ -25,7 +25,7 @@ Polkasearch.xyz aims to become a discovery platform where users can discover Gra #### Tech Stack - [Django](https://www.djangoproject.com/): We will be using Django as our Web framework. - - Database: We will be using Postgresql database. + - Database: We will be using managed Postgresql database provided by `railway.app` infrastructure. - Wallet: We will be using polkadot{JS} extension wallet so that user can signup/login in the website by signing a message. #### API Schema @@ -102,7 +102,6 @@ Our project can provide user with earning opportunities, learning material and t - **Contact Name:** Aviraj Khare - **Contact Email:** avirajkhare00@gmail.com -- **Website:** https://avirajkhare00.com ### Legal Structure @@ -121,14 +120,14 @@ Please also provide the GitHub accounts of all team members. If they contain no - https://github.com/avirajkhare00 -### Team LinkedIn Profiles (if available) +### Team LinkedIn Profiles (if available) - https://www.linkedin.com/in/avirajkhare00 ## Development Status :open_book: -Yet to start the development of the project. +Currently working on CI(GitHub Actions) of this project to deploy on [Railway infrastructure](https://railway.app). ## Development Roadmap :nut_and_bolt: @@ -154,9 +153,10 @@ Below we provide an **example roadmap**. In the descriptions, it should be clear | **0b.** | Documentation | We will provide the documentation on the README of the repository. If needed, we will create `docs` directory that would contain in-depth documentation. | | **0c.** | Testing and Testing Guide | Models, Views and Forms will be covered by [`django.test`](https://docs.djangoproject.com/en/4.1/topics/testing/) module which is a sub-module of `unittest`. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 1. | Authentication | User can be authenticated either via traditional web2 username/password or via polkadot extension wallet, web3 based. | -| 2. | CRM for bounties | We will be creating this CRM using Django. Everyone can view a bounty, candidate can apply for bounty and employer can create bounty(ies). | -| 3. | CRM for jobs | We will be creating this CRM using Django. Everyone can view jobs, candidate can apply for a job or multiple jobs, employer can list a job or multiple jobs. | +| 1. | Completion of basic CI/CD pipeline | We will be using GitHub Actions to deploy the site in [Railway's infrastructure](https://railway.app/) so that there could be more transparency. We will be creating different integration and production environment for the deployment so that more and more people could contribute in much seamless manner. +| 2. | Authentication | User can be authenticated either via traditional web2 username/password or via polkadot extension wallet, web3 based. | +| 3. | CRM for bounties | We will be creating this CRM using Django. Everyone can view a bounty, candidate can apply for bounty and employer can create bounty(ies). | +| 4. | CRM for jobs | We will be creating this CRM using Django. Everyone can view jobs, candidate can apply for a job or multiple jobs, employer can list a job or multiple jobs. | ### Milestone 2 From 46947cab4b261de18eea74f8a9bc4b239729da4d Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 1 Aug 2023 02:07:22 -0400 Subject: [PATCH 504/665] Update index.md (#1876) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 29690994ed5..9a32e40881b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -145,7 +145,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☒ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | -| [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☐ | ☐ | +| [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☒ | ☐ | | [Itering](https://www.itering.io/) | [Solidity Verifier Implementation for Accountable Light Client](./solidity-verifier-for-accountable-light-client.md) | [GitHub](https://github.com/darwinia-network) | ☐ | ☒ | ☐ | [🔝](#2023) From db8cfe4cb565f0bab3a01c52e1531a5559160ba8 Mon Sep 17 00:00:00 2001 From: William Freudenberger Date: Tue, 1 Aug 2023 09:40:29 +0200 Subject: [PATCH 505/665] Centrifuge TWAMM grant application (#1813) * Centrifuge TWAMM grant application * adjust financials * fix: remove PoC * add twamm 2.0 milestone --- applications/centrifuge-twamm.md | 356 +++++++++++++++++++++++++++++++ 1 file changed, 356 insertions(+) create mode 100644 applications/centrifuge-twamm.md diff --git a/applications/centrifuge-twamm.md b/applications/centrifuge-twamm.md new file mode 100644 index 00000000000..d5b66de39bc --- /dev/null +++ b/applications/centrifuge-twamm.md @@ -0,0 +1,356 @@ +# Centrifuge On-Chain Automated Treasury Management + +- **Team Name:** k/factory (former Centrifuge Development Team) +- **Payment Address:** Ethereum(USDC) - 0x2B8A956BF807E22d858dc9AD2eFc30cccc3Ea676 +- **Level:** 🐓 3 + +## Project Overview :page_facing_up: + +### Problem Statement + +The [ongoing discussion](https://forum.polkadot.network/t/statemint-update-roadmap/1200/) about automated market makers (AMMs) in the Statemint roadmap is mainly focused on improving the user and custodian experience by allowing small atomic swaps natively and making Statemint a central hub for asset deposits. This addresses important pain points by enabling transaction fees to be paid in non-native tokens and facilitating interaction with the entire asset variety of the ecosystem without requiring to run custom nodes or infrastructure. + +However, we believe that one aspect has been overlooked: the slow swaps of large volumes, which can be easily front-run or sandwiched. This is particularly relevant in the context of trades proposed through governance for use cases such as +1. Paying out treasury grants, bounties or even [salaries](https://github.com/paritytech/substrate/pull/13378) in less volatile currencies (ie. stablecoins). +2. Enabling parachains to build a DOT reserve which can be used to acquire a parachain lease, pay XCM fees, or [increase availability cores](https://forum.polkadot.network/t/parachain-scaling-by-parablock-splitting/341) during times of high demand (once supported). +3. Governance deciding to invest part of the treasury into a token to diversify their treasury + +What we need is the opposite of what a traditional AMM provides: atomic swaps with immediate execution, even in relatively illiquid assets. A governance vote is unable to time the market and is highly predictable. Therefore, executing such a transaction as a market order on an AMM is problematic, as it will be guaranteed to be front-run. A better solution is to "dollar-cost-average" over a long period of time making it harder for price manipulation to affect the purchase. + + +### Solution + +At Centrifuge, we have researched distinct approaches of how to achieve hard-to-front-run slower transactions. In our opinion, the most elegant solution is [TWAMM (Time Weighted Automated Market Maker](https://www.paradigm.xyz/2021/07/twamm). We are of the firm conviction that the implementation of this model represents the most efficacious approach for executing token swaps in the context of slower and passive procedures, such as governance. + +#### Time Weighted Average Market Maker + +The TWAMM protocol represents a sophisticated advancement of the conventional constant product (Uniswap-v2 style) automated market maker (AMM) framework. It introduces a novel feature wherein users can split their orders into infinitely small fractions and execute them at each block interval. This feature addresses a significant shortcoming of traditional AMMs that encounter severe slippage issues when processing sizable orders, leaving them vulnerable to front-running tactics. + +Furthermore, the inherent risk associated with executing transactions within a single block is nullified by the TWAMM protocol. By segmenting orders into hundreds of small units spread over a prolonged time frame, the slippage rate of the embedded AMM is markedly reduced, and the cost of price manipulation is exponentially elevated. Artificially manipulating prices over multiple blocks creates an opportunity for other traders to exploit the price-inflation tactic, which ultimately undermines the manipulative effort. This innovative solution offers an elegant means of executing large orders even in relatively illiquid markets. It is particularly well-suited for slow automated processes, such as governance-controlled treasury operations, that can effectively implement a dollar-cost averaging strategy over extended periods. + +### Project Details + +This proposal does not aim to build an alternative DEX. Instead, TWAMM will be a feature on top of the Statemine/t DEX, whose logic was renamed to **`pallet-asset-conversion`** ([Substrate PR #12984](https://github.com/paritytech/substrate/pull/12984)) as a result of discussions on the Polkadot forum. While **`pallet-asset-conversion`** will remain independent of our TWAMM pallets, TWAMM expects an embedded AMM interface via the pallet's **`Config`** trait, which will be based on **`pallet-asset-conversion`**, making it easy for any chain implementing **`pallet-asset-conversion`** to add TWAMM to their runtime with minimal overhead. + +To handle the accounting, distribution and claiming of sale proceeds, `pallet-twamm` will use a `Rewards` trait implemented by `pallet-rewards`. The latter trait and pallet is not part of the application we have already developed that under GNU General Public License v3.0. + +![](https://www.plantuml.com/plantuml/svg/VLF1Rjim3BthAtXSYwKVK0H1rnrs6T2XFHP5mCYq8LWI1KbUDXJzzr9ociYhiOjXYEyzFZvATobZp9EpIgNH-80H7MXsWJtv3AyAu1xrE4IUVFUTBSVjLa0Pk8SGEN12kzl1BxJqWsr7_f6xDSxJT4WvOYO1Fur_x-r4wgtjcJ9776Yj8voLOSc9f3FwmQwp7gBKQfSB3ftR6tXMOiLaOIIZlpa7NupF57lKT2L20EeQqXG2ovpfY24OFq0joDIPH_8GqCGaCFeZ4P14OJI1yJqtPynsFdffBKGwOknIO-DnFbbpWLhBG1bwcKTRDAw4hea4NI5zP0UM_I14oL2saFvXJOcYX8iZIOC2s9SjN5riLbayM3fBB_tcupAqdwTk3x4JvVybDnsSoLco-mfJwB3yLGpw3ZHwJTQMO2LJBbgfuLPJfTXwKiy1hQMygPPUOFKcOfeTdy6dl0lSSuProWbq9c5AyjNiVuilmxwmsoiib0hPNo2WL6qCcyskMV9jsK1gIdEQduu_Ohu5uu8b9wylgOlCzkRcGtG9cLcb_CdG0gVko7VbdRy3) + +Please note the following draft spec is subject to change during the implementation. + +#### pallet_twamm + +##### Structs +```rust +/// Exposes information about an existing longterm order. +struct Order { + id: OrderId, + owner: AccountId, + expiration_block: BlockNumber, + sell_rate: AssetBalance, + asset_in: AssetId, + asset_out: AssetId, +} +``` + +##### Storage +```rust +/// Tracks next available order identifier. +type NextOrderId = StorageValue; + +/// Tracks longterm order details. +type LongtermOrders = + StorageMap>; + +/// Tracks order ids per account. +type OrdersOf = + StorageMap>; + +/// Tracks orders to be executed at a specific block. +type OrdersAt = + StorageMap>; +``` + +##### Extrinsics + +```rust +/// Submit a new longterm order. +/// +/// Noop if pool (asset_in, asset_out) does not exist in the configured [`EmbeddedAmm`]. +fn submit_order(origin: Origin, asset_in: CurrencyId, asset_out: CurrencyId, sell_rate: AssetBalance, expiration_block: BlockNumber) -> DispatchResult; + +/// Cancel an existing order. +/// Cleans all storage associated to the order and claims proceeds. +/// +/// Expects origin to be owner of order. +fn cancel_order(origin: Origin, id: OrderId) -> DispatchResult; + +/// Update the `sale_rate` of an existing order. +/// +/// Expects origin to be owner of order. +fn update_order(origin: Origin, id: OrderId, new_rate: AssetBalance) -> DispatchResult; + +/// Withdraw proceeds for the specified account from an order. +/// +/// Can be called anytime after order submission until the order +/// terminated and all proceeds were claimed. +fn withdraw_proceeds_for(origin: Origin, owner: AccountId, id: OrderId) -> DispatchResult; +``` + +#### AMM Traits +```rust +/// Basic AMM trait which exposes buy and sell functionality +trait BasicAmm { + type MaxSwapPathLength; + + /// Swap the exact amount of `asset1` into `asset2`. + /// `amount_out_min` param allows you to specify the min amount of the `asset2` + /// you're happy to receive. + /// + /// [`AssetConversionApi::quote_price_exact_tokens_for_tokens`] runtime call can be called + /// for a quote. + /// + /// NOTE: Implemented by `pallet_conversion_rate::Pallet::` + fn swap_exact_tokens_for_tokens( + path: BoundedVec, + amount_in: AssetBalance, + amount_out_min: AssetBalance, + send_to: AccountId, + keep_alive: bool, + ) -> DispatchResult; + + /// Swap any amount of `asset1` to get the exact amount of `asset2`. + /// `amount_in_max` param allows to specify the max amount of the `asset1` + /// you're happy to provide. + /// + /// [`AssetConversionApi::quote_price_tokens_for_exact_tokens`] runtime call can be called + /// for a quote. + /// + /// NOTE: Implemented by `pallet_conversion_rate::Pallet::` + fn swap_tokens_for_exact_tokens( + path: BoundedVec, + amount_out: AssetBalance, + amount_in_max: AssetBalance, + send_to: AccountId, + keep_alive: bool, + ) -> DispatchResult; +} +``` +```rust +/// Basic AMM API trait which exposes current prices. +/// +/// NOTE: Implemented by pallet_conversion_rate::Pallet:: +trait AssetConversionApi { + /// Provides a quote for [`Pallet::swap_tokens_for_exact_tokens`]. + fn quote_price_tokens_for_exact_tokens(asset1: AssetId, asset2: AssetId, amount: AssetBalance, include_fee: bool) -> Option; + + /// Provides a quote for [`Pallet::swap_exact_tokens_for_tokens`]. + fn quote_price_exact_tokens_for_tokens(asset1: AssetId, asset2: AssetId, amount: AssetBalance, include_fee: bool) -> Option; + + /// Returns the size of the liquidity pool for the given asset pair. + fn get_reserves(asset1: AssetId, asset2: AssetId) -> Option<(Balance, Balance)>; +} +``` + +#### Rewards (for claiming proceeds) + +This interface is based on paper ["Scalable Reward Distribution on Ethereum Blockchain"](https://uploads-ssl.webflow.com/5ad71ffeb79acc67c8bcdaba/5ad8d1193a40977462982470_scalable-reward-distribution-paper.pdf) paper which presents a pull based reward distribution in `O(1)` per staking group, e.g. staked asset. In the context of TWAMM, stakes correspond to the sale rates and rewards to the sale proceeds. The paper assumes static stakes but the idea can be extended for dynamic ones. + +In order to keep the efficient constant proceeds accounting, we envision to map each trading pair `(asset_in, asset_out)` to its unique group such that the overall complexity for accounting rewards is linearly dependent on the sum of sold and bought assets, e.g. `O(#assets_in + assets_out)` which is much lower than `O(#orders)`. Within each of these groups, the accounting is still in `O(1)` and thus independent of the number of stakers. + +##### `Rewards` Trait +```rust +trait Rewards { + /// Check if the group is ready to be rewarded. + /// Most of the cases it means that the group has stake that should be + /// rewarded. + fn is_ready(group: &Group) -> bool; + + /// Reward the group mutating the group entity. + fn reward_group( + group: &mut Group, + amount: Balance, + ) -> Result; + + /// Add stake to the account by mutating the currency and group to achieve + /// that. + fn deposit_stake( + account: &mut Account, + currency: &mut Currency, + group: &mut Group, + amount: Balance, + ) -> DispatchResult; + + /// Remove stake from the account by mutating the currency and group to achieve + /// that. + fn withdraw_stake( + account: &mut Account, + currency: &mut Currency, + group: &mut Group, + amount: Balance, + ) -> DispatchResult; + + /// Compute the reward for the account. + fn compute_reward( + account: &Account, + currency: &Currency, + group: &Group, + ) -> Result; + + /// Claim the reward, mutating the account to reflect this action. + /// Once a reward is claimed, next calls will return 0 until the group will + /// be rewarded again. + fn claim_reward( + account: &mut Account, + currency: &Currency, + group: &Group, + ) -> Result; + + /// Return the balance of an account. + fn account_stake(account: &Account) -> Balance; + + /// Return the balance of a group. + fn group_stake(group: &Group) -> Balance; +} +``` + +##### Reward Structs +```rust +struct Group { + total_stake: Balance, + rpt: Rate +} + +struct StakeAccount { + stake: Balance, + reward_tally: IBalance, +} +``` + +##### Reward Storage +```rust +/// Maps a staked currency to its corresponding proceeds group id and out currency. +type Currencies = StorageMap + +/// Maps group identifiers to their [`Group`]. +type Groups = StorageMap + +/// Maps the pair of a staking account and their staked currency to their current stake and reward tally. +type StakeAccounts = StorageDoubleMap +``` + +### Ecosystem Fit + +> #### Where and how does your project fit into the ecosystem? + +We believe that a comprehensive response to this question can be found in our aforementioned sections on the [Problem Statement](#Problem-Statement) and [Solution](#Solution). In essence, our solution presents a seamless opt-in extension to the pallet-asset-conversion, which can be implemented across various Substrate chains, including the relaychain, to facilitate the operation of a simplified Uniswap V2 decentralized exchange. The proposed TWAMM extension effectively addresses challenges associated with executing large orders, even within relatively illiquid markets. It particularly suits gradual automated procedures, such as treasury operations under governance control, allowing for the efficient implementation of a dollar-cost averaging strategy over extended timeframes. + +> #### Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + +The target audience can be categorized into two distinct groups. Firstly, it caters to Parachain developers seeking to seamlessly integrate the extension on top of pallet-asset-conversion. Secondly, it also appeals to Governance participants of any chain that implements TWAMM. + +> #### What need(s) does your project meet? + +By optimizing the process of diversifying the native treasury in the context of a Multi Asset one, TWAMM empowers parachains to establish a DOT reserve. This reserve can be utilized for various purposes, such as acquiring a parachain lease, covering XCM fees, or enhancing availability cores during periods of high demand (once supported). Furthermore, it facilitates the disbursement of treasury grants, bounties, or even salaries in currencies with lower volatility, such as stablecoins. + +The presence of these features serves as the driving force behind the ongoing endeavor to develop a Multi Asset Treasury. In fact, the significance of this effort was underscored by a dedicated offsite meeting held in March 2023, which involved notable participants such as Gav, Parity developers, and @wischli. During the discussions, a key insight emerged - the inclusion of TWAMM within Multi Asset Treasuries would be a highly advantageous enhancement. This addition would streamline the execution of sizable orders while ensuring a robust level of security, effectively mitigating the risks associated with front-running vulnerabilities. + +> #### Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? If so, how is your project different? + +The primary contributor to HydraDX, the Galactic Council, is currently developing a tailored version of TWAMM called [DCA](https://github.com/galacticcouncil/HydraDX-node/tree/381182f714b2f7257cced7f2d73a0a93f5239579/pallets/dca) (dollar-cost averaging) within their Omnipool protocol. However, their solution is closely intertwined with Omnipool and is only compatible with it. + +Furthermore, their existing approach involves the execution of trades at regular intervals using the `on_initialize` hook. However, this method faces limitations when it comes to accommodating a significant volume of orders efficiently. In contrast, the TWAMM concept is founded on the principle that long-term orders do not need to be executed periodically. This is because such orders can be calculated effortlessly based on the most recent execution and are ensured to be executed before the regular orders of the embedded AMM. By adopting this approach, the need for frequent periodic executions is eliminated, allowing for streamlined and optimized processing of orders. + +Consequently, integrating their solution into Substrate parachains would involve substantial complexities and overhead. One of our USPs is the seamless and plug-and-play integration we offer for any Substrate chain that implements the straightforward `BasicAmm` interface. This integration can be achieved by utilizing pallet-asset-conversion or any other customized AMM. + +Additionally, Joe Petrowski, the leader of the System Parachain team, envisions our TWAMM solution being incorporated into the Asset Hub, thereby extending the functionalities of both relay chain treasuries. Otherwise, it is highly probable that `pallet-asset-conversion` alone would be utilized, even for slow swaps involving substantial volumes, as a means to diversify the Multi-Asset Treasury of the Relaychain, which is currently under development. Considering that significant swaps involving non-System Parachains by the Polkadot Treasury are unlikely to occur in the foreseeable future (prior to the launch of `SPREE`), we strongly believe that implementing a comprehensive TWAMM solution within the Asset Hub would be a substantial improvement for the ecosystem. Parties with a keen interest in a more efficient implementation may choose to execute transactions through alternative parachains, as discussed in the various [DEX deliberations](https://forum.polkadot.network/t/statemint-update-roadmap/1200). If we dare to dream, we envision our proposed pallets being integrated into the `frame` in the future. + + + + +## Team :busts_in_silhouette: + +### Team members + +- *TWAMM Project Lead & Rust Developer*: William Freudenberger (@wischli) +- *CTO*: Jeroen Offerijns (@offerijns) +- *Technical Product Manager & Rust Developer*: Frederik Gartenmeister (@mustermeiszer) + +### Contact + +- **Contact Name:** William Freudenberger +- **Contact Email:** william@k-f.co +- **Website:** https://k-f.co/ +- **Protocol website**: https://centrifuge.io/ + +### Legal Structure + +- **Registered Address:** k-f dev AG, Grafenauweg 8, 6300 ZUG SWITZERLAND +- **Registered Legal Entity:** k-f dev AG + +### Team's experience + +This grant is proposed by k/factory, a core development contributing to the [Centrifuge](http://centrifuge.io/) project. A team made of experienced Substrate builders and a well established project in the Polkadot/Kusama ecosystem. + +We have already received and successfully delivered multiple grants: + +1. We developed a Go-based RPC library for interacting with Substrate nodes ([GSRPC](https://github.com/centrifuge/go-substrate-rpc-client/)) as a Web3 Foundation grant in [Q3 2019](https://github.com/w3f/Grants-Program/blob/master/applications/index.md#%EF%B8%8F-wave-3---q3-2019) and maintenance coverage as one of the first [Polkadot treasury proposals](https://polkadot.polkassembly.io/motion/12) in Q3 2020. +2. We also built [an early bridge](https://github.com/ChainSafe/ChainBridge) together with ChainSafe in [Q1 2019](https://github.com/w3f/Grants-Program/blob/master/applications/index.md#%EF%B8%8F-wave-1---q1-2019) and [Q1 2020](https://github.com/w3f/Grants-Program/blob/master/applications/index.md#%EF%B8%8F-wave-5---q1-2020) which was funded by a Web3 Foundation grant. +3. Last but not least, [FUDGE](https://github.com/centrifuge/fudge) received a [Polkadot treasury grant](https://polkadot.polkassembly.io/treasury/184) In Q4 2022. This tool provides a simple and generic way to interact with and manipulate the database of a Substrate-based blockchain. + +Moreover, the k/f team has contributed to the Substrate and other related repositories in numerous [pull requests](https://github.com/search?q=user%3Aparitytech+author%3Awischli+author%3Amustermeiszer+author%3Abranan+author%3Anunoalexande+author%3Alemunozm+author%3Amikiquantum+author%3Alucasvo+author%3Aofferijns+author%3Acdamian&type=pullrequests), [new issues](https://github.com/search?q=user%3Aparitytech+author%3Awischli+author%3Amustermeiszer+author%3Abranan+author%3Anunoalexande+author%3Alemunozm+author%3Amikiquantum+author%3Alucasvo+author%3Aofferijns+author%3Acdamian&type=issues) and [discussions](https://forum.polkadot.network/search?expanded=true&q=%40mustermeiszer). We have deep knowledge in distributed/decentralized applications, libp2p, Golang, Solidity and Ethereum overall, zkSNARKs, and tokenization of assets with NFTs and has been developing with Substrate since Summer 2019. + +### Team Code Repos + +- https://github.com/centrifuge/centrifuge-chain +- https://github.com/centrifuge/go-substrate-rpc-client +- https://github.com/centrifuge/go-centrifuge +- https://github.com/centrifuge/fudge + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/william-freudenberger/ +- https://www.linkedin.com/in/jofferijns/ +- https://www.linkedin.com/in/frederik-gartenmeister/ + +## Development Status :open_book: + +Our recent collaboration on the [development of a Multi Asset Treasury](https://github.com/paritytech/polkadot/issues/5293) (e.g. Substrate [#13602,](https://github.com/paritytech/substrate/issues/13602) Substrate [#13608](https://github.com/paritytech/substrate/pull/13608)) has highlighted the necessity of having a non-attackable long-term tokenswap mechanism like TWAMM (e.g. see the [draft for Multi Asset Treasury](https://hackmd.io/@tonyalaribe/SJcR5MTTj#Unresolved-Questions)). Within this context, we have engaged in discussions with the System Parachain team, particularly Joe, who has expressed support for the inclusion of our proposed TWAMM extension onto the Asset Hub. Specifically, the extension would be built upon the existing pallet-asset-conversion implementation. These conversations have provided positive reinforcement for our vision and reinforced the potential value that our solution can bring to the Asset Hub. + +We would like to bring to your attention that we recently presented a similar, albeit more extensive and expansive, proposal to the Polkadot Treasury, which unfortunately did not succeed ([Motion #408](https://polkadot.polkassembly.io/motion/408)). However, we firmly believe that the broader ecosystem would greatly benefit from the availability of a simple, plug-and-play TWAMM extension integrated with the `pallet-asset-conversion`. This would offer an alternative to exclusively routing such trades to specialized chains like HydraDX. Interested parties seeking a more efficient implementation may choose to execute transactions through HydraDX, as extensively discussed in various DEX deliberations. Additionally, Joe Petrowski's endorsement has reaffirmed our belief in this perspective, prompting us to refine our approach. Consequently, we have focused on reducing the overall scope and placing emphasis on developing the minimum required functionality. This approach aims to create a valuable addition to the Asset Hub, as well as an extension for other parachains that adopt the `pallet-asset-conversion` framework or have their own version of a simple constant product formula DEX. + +### About TWAMM in general +* [Original Paper](https://www.paradigm.xyz/2021/07/twamm) +* [Reference implementation in Python](https://github.com/para-dave/twamm) +* [Reference implementation in Solidity](https://github.com/FrankieIsLost/TWAMM) +* [Mathematical details](https://docs.pulsarswap.com/advanced-topics/mathematical-principle-of-twamm) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 7.5 weeks (286 hours) +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 75,000 USD + +### Milestone 1 - TWAMM Pallet + +- **Estimated duration:** 7.5 weeks (286 hours) +- **FTE:** 1.5 +- **Costs:** 75,000 USD + +| Number | Deliverable | Specification | +| ------: | -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** on how to load any metadata into its own registry of chain types. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **1.** | `pallet_twamm` | Config using `pallet-conversion-rate` as implementor of [`BasicAmm`](#AMM-Traits) trait, [Structs](Structs), [Storage](#Storage) as [above](#pallet_twamm). | +| **2.** | `pallet_twamm` Extrinsics | [Extrinsics](#Extrinsics) as described [above](#pallet_twamm). | +| **3.** | `pallet_twamm` runtime API | Define trait and expose Claimable proceeds for an order as well as aggregated order data for a given asset. | +| **4.** | Benchmark `pallet_twamm` | Add required mocks for `Rewards` and `BasicAmm` and do runtime benchmarks. | +| **5.** | TWAMM 2.0 article | Outline spec and implementation improvements over original version. | + +## Future Plans + +The Centrifuge Protocol aims to be an active user of the TWAMM protocol. If we dare to dream, we envision our proposed pallets being integrated into `frame` in the future. From fd656aefa0b482a1b248a8d884bee2b2f305ec71 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 1 Aug 2023 10:00:08 +0200 Subject: [PATCH 506/665] Update index.md add twamm --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 9a32e40881b..0f801c98b7e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -51,6 +51,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | | [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | | [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | +| [k/factory](https://k-f.co/) | [On-Chain Automated Treasury Management](./centrifuge-twamm.md) | [GitHub](https://github.com/centrifuge) | ☐ | ☐ | ☐ | [🔝](#2023) From e142f58a1367ed6032eb5fb37da4e44d19d2e688 Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Wed, 2 Aug 2023 01:18:39 +1000 Subject: [PATCH 507/665] Remove Dockerfile references (#1877) As requested in the milestone review: https://github.com/w3f/Grant-Milestone-Delivery/blob/master/evaluations/tokenomics-survey-2022_3_takahser.md#general-notes The project uses Overleaf to produce the document. --- applications/tokenomics-survey-2022.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index 23e8c82b5f7..dbc0148e57a 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -239,7 +239,7 @@ Initial flow-chart/decision-tree development that will help developers place the | **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | | **0b.** | Documentation/Tutorial | We will provide both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | | **0c.** | Methodology | Detailed explanation of how the results were achieved and how to reproduce/verify the results. | -| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0d.** | Infrastructure | We will provide the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production. | | **0e.** | Article | We create a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation." | | **0e.1** | - Appendix: Methodology | As described in the methodology section above | | **0e.2** | - Section: Polkadot Parachains | Initial Parachain summary | @@ -258,7 +258,7 @@ Initial flow-chart/decision-tree development that will help developers place the | **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | | **0b.** | Documentation/Tutorial | We will update both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | | **0c.** | Methodology | Update the detailed explanation of how the results were achieved and how to reproduce/verify the results. | -| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production. | | **0e.** | Article | We will send a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."| | **0e.1** | Article | We will publish an **working paper** as indicated above. | | **0e.2** | - Section: Published models | Initial annotated bibliography | @@ -288,7 +288,7 @@ The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Rese | **0a.** | Copyright and Licenses | Creative Commons Attribution 4.0 International License (article), Dual Apache 2 or MIT License (code) | | **0b.** | Documentation/Tutorial | We will update both **artifacts documentation** of the deliverables and a basic **tutorial** that explains how a user can (for example) execute the code included or can visualize data or use any artifacts included. | | **0c.** | Methodology | Update the detailed explanation of how the results were achieved and how to reproduce/verify the results. | -| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production and Docker files for software execution. | +| **0d.** | Infrastructure | We will update the list of all infrastructure requirements (text editors with proper versions, software packages, data packages, etc) that can be used to verify the deliveries with this milestone. LaTeX for article production. | | **0e** | Article | We will update a **draft article** (with source code), in the English language. There will be an acknowledgement "This work was supported by a research grant from the Web3 Foundation. The analysis and opinions expressed are the authors and do not reflect the opinions of the Web3 Foundation."| | **0e.1** | - Section: Introduction | Place the topic in perspective and motivate non-specialist readers. Text and tables where relevant/appropriate. | | **0e.2** | - Section: Published models | Update annotated bibliography | From 2470d584ef989756fbd516d044590218aff7ba7a Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 2 Aug 2023 17:04:22 +0200 Subject: [PATCH 508/665] Update status of move rfps --- .../{Open => Under Development}/move_smart_contract_pallet.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename docs/RFPs/{Open => Under Development}/move_smart_contract_pallet.md (91%) diff --git a/docs/RFPs/Open/move_smart_contract_pallet.md b/docs/RFPs/Under Development/move_smart_contract_pallet.md similarity index 91% rename from docs/RFPs/Open/move_smart_contract_pallet.md rename to docs/RFPs/Under Development/move_smart_contract_pallet.md index 5413f47dbdc..9cc79f499e5 100644 --- a/docs/RFPs/Open/move_smart_contract_pallet.md +++ b/docs/RFPs/Under Development/move_smart_contract_pallet.md @@ -1,5 +1,5 @@ # Move Smart Contract Pallet -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/Substrate_Move_System_Pallet_1.md) * **Proposer:** [David Hawig](https://github.com/Noc2) ## Project Description :page_facing_up: From f7287312b31e8f7820bb4e22ee2eded835b91323 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 2 Aug 2023 17:05:33 +0200 Subject: [PATCH 509/665] Update status of move rfps --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index d6872f13d6e..fe678c51980 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -28,7 +28,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | -| [move_smart_contract_pallet.md](RFPs/Open/move_smart_contract_pallet.md) | 22.12.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | | [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 08.05.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.11.2021 | @@ -55,6 +54,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [implementation-benchmarking.md](RFPs/Under%20Development/implementation-benchmarking.md) | 06.06.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 05.07.2021 | | [ISO_8583.md](RFPs/Open/ISO_8583.md) | 31.05.2022 | +| [move_smart_contract_pallet.md](RFPs/Under%20Development/move_smart_contract_pallet.md) | 02.08.2023 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 23.11.2021 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 27.05.22 | | [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 23.05.2023 | From bbced8d511b01dbb9fa51809aacc965beeb43d81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 2 Aug 2023 18:27:39 +0200 Subject: [PATCH 510/665] Update rfps.md Fix internal link --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index fe678c51980..b677a114da8 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -66,7 +66,7 @@ If you find an open RFP here that you think you can address, feel free to [submi -
🔴 Closed: This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a [maintenance grant](maintenance.md). +
🔴 Closed: This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a maintenance grant. | RFP | Last Updated | | :-- | :----------: | From 4011a7474d3f77c9ea4205fc0ab871a5f354f254 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 3 Aug 2023 10:03:00 -0300 Subject: [PATCH 511/665] Update index.md (#1881) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0f801c98b7e..fdc059b19df 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,7 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | | [Interstellar](https://www.interstellar.gg/) | [Interstellar - Wallet Phase 2](./Interstellar-network2.md) | [GitHub](https://github.com/Interstellar-Network) | ☐ | ☐ | ☐ | -| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☐ | ☐ | +| [Valletech AB](https://valletech.eu/) | [DINFRA](./DINFRA.md) | [GitHub](https://gitlab.com/polkawatch) | ☐ | ☒ | ☐ | | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | From 9aafa63b5fff57aeeea9cce2f86e7147033ef8e7 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 4 Aug 2023 02:24:16 -0400 Subject: [PATCH 512/665] Update index.md (#1885) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index fdc059b19df..f280d40b638 100644 --- a/applications/index.md +++ b/applications/index.md @@ -78,7 +78,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☒ | ☐ | -| [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☐ | ☐ | +| [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | From a7a57660eb14ec7791e22486a72252730697c7cc Mon Sep 17 00:00:00 2001 From: Rafael Date: Fri, 4 Aug 2023 09:16:20 +0200 Subject: [PATCH 513/665] Dinfra application, updated payment destination. (#1884) * DINFRA Application DINFRA, decentralized infrastructure, is substrate orchestrated infrastructure, a decentralized alternative to public clouds. * Additional Technical Detail Added specific technologies to deliverables in the plan. * Time estimation in more detail/context As discussed, we are estimating 4-6 months in total. The development of the milestones will be forward by pitching ecosystem players and helping test and prof-concept DINFRA with their own infrastructure. We are assuming that there may be some kind of iteration of the deliverables along the process. * Update DINFRA.md * Update DINFRA.md Updated payment options to FIAT --- applications/DINFRA.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/DINFRA.md b/applications/DINFRA.md index 0db0bc1af29..4d2fd0941d9 100644 --- a/applications/DINFRA.md +++ b/applications/DINFRA.md @@ -1,7 +1,7 @@ # DINFRA - **Team Name:** Valletech AB -- **Payment Address:** bc1q9rw6km4h7fjgwxv5vwdxhzsnl8s9c8ryfhsu4a (BTC) +- **Payment Address:** FIAT - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 ## Project Overview :page_facing_up: From 1e4d32b511c19d0ba5130848efe93ff37a41d9d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 4 Aug 2023 09:44:53 +0200 Subject: [PATCH 514/665] Update check_application_document.yml Add token to labeling action --- .github/workflows/check_application_document.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check_application_document.yml b/.github/workflows/check_application_document.yml index cef9f8827f9..78c841442ee 100644 --- a/.github/workflows/check_application_document.yml +++ b/.github/workflows/check_application_document.yml @@ -21,6 +21,7 @@ jobs: - name: Add 'discussion private' label if the application is private uses: actions/github-script@v6 with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} script: | github.rest.issues.addLabels({ issue_number: context.issue.number, From d38f9f37ebca2ff5bcce8a33cf3076a345bf97a3 Mon Sep 17 00:00:00 2001 From: Samuel Brack Date: Fri, 4 Aug 2023 12:55:30 +0200 Subject: [PATCH 515/665] Amend DIA bridge attestation grant (#1887) * Create DIA_Bridge_Attestation_Oracle.md * Integrate Feedback - Clarification on scope of the milestones - Removal of a sentence from the template * Amend proposal for DIA bridge attestation grant --- applications/DIA_Bridge_Attestation_Oracle.md | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/applications/DIA_Bridge_Attestation_Oracle.md b/applications/DIA_Bridge_Attestation_Oracle.md index ee5af496357..966dfc3256f 100644 --- a/applications/DIA_Bridge_Attestation_Oracle.md +++ b/applications/DIA_Bridge_Attestation_Oracle.md @@ -81,14 +81,14 @@ We will also host documentation on how to use and participate in the system. Our MVP will consist of four main parts: 1. The pallet providing collateral value that can be integrated by parachains 2. The documentation of integration -3. Integration of 3 bridges +3. Integration of 2 bridges 4. Guidelines on integrating new bridges #### Expectations Team DIA will: - Create the framework and open-source the library of this integration. -- Integrate 3 bridges for initial use. Further integrations will be open for submissions from contributors. +- Integrate 2 bridges for initial use. Further integrations will be open for submissions from contributors. We will not: - Cover a security audit as a part of MVP design. @@ -221,7 +221,7 @@ DEX integrations: - **Total Estimated Duration:** 3 months - **Full-Time Equivalent (FTE):** 1.5 FTE -- **Total Costs:** 30,000 USD +- **Total Costs:** 26,000 USD ### Milestone 1 - Core functionality @@ -246,7 +246,7 @@ DEX integrations: - **Estimated Duration:** 1.5 months - **FTE:** 1 -- **Costs:** 12,000 USD +- **Costs:** 8,000 USD | Number | Deliverable | Specification | | -----: | ----------- | ------------- | @@ -254,9 +254,8 @@ DEX integrations: | **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can integrate bridges collateralization value, which will show how the new functionality works. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 1. | Bridge Integration: XCM | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [XCM bridge contracts](https://github.com/paritytech/polkadot/tree/master/xcm). | -| 2. | Bridge Integration: Multichain | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [Multichain bridge contracts](https://github.com/anyswap). | -| 3. | Bridge Integration: Interlay | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [Interlay bridge contracts](https://github.com/interlay/interbtc). | +| 1. | Bridge Integration: Multichain | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [Multichain bridge contracts](https://github.com/anyswap). | +| 2. | Bridge Integration: Interlay | We will develop a module as part of the proposed solution that retrieves collateral information for assets bridged by the [Interlay bridge contracts](https://github.com/interlay/interbtc). | ## Future Plans From 201356a1be8d773f1ee5c478e5254191edc43ce3 Mon Sep 17 00:00:00 2001 From: Poseidon - Aisland <87597651+poseidon-aisland@users.noreply.github.com> Date: Fri, 4 Aug 2023 19:27:37 +0400 Subject: [PATCH 516/665] Aisland Docsig (#1853) * Create Aisland-Docusign.md * Update Aisland-Docusign.md * Update Aisland-Docusign.md * Renamed to DocSig * Legal Entity update * Rename Aisland-Docusign.md to Aisland-DocSig.md * Update applications/Aisland-DocSig.md Co-authored-by: S E R A Y A * Update Aisland-DocSig.md --------- Co-authored-by: S E R A Y A --- applications/Aisland-DocSig.md | 241 +++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 applications/Aisland-DocSig.md diff --git a/applications/Aisland-DocSig.md b/applications/Aisland-DocSig.md new file mode 100644 index 00000000000..03dbe5c7aa9 --- /dev/null +++ b/applications/Aisland-DocSig.md @@ -0,0 +1,241 @@ +# Aisland Docsig + +- **Team Name:** AISLAND DAO +- **Payment Address:** 0x78A4C8624Ba26dD5fEC90a8Dc9B75B4E3D630035 USDC/Ethereum +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 +## Project Overview :page_facing_up: + +### Overview + +Aisland DocSig allows to e-sign documents, exchange easily and store permanently on chain as legal proof. +POC/MVP is available at [https://docsig.aisland.io](https://docsig.aisland.io) +Faucet for testing: [https://testnet.aisland.io:8443](https://testnet.aisland.io:8443) + +Aisland DocSig (in short ADC) solves the problem of exchanging signed agreements and storing them permanently with legal validity. The user can authenticate using his/her own wallet, create a blank document and edit, or clone a public template or upload a document. +ADC keeps a copy of the different drafts till the first signature is applied. +A secret link is generated to request the signing to the counterpart. +The workflow provide visibility on the different status of the documents: Draft, Waiting (for signing), Completed (all parties have signed), Rejected (one party rejected it). + + +There is no e-signing documents solution in the Polkadot/Kusama echo-system, instead there are all the layers to create something better of commercial services. In the web2 world, https://docusign.com declares about 200 million paying user and > 1 billion users who used their platform. + +[Aisland Dao](https://aisland.io) is an experimental micro-nation with a small territory of 14000 square feet. Aisland is based on a deck barge floating in international waters since 22 December 2022 in the Arabian Gulf. +The current small territory can be increased with additional barges properly interconnected. +The main purpose of Aisland Dao is to give full sovereignty to the individual and a real place where the wider principles of freedom are applied. +The decentralized e-signing of documents is one of the many tools that every free and sovereign person should have the right to use. + + +### Project Details + +Preface: +We have already developed a minimum viable product (MVP) that is available at [https://docsig.aisland.io](https://docsig.aisland.io). The current MVP is offering the following features: + +- Dashboard to manage the workflow +- Create/Edit a document on-line using the block editor (editor.js). +- Clone a public Template and Edit. +- Upload a document in different formats. +- Sign the document. +- Generate unique link to allow the signing of the counterpart. +- View on-line the documents +- Delete the document in drafts +- Rejects the signature on proposed documents for signing. +Here the workflow: +![Workflow](https://github.com/aisland-dao/docsig/blob/main/img-docs/docusign-workflow.png) + +Here a few screenshots: +![Dashboard](https://github.com/aisland-dao/docsig/blob/main/img-docs/docusign-dashboard.png) +![Operations](https://github.com/aisland-dao/docsig/blob/main/img-docs/docusign-operations.png) +![Blank Document](https://github.com/aisland-dao/docsig/blob/main/img-docs/docusign-blankdocument.png) +![Signing](https://github.com/aisland-dao/docsig/blob/main/img-docs/docusign-signing.png) + + +The project proposal consists in adding a new set of features to make a production ready version, comparable to the best WEB2 solution offering like https://docusign.com. Here is the list of the new features to be added: + +1) Standard Signatures Management to allow the user to set his own standard signature image. +2) Signature Marker, to allow the placing of signatures on the document for a visual improvement. +3) Document Encrytion, to manage the privacy of the documents even when saved on chain. +4) PDF output of the signed agreement with verifiable QR code. +5) Storage of the encrypted documents on the blockchain. +6) Enhanced link sharing, to forward the signing link by different communication channel. +7) Multiple Counter Parties, to manage the signature of > 2 parties on the same document. +8) Enhanced templates, to manage also private templates. + +Technology Stack: +- The blockhain side is based on a custom pallet named [docsign](https://github.com/aisland-dao/aisland-node/tree/main/pallets/docsig). + +- The [Dapp](https://github.com/aisland-dao/docsig) is built on HTML,CSS and vanilla javascript for the client side. It's built with Javascript/Nodejs for the Server component. It's working with Polkdatot Extension and Subwallet. + +Requirements: +- Nodejs +- Mariadb Server + +The MARIADB will be used to store only the workflow data and the signed documents will be encrypted and stored on chain for permanent storage. + +### Details of the Proposal +Here is the list of deliverables new features in much more details: + +1) Standard Signature Image - Manage the setting of the standard signature image, selecting from multiple auto-generated signatures or one uploaded. The Dapp shwillould auto-generate multiple style of signatures starting from a text using cursive fonts. +We will use a set of 50 cursive fonts to generate the signature image. A considerable selection of free cursive fonts are available here: [https://www.1001fonts.com/cursive+signature-fonts.html](https://www.1001fonts.com/cursive+signature-fonts.html). +The upload of a scanned image in png/jpg/webp or svg format is not a challenge. +Here is an example: +![Signature Example](https://github.com/aisland-dao/docsig/blob/main/img-docs/docusign-standardsignatures.png) + + +2) Signature Marker - We will create a plugin for editor.js to mark the place where the signatures shall be placed. Once the document is signed, the selected signatures will be shown in the document. +[https://editorjs.io/](https://editorjs.io/) is a free block editor for javascript that is composable by plugins. We used such editor in the current MVP. It save the document in a clean json format. +Here is an example: +![Signature Example](https://github.com/aisland-dao/docsig/blob/main/img-docs/docusign-signatureexample.png) + + +3) Encryption - For enhanced privacy the documents and other metadata shall be encrypted as follows: +- The files will be encrypted using AES256-GCM and Chacha20 as symmetric cyphers in cascade and a random private key of 512 bit. The symmetric private key will be encrypted by the asymmetric public key of the user. The user will be able to decrypt using his/her own asymmetric public key. +- The documents to be signed from the counter part shall be encrypted with a random private key and the same shall be encrypted with the public key of the recipient. The recipient will be able to decrypt using his/her own asymmetric private key. +- The Dapp must manage the settings of the initial asymmetric public/private keys. +- The open source library that we will use is libsodium which offers the necessary primitives: +[https://doc.libsodium.org/](https://doc.libsodium.org/) +[https://www.npmjs.com/package/libsodium](https://www.npmjs.com/package/libsodium) + +4) Documents Storage - We will optionally store on-chain the signed contracts. We wish to give immutability of whole document even if it's little bit more expensive. Actually the MVP is storing only the hash of the document and keeping the document in the server storage. The pallet will be modified to accept the storage of an encrypted binary blob with some limitations in size to be configured in the pallet itself. +We will add 2 functions to the current pallet: newBlob(id,documentdata), deleteBlob(id) + +5) Pdf Output - The dapp should be able to generate a contract with the visual signatures and a QR code to verify on chain the validity of the contract. This is a legal requirement to let use the document in court. + +6) Link Sharing - The dapp shall allow the sharing of the signing link by: email, Matrix, Whatsapp, and Telegram. + +7) Multiple Counter Parties - The current MVP does support only 2 signing parties, we will refactor the Dapp to manage multiple signing parties. + +8) Enhanced Templates - The MVP allows to select a template from a system list. We wish to allow the user to create his/her own private templates. + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? +The proposal creates a general purpose utility for the wide public in using Substrate technology. + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? +Any web3 user or legala entity have to exchange contracts during the course of life. +- What need(s) does your project meet? +E-signing of documents, permanently storage and easy exchange of the same. +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? +We have not been able to find something similar in the echo system. + - If so, how is your project different? + - If not, are there similar projects in related ecosystems? + [https://www.sign.co/](https://www.sign.co/) + [https://www.jsign.com](https://www.jsign.com) + [https://www.cygnature.io](https://www.cygnature.io) + [https://www.corposign.net/](https://www.corposign.net/) + +## Team :busts_in_silhouette: + +### Team members + +- Name of team leader +Achille Landi +- Names of team members +Samuele Landi + +### Contact + +- **Contact Name:** Achille Landi +- **Contact Email:** admin@aisland.io +- **Website:** [https://aisland.io](https://aisland.io) + +### Legal Structure + +- **Registered Address:** Unit No: 1508,DMCC Business Centre, Dubai - United Arab Emirates +- **Registered Legal Entity:** Samra Consulting dmcc + +### Team's experience + +Achille Landi is the lead developer of Aisland with experience in Rust and Javascript +Samuele Landi is a long term developer for secure communications and web3 projects. + +### Team Code Repos + +- [https://github.com/aisland-dao/aisland-node](https://github.com/aisland-dao/aisland-node) +- [https://github.com/aisland-dao/dex](https://github.com/aisland-dao/dex) +- [https://github.com/aisland-dao/docsig](https://github.com/aisland-dao/docsig) +- [https://github.com/aisland-dao/aisland-store-web-server](https://github.com/aisland-dao/aisland-store-web-server) (private repo we can give access) + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/poseidon-aisland +- https://github.com/samuelelandi + +### Team LinkedIn Profiles (if available) + +- not available +- not available + + +## Development Status :open_book: + +We have already developed a POC/MVP with a dedicate pallet on Substrate: +[https://github.com/aisland-dao/aisland-node/tree/main/pallets/docsig](https://github.com/aisland-dao/aisland-node/tree/main/pallets/docsig) + +and a Dapp: +[https://github.com/aisland-dao/docsig](https://github.com/aisland-dao/docsig) + +An live demo is available at: +[https://docsig.aisland.io](https://docsig.aisland.io) + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 1.5 FTE +- **Total Costs:** 9000 USD + +### Milestone 1 Example — Basic functionality + +- **Estimated duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 4500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to start the node and run the Dapp | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains what was done/achieved as part of the grant. The language will be English and it will be published also in our media channels | +| 1. | Substrate module: pallet-docsig | We will implement the current pallet-docsig to allow the storage on chain of the documents within certain size limits | +| 2. | Dapp Feature: Standard Signature Image |We will add the new feature to manage the standard signatures as described at the point 1 of "Details of the Proposal"| +| 3. | Dapp Feature: Signature Marker | We will create a plugin for editor.js to allow the placing of the signature marker as described at the point 2 of "Details of the Proposal"| +| 4. | Dapp Feature: Encryption | We will implement the encryption as described at the point 3 of "Details of the Proposal"| + + +### Milestone 2 - Additional Features + +- **Estimated Duration:** 1 month +- **FTE:** 1.5 +- **Costs:** 4500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to start the node and run the Dapp | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains what was done/achieved as part of the grant. The language will be English and it will be published also in our media channels | +| 1. | Dapp Feature: Pdf Output|We will add the new feature to generate a pdf output as described at the point 5 of "Details of the Proposal"| +| 2. | Dapp Feature: Link Sharing | We will add a function to share the link for signature as described at the point 6 of "Details of the Proposal"| +| 3. | Dapp Feature: Multiple Counter Parties | We will reafactor the Dapp to allow the signature from different parties as described at the point 7 of "Details of the Proposal"| +| 4. | Dapp Feature: Enhanced Templates | We will add the feature to create/manage private templates into the Dapp as described at the point 8 of "Details of the Proposal"| + + +## Future Plans + +- We will add the possibility to make escrow payments in the execution of the agreements signed. +- We will add a decentralized arbitration service in case of litigations to be settled. +- We wil promote the docsig within the Web3 and Seasteader community. Aisland has signed an agreement with Liberland to develop a bigger floating city from this outpost and we will push to let become DocSig the standard method to sign agreements: [https://liberland.org/en/news/434-memorandum-of-understanding-with-aisland](https://liberland.org/en/news/434-memorandum-of-understanding-with-aisland) +Aisland Dao will develop other Dapp to help the transiction from web2 to web3. + +## Referral Program (optional) :moneybag: + +Not applicable + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website From 8021be4629c475b13d57cf1c844e8290bd4dbe5f Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 4 Aug 2023 17:30:03 +0200 Subject: [PATCH 517/665] Update index.md add aisland --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index f280d40b638..6c04f7f5684 100644 --- a/applications/index.md +++ b/applications/index.md @@ -52,6 +52,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | | [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [On-Chain Automated Treasury Management](./centrifuge-twamm.md) | [GitHub](https://github.com/centrifuge) | ☐ | ☐ | ☐ | +| [AISLAND DAO](https://aisland.io) | [Aisland Docsig](./Aisland-DocSig.md) | [GitHub](https://github.com/aisland-dao) | ☐ | ☐ | ☐ | [🔝](#2023) From 22b98fe22f1447f57f59f8e9bf9a7691046c9ec4 Mon Sep 17 00:00:00 2001 From: anshulWeb3 <100308982+anshulWeb3@users.noreply.github.com> Date: Mon, 7 Aug 2023 14:37:06 +0530 Subject: [PATCH 518/665] xNFT updates (#1893) --- applications/xNFT.md | 54 ++++++++++++++++++++++++++------------------ 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/applications/xNFT.md b/applications/xNFT.md index 8d6df048fee..934b80b2dfd 100644 --- a/applications/xNFT.md +++ b/applications/xNFT.md @@ -18,27 +18,36 @@ The Crosschain NFT Pallet is a unique initiative designed to facilitate the smoo #### The xNFT Pallet provides the following extrinsics (functions): -1. transferSingle(nft_id, dest, dest_weight_limit) —> DispatchResult ; transfer an NFT with the NFT ID - - nft_id — the ID of the NFT being sent. +1. transferSingleNFT(admin,collection_id, item_id, dest_collection_id, dest_item_id, mint_to, dest) —> DispatchResult ; transfer an NFT with the NFT ID + - admin — the owner of the NFT being sent. + - collection_id — the ID of the collection of which the nft is being sent. + - item_id — the ID of the NFT being sent. + - dest_collection_id — the ID of the collection to which the nft is being sent. + - dest_item_id — the ID of the NFT being created. + - mint_to — the new owner of the NFT being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). + + +2. transferMultiNFT(admin,collection_id, item_id, dest_collection_id, dest_item_id, mint_to, dest) —> DispatchResult ; transfer multiple non-fungible tokens, defined by their multilocation + - admin — the owner of the NFT's being sent. + - collection_id — the ID of the collection of which the nft is being sent. + - item_id — the ID's of the multiple NFT's being sent. + - dest_collection_id — the ID of the collection to which the nft is being sent. + - dest_item_id — the ID's of the multiple NFT's being created. + - mint_to — the new owner of the NFT's being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate) + + +3. transferCollection(admin,collection_id, dest) —> DispatchResult ; transfer a collection using collection id , defined by its multilocation + - admin — the owner of the collection. + - collection_id — the ID of the COLLECTION being sent. - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). - - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. - -2. transferMulti(nfts, dest, dest_weight_limit) —> DispatchResult ; transfer multiple non-fungible tokens, defined by their multilocation - - nfts — the IDs of the NFTs being sent. - - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate) - - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. - -3. transferSingleWithFee(nft_id, dest_fee, dest, dest_weight_limit) —> DispatchResult ; transfer a non-fungible tokens, but it allows the sender to pay the fee with a different asset, defined by its multilocation - - nft_id — the ID of the NFT being sent. - - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). - - dest_fee — a multilocation to define the asset used to pay for the XCM execution in the target chain - - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. - -4. transferMultiWithFees(nfts, dest_fee, dest, dest_weight_limit) —> DispatchResult ; transfer several non-fingible tokens, but it allows the sender to pay the fee with a different asset, defined by their multilocation - - nfts — the IDs of the NFTs being sent. - - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). - - dest_fee — a multilocation to define the asset used to pay for the XCM execution in the target chain - - dest_weight_limit — an enum that represents the maximum amount of execution time you want to provide in the destination chain to execute the XCM message being sent. + +4. transferCollectionOwnership(new_owner,collection_id, dest ) —> DispatchResult ; transfer the collection ownership on another chain, defined by their multilocation + - new_owner — the new owner of the COLLECTION being sent. + - collection_id — the IDs of the COLLECTION being sent. + - dest — a multilocation to define the destination address for the tokens being sent via XCM. It supports different address formats, such as 20 or 32-byte addresses (Ethereum or Substrate). + #### A feature will be added to the XCM VM for minting NFt on target chain using the encoded data from source chain. #### This xNFT pallet will be tightly coupled with the NFT pallet in Substrate @@ -63,7 +72,8 @@ The Crosschain NFT Pallet is a unique initiative designed to facilitate the smoo ### Team members - **Team lead:** [Aqueel Abbas](https://github.com/tur461) -- **Team member:** [Jatinder Singh](https://github.com/jatinder116?tab=repositories) +- **Team member:** [Ipsa Gupta](https://github.com/Ipsa11?tab=repositories) +- **Team member:** [Arunjot Singh](https://github.com/arunjot12?tab=repositories) ### Contact @@ -108,7 +118,7 @@ We are the technical partners for [Peer Coin](https://explorer.peer.inc/) | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | -| 1. | xNFT | We will create a Substrate module that will handle cross-chain NFT transfers using these functions: 1. transferSingle 2. transferMulti 3. transferSingleWithFee 4. transferMultiWithFees | +| 1. | xNFT | We will create a Substrate module that will handle cross-chain NFT transfers using these functions: 1. transferSingleNFT 2. transferMultiNFT 3. transferCollection 4. transferCollectionOwnership | ## Future Plans From 134c66bd1c821efc6f95293e06430d78a94b4e08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 7 Aug 2023 11:13:19 +0200 Subject: [PATCH 519/665] Update index.md MOBR complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 6c04f7f5684..6df49a6436e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -118,7 +118,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | | [Omniverse Labs](https://github.com/Omniverse-Web3-Labs/) | [Omniverse DLT](./Omniverse%20DLT.md) | [GitHub](https://github.com/Omniverse-Web3-Labs/) | ☐ | ☒ | ☒ | -| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | +| [MOBR Systems](https://www.mobr.ai/) | [Knowledge Oriented Framework](Knowledge-Oriented-Framework.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☒ | | [Aviraj Khare](https://github.com/avirajkhare00) | [Polkasearch](polkasearch.md) | [GitHub](https://github.com/avirajkhare00) | ☐ | ☐ | ☐ | | [gmajor](https://github.com/gmajor-encrypt) | [PHP RPC Lib Follow up](php-rpc-lib-follow-up.md) | [GitHub](https://github.com/gmajor-encrypt/php-substrate-api) | ☐ | ☒ | ☒ | | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | From c4f33f9ac869e993c793ef2d4b34fe07917fc326 Mon Sep 17 00:00:00 2001 From: dtuzi <114731726+dtuzi@users.noreply.github.com> Date: Mon, 7 Aug 2023 13:52:05 +0300 Subject: [PATCH 520/665] Proposal: Storage solution on Polkadot (#1888) * Create proposal Create proposal * add file extension * Update deliverable spec --- applications/Eiger_Storage_on_Polkadot_1.md | 118 ++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 applications/Eiger_Storage_on_Polkadot_1.md diff --git a/applications/Eiger_Storage_on_Polkadot_1.md b/applications/Eiger_Storage_on_Polkadot_1.md new file mode 100644 index 00000000000..e0467574a0c --- /dev/null +++ b/applications/Eiger_Storage_on_Polkadot_1.md @@ -0,0 +1,118 @@ +# Proposal: Storage solution on Polkadot + +- **Team Name:** Eiger +- **Payment Address:** Fiat 14.04.2023, 16:50 UTC+3 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + + +The main goal is to implement and maintain a Filecoin-like system parachain that uses DOT as the native token and is easily usable for all kinds of parachain projects in the ecosystem via XCM. + +### Project Details + +To accomplish this we are submitting this initial proposal to update our previous research and test how XCM could be used to allow the ecosystem to use this storage network. + +We are interested to build this because: +- Native storage in Polkadot payable in DOT is not currently available +- We have done the research 2 years ago. +- After talking to community members in Decoded 2023 we noticed there is demand for this kind of functionality. + +We will not be using Trusted Execution Environments or Enclaves in this solution. + +### + + +### Ecosystem Fit + +Currently a storage solution native to Polkadot is missing, by building a system parachain anyone in the ecosystem will be able to access storage thru XCM, pay in native DOT and build more complex applications withour relying on other networks. + + +## Team :busts_in_silhouette: + +Eiger - We help leading technology companies to scale and develop their core technologies to gain an edge by providing expert teams in the most critical areas of modern web3 development. + +Eiger is part of the [Equilibrium group](https://www.eqg.co/) which includes engineers from our sister company [Equilibrium Labs](https://equilibrium.co/). + +### Team members + +- **Tomek Piotrowski** ([Github](https://github.com/tomekpiotrowski), [Linkedin](https://www.linkedin.com/in/tomasz-piotrowski-17466b4/)) Software Engineer at Eiger, specializing in Rust-based applications. With a strong background in software development, he has spent recent years focusing on the Rust programming language. At Eiger, Tomasz actively contributes to the advancement of Rust-based blockchains and their ecosystems. +- **Mark Henderson** ([GitHub](https://github.com/aphelionz), [Twitter](http://twitter.com/aphelionz)) is the VP of Engineering at Equilibrium. He has led the team starting with the original Rust IPFS implementation in late 2019, through engagements with many of the largest names in Web3, and is part of the team that did [the original research](https://github.com/common-good-storage/report/blob/master/src/first.md) 2 years ago. Core contributor to OrbitDB, Rust IPFS, and Ziggurat. +- **Piotr Olszewski** ([Github](https://github.com/asmie), [LinkedIn](https://www.linkedin.com/in/piotr-olszewski-8a239939/)) & **Karlo Mardesic** ([Github](https://github.com/Rqnsom), [LinkedIn](https://www.linkedin.com/in/karlo-mardesic/)) - currently working on MoveVM pallet, they will contribute with their Polkadot and Substrate knowledge and join the next stage of this project, implementation. + +### Contact + +- **Contact Name:** Daren Tuzi +- **Contact Email:** daren@eiger.co (Founder & CEO of Eiger) +- **Website:** [Eiger.co](https://www.eiger.co/) + +### Legal Structure + +- **Registered Address:** Linnankatu 3 A 24, 20100 Turku, Finland +- **Registered Legal Entity:** Eiger Oy + +### Team's experience + +- [We researched this very topic 2 years ago](https://github.com/common-good-storage/report/blob/master/src/first.md) +- [We are the main contributors to implementing IPFS in Rust](https://github.com/rs-ipfs/rust-ipfs) +- We are building a MoveVM pallet for Polkadot (we will deliver Milestone 1 next week) + +Our clients include: Starknet, Aleo, Forte, Zcash, Fireblocks, Ripple, Algorand, Solana, Flow, Elusiv, Celestia, Stellar and more. + +### Team Code Repos + +- Contributions to SnarkOS for Aleo. https://github.com/AleoHQ/snarkOS +- OrbitDB is a distributed, p2p, serverless database. https://github.com/orbitdb/orbit-db +- The rust implementation of IPFS. https://github.com/rs-ipfs/rust-ipfs +- The main implementation of Interledger in Rust. https://github.com/interledger/interledger-rs +- Ziggurat - A Network protocol testing framework for ZCash, XRP, and Algorand. Notably, critical network vulnerabilities were found and reported to the core teams. https://github.com/runziggurat +- Pathfinder, the full node implementation of Starknet https://github.com/eqlabs/pathfinder +- Zcash uniffi https://github.com/eigerco/uniffi-zcash-lib + + +## Development Status :open_book: + +The goal of this proposal is to update the work we have done in the past to account for what has changed in the past 2 years in the Polkadot ecosystem and the advancements made in storage solutions like Filecoin. + +In addition to this research and updating the code, we will also test how XCM could be used by anyone in the ecosystem to interact with this storage. + +## Development Roadmap :nut_and_bolt: + +### Update research, update code and test XCM + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 1.5 +- **Total Costs:** 30,000 USD + + +Two engineers will work together and in parallel to deliver these 3 subcomponents: + +1. Update the research done previously to reflect latest tech changes in Polkadot and Substrate. We want to figure out what it would take to implement a whole storage solution as a parachain without depending on 3rd part chains and evaluate what components need to be written from scratch and what can be reused. +2. Update the [code delivered in CGS](https://github.com/common-good-storage/parachain) or start fresh, whichever makes most sense. The scope of this is to deliver scafolding/template repository with boilerplace and dummy funcitonality. On top of this we can then test the milesone #3 below. +3. Research and test how XCM can be used. Using the scafolding code from #2 we can test how XCM can be used to access the storage from a different parachain. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Apache 2.0 and MIT | +| **0b.** | Documentation/Tutorial | We will provide both inline documentation of the POC code and a basic tutorial that explains how a user can run the same test. | +| **0c.** | Methodology | Detailed explanation of how the results were achieved and how to reproduce/verify the results. | +| **0d.** | Infrastructure | We will provide the list of all requirements that can be used to verify the code deliverable with this milestone. This is related to deliverable 0b. Documentation and 0g. Docker | +| **0e.** | Article | Content: Updated research doc detailing our findings, how the tech has changed and how the solution will look like. | +| **0f.** | Testing and Testing Guide | We will deliver code that tests how XCM might be used to access this storage parachains. | +| **0g.** | Docker | Where relevant. we will provide a Dockerfile(s) that can be used to run and test the MVP and the XCM test. | +| **1.** | Updated CGS code | We will deliver a repositiory with the update MVP code | + + + + +## Future Plans + +This initial grant will produce a game plan on how exactly this storage network will work. Using this knowledge we will submit another future proposal to build this solution. Once this storage solution has been built, it will be voted on by a governance vote. If successful then this system parachain will be available to be used by anyone in the ecosystem and payable in native DOT. + + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** We are working on MoveVM pallet grant which asnwers the original RFP from the foundation so we were familiar with the ecosystem. From 431a5b181242d5ee976b8e9759dc89e7150fc500 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 7 Aug 2023 12:55:25 +0200 Subject: [PATCH 521/665] Update index.md Add Storage solution grant --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 6df49a6436e..136fb640e50 100644 --- a/applications/index.md +++ b/applications/index.md @@ -53,6 +53,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [On-Chain Automated Treasury Management](./centrifuge-twamm.md) | [GitHub](https://github.com/centrifuge) | ☐ | ☐ | ☐ | | [AISLAND DAO](https://aisland.io) | [Aisland Docsig](./Aisland-DocSig.md) | [GitHub](https://github.com/aisland-dao) | ☐ | ☐ | ☐ | +| [Eiger](https://www.eiger.co/) | [Storage solution on Polkadot](./Eiger_Storage_on_Polkadot_1.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | [🔝](#2023) From 18082acb5068be7d8252b370f87056b31ac2968f Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 7 Aug 2023 14:02:39 -0300 Subject: [PATCH 522/665] Update index.md (#1895) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 136fb640e50..002df90364b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -78,7 +78,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | -| [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☐ | ☐ | +| [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☒ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☒ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | From e32ab0572add8b92ca56c985b876fbd30dfef0d9 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 8 Aug 2023 02:43:27 -0400 Subject: [PATCH 523/665] Update index.md (#1896) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 002df90364b..9be773e9123 100644 --- a/applications/index.md +++ b/applications/index.md @@ -44,7 +44,7 @@ Use this page for an overview of all public grants and their status. Use the sid | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------| :--------- | :------------: | :--------: | | [Protofire](https://protofire.io/) | [Contract Wizard](./Contract_wizard.md) | [GitHub](https://github.com/protofire/polkadot-contract-wizard/) | ☐ | ☐ | ☐ | -| [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☐ | ☐ | +| [ZeroDAO](https://github.com/ZeroDAO) | [Melodot](./Melodot.md) | [GitHub](https://github.com/ZeroDAO) | ☐ | ☒ | ☐ | | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | From ef5bc3bdd772309cfdefb10930daa6872b3bd7ec Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Tue, 8 Aug 2023 10:40:51 -0300 Subject: [PATCH 524/665] Update index.md (#1897) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 9be773e9123..ff8211d1316 100644 --- a/applications/index.md +++ b/applications/index.md @@ -143,7 +143,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | -| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☐ | +| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☒ | ☐ | From 754b764e03c94a31b268966d593b90604e956652 Mon Sep 17 00:00:00 2001 From: David Semakula Date: Tue, 8 Aug 2023 21:47:53 +0300 Subject: [PATCH 525/665] Update index.md (#1898) - Use organization GitHub URL for ink! Analyzer - rename `Ink Analyzer` to `ink! Analyzer` --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index ff8211d1316..34422617c2a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -143,7 +143,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Taiwan Research-based Biopharmaceutical Manufacturers Association](https://trpma.org.tw/cmn) | [Claps Health](Claps.md) | [GitHub](https://github.com/Claps-Health/) | ☐ | ☐ | ☐ | | [Tolga Yaycı](https://github.com/tolgayayci) | [Awesome Polka](Awesome-Polka.md) | [GitHub](https://github.com/tolgayayci/awesome-polka/tree/dev) | ☐ | ☒ | ☒ | | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | -| [David Semakula](https://github.com/davidsemakula) | [Ink Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer/ink-analyzer) | ☐ | ☒ | ☒ | +| [David Semakula](https://github.com/davidsemakula) | [ink! Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | | [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☒ | ☐ | From 5be5d83358e251fad4f0f3b416839371144e693b Mon Sep 17 00:00:00 2001 From: salaheldinsoliman <49910731+salaheldinsoliman@users.noreply.github.com> Date: Wed, 9 Aug 2023 16:15:02 +0300 Subject: [PATCH 526/665] add Solang_Playground (#1894) --- applications/Solang_Playground.md | 258 ++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 applications/Solang_Playground.md diff --git a/applications/Solang_Playground.md b/applications/Solang_Playground.md new file mode 100644 index 00000000000..febde82632e --- /dev/null +++ b/applications/Solang_Playground.md @@ -0,0 +1,258 @@ +# Solang Playground + + +- **Team Name:** Salaheldin Soliman +- **Payment Address:** 0x9036b20920ddf473e796d24afd0fe04d4dde0b68 +- **Payment Details:** DAI (ERC20) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: + +This application is a follow-up grant for this [grant](https://github.com/w3f/Grants-Program/blob/master/applications/Solang_developer_experience_improvements.md). The main theme is improving Solidity developer experience on non-EVM chains. + +### Overview + +Solang compiles Solidity smart contracts to Substrate and Solana targets. An in-depth overview of Solang's purpose and motivation can be found at https://hyperledger.github.io/hyperledger-hip/HIPs/solang.html. + +Solang Playground will be a web based IDE that allows users to compile and interact with Solidity smart contracts in a browser environment, without prior installation of any of the needed components: `Solang`or `Substrate contracts node`. The aim here is to provide an experience similar to what [Remix IDE](https://remix.ethereum.org/) provides, as Remix is the first tool Solidity developers get introduced to in their smart contract learning track. + + +### Project Details +The aim of this project is to implement a web based IDE for Solang, and continue to improve it until full maturity. Therefore, improving Solidity developer experience on Substrate based chains through undertaking the following milestones: + +#### First Milestone: Solang's language server integrated in a Solidity Web Editor Client + +##### Task 1: Language server package +As of now, `Solang` has a builtin language server. That is, the language server is a subcommand of the Solang executable. If the language server code is separated from Solang, in a standalone crate, and compiled to `wasm`, it should be able to run in a browser environment. +Compiling Solang as a whole to `wasm` would be a more challenging task since its dependence on `LLVM`, so this would be considered as a future improvement to the IDE. +The aim of this task is to develop a version of Solang's language server that could be compiled to `wasm`, and could be integrated to a web code editor. + + +##### Task 2: The Web IDE client. +Now that the language server `wasm` executable is ready from task one, we are ready to integrate it to a front-end which will provide the following functionalities: +1- uses `Monaco editor` to edit `solidity` and `.toml` files. +2- uses the `wasm` Solang language server to improve Solidity code editing experience. + +At this point, the client should take its initial design: A simple web IDE with a file explorer and a code editor +![](https://hackmd.io/_uploads/Sy8wDpAi2.jpg) + +###### Note: This is a mock UI where Solidity code is not hinted by the language server. At the end of the project, there would be a section showing the deployed contracts and how to interact with them. + +#### Second Milestone: Solang Playground Backend Service + +The aim of this milestone is to develop a back-end server that is responsible for the following: +1- Compile Solidity source files. +2- Return Compiled byte-code as well as contracts metadata to the client (front-end) + +To achieve this functionality, the server will host the following: +1- Solang Compiler docker image. + +The back-end server will be built using the `actix framework`. + +In the end of this milestone, the client should be able to interact with the back-end server, and the architecture will look like this: +![](https://hackmd.io/_uploads/ByjxjgFjh.png) + +At this point in the project, The client should be able to save and edit Solidity source files, compile them and save the compiled byte-code and metadata. + + + + +#### Third Milestone: Substrate contracts nodes interaction + + +##### Task 1: Investigate and integrate means for Substrate node interaction + +In order to deploy and interact with a smart contract, a run-time is needed (Substrate contracts pallet). Here are the existing options: + +1- Interact with a public test-net. + +2- There is [Drink](https://github.com/Cardinal-Cryptography/drink), which provides a minimal substrate run-time with a an interface to interact with. This Could be compiled to `wasm` and won't need to be hosted in the back-end server. + +3- Host a substrate contracts node on the back-end server. + +###### Note: My decision will be more inclined towards the first two options. The reason is that in the near future, `llvm` wasm package would be up-streamed and `Solang` can be compiled to `wasm` then. A future plan for the IDE is that it doesn't depend on any back-end service. + + +At the end of this milestone, the architecture will evolve into this: +![](https://hackmd.io/_uploads/HksDHFAoh.png) + + +The front-end will be responsible for providing language smarts from Solang's language server, and taking the following from the user and sending them to the Back-end: +1- Solidity source files +2- Compiler options + +The back-end will respond with compilation results: compiled bytecode and contracts metadata. The contracts will then be deployed and interacted with through scripts accessible to the client. The aim of this milestone is to merge milestones one and two, and to provide a test suite ensuring that front-end and back-end interactions are happening seamlessly. After this milestone, I will share blog posts and articles inviting Solidity developers to try out the IDE. + + +#### Fourth Milestone: IDE Improvements + +Remix IDE has some attractive functionalities to any solidity developer, which we would like to see on the Substrate side: + + +1- Calling a specific function by the click of a button, alongside with the required parameters. E.G. similar to `contracts UI`. (Only possible on the Substrate side) + +2- Initializing the work-space with an example contract in a `Solang project` file structure ready for deployment and interaction. + + +These functionalities will be implemented as a first step towards improving the IDE. + + + +#### Important Note: This grant will be more focused on achieving core functionality rather than making the IDE visually attractive. This would be considered as a future plan for improving the IDE. + + +### Ecosystem Fit + +- **Where and how does your project fit into the ecosystem? Who is your target audience? What need(s) does your project meet?** + +Quoted from the Ecosystem Fit section of the previous completed grant application, this statement still holds: "We still have a long way to go in terms of developer experience with Solidity on Substrate based chains. Although Solang as a compiler itself can be considered a huge step towards attracting solidity developers to the Polkadot/Kusama ecosystems: The Solidity developer experience on Ethereum far exceeds that of "Solidity Contracts on Substrate", caused by our inferior tooling and debugging story." + +The story stays the same, but the solution offered here is different: By Offering an `EVM` developer an easy portal to the Substrate echo-system, especially with the language they love (Solidity) alongside a fairly good IDE that will be comparable to Remix in the long run, Substrate based chains will be an easy to try option without any prior installation of any component. + +This project would benefit any para-chain using the `wasm` contracts pallet. + +- **Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem?** + +Yes. There exists paritytech's [Ink! Playground](https://github.com/paritytech/ink-playground). As the name implies, Ink! Playground would compile and deploy ink! contracts, not Solidity. +As a matter of fact, I investigated integrating Solang to Ink! playground, but this implied two problems: +1- Changing the name of the project. (Not likely to take place) +2- Convincing the contributors to integrate Solana. (Not likely to take place) + + + +## Contributer :busts_in_silhouette: + + +### Contact + +- **Contact Name:** Salaheldin Soliman +- **Contact Email:** salaheldin_sameh@aucegypt.edu + + +### Relevant experience + +1- Worked on Solang as part of the [Hyperledger Mentorship Program](https://wiki.hyperledger.org/display/INTERN). + +a. Implemented [array bounds checks optimization](https://solang.readthedocs.io/en/latest/code_gen_options.html#array-bound-checks-optimization). +b. Implemented [multiplication overflow detection during runtime](https://github.com/hyperledger/solang/pull/988). +c. Implemented [constant overflow detection during compilation](https://github.com/hyperledger/solang/pull/1024#ref-commit-baaa425). +d. Improved [Solang's parser resilience](https://github.com/hyperledger/solang/pull/1068). + + +2- Worked on Solang as part of a previous W3F [grant](https://github.com/w3f/Grants-Program/blob/master/applications/Solang_developer_experience_improvements.md). + +### Github Handle + +- https://github.com/salaheldinsoliman + + +### LinkedIn Profile + +- https://www.linkedin.com/in/salaheldinsoliman/ + + +## Development Status :open_book: + +The project can be considered as a helper project for Hyperledger Solang. +Designing the milestone structure was based on some existing IDE structures and design choices. To achieve the desired result, various open-source projects will be integrated. +A list of these projects and their use are briefly documented in this [notion page](https://www.notion.so/Solang-Playground-dfe85d3493a943849af67991e56adbf2?pvs=12). + +There were also talks, via mail, with members from the foundation explaining interest in the project. + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 13 months +- **Full-Time Equivalent (FTE):** ~0.5 +- **Total Costs:** 25,000 USD +- **Start Date:** September 1, 2023 +- **Spare Period(time extension for unexpected events):** 4 months spare (1 for each milestone) +### Milestone 1: Solang’s language server integrated in a Solidity Web Editor Client + +- **Estimated duration:** 5 month +- **FTE:** 0.75 +- **Costs:** 10,000 USD + + +| Number | Deliverable | Specification | +| ------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | - We will provide both **inline documentation** of the client code and a readme that shows the build steps of the language server `.wasm` binary. | +| **0c.** | Testing and Testing Guide | - The functionalities of the `.wasm` language server will be tested against the existing test suite of the current language server to ensure robustness.
- Evaluators can fire up the docker container locally and try to edit Solidity source files with smarts provided from the language server.| +| **0d.** | Docker | A docker image will be provided so that an evaluator can easily set it up an try out the client locally. | +| 0e. | Solang Playground Client | We will provide a functional web editor in which a developer can edit and save Solidity source files with the help of Solang's language server.(documented code base). | + + +###### Note: To make things clear, this milestone **only** invovles the integration of the language server into the client. It does not involve compiling or deploying contracts. + +### Milestone 2: Solang Playground Backend Service + +- **Estimated Duration:** 3 month +- **FTE:** 0.75 +- **Costs:** 6,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a `readme` that shows how to run and interact with the actix web server. | +| **0c.** | Testing and Testing Guide | - Unit tests to be provided to test for the compilation result of the web server. The unit tests will be a part of the server's source code.
- Test scripts for the client's compile functionality. | +| **0d.** | Docker | - A `Docker` container will be provided for the actix web server.
- A `Docker compose` script to be provided to build both the client container and the backend container and set their networking. | +|1. | Initial skeleton | - The client should have a `compile` functionality in which the bytecode and metadata can be viewed. This would be done by the interaction with the backend server implemented in this milestone. | + + +### Milestone 3: Substrate node interaction + +- **Estimated Duration:** 3 month +- **FTE:** 0.5 +- **Costs:** 5,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | Added code to the client will be documented. Steps for deploying and interacting with a smart contract will also be provided at this point. | +| **0c.** | Testing and Testing Guide | - A testing suite will be provided to ensure that the front-end sends the correct requests `(compile, deploy and test)` with correct parameters. The tests will ensure the contracts are deployed and could be interacted with as expected. | +| **0d.** | Docker | Since this milestone is considered added functionality to the client `(milestone 1)`, the docker provided in the first milestone would be updated and a new container for the client will be provided. | +| 1. | First Working Version | - At this point, a Solidity developer should be able to edit, compile, deploy and interact with a smart contract through the IDE without installing any components.| + + +### Milestone 4 Solang IDE Improvements + +- **Estimated Duration:** 2 month +- **FTE:** 0.5 +- **Costs:** 4,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and update the `readme` of the playground with the newly added functionalities | +| **0c.** | Testing and Testing Guide | The added functionality will be tested against the test suite provided in milestone 4 | +| **0d.** | Docker | Since this milestone is considered added functionality to the client `(milestone 1)`, the docker provided in the first milestone would be updated and a new container for the client will be provided. | +|**0e.** | Article | I will share a blog-post on multiple platforms inviting Solidity developers to try out Solidity on Substrate using the IDE.| +| 1.| IDE Improvements | 1- Call a specific function by the click of a button, alongside with the required parameters. E.G. similar to `contracts UI`. (Only possible on the Substrate side)
2- Initializing the work-space with an example contract in a Solang project file structure ready for deployment and interaction. + + +## Future Plans + +### Future improvements + +#### 1- Removing the Backend Component: + +Removing the Back-end component of the web IDE consists of a collection of tasks: + +- Investigate compiling Solang to `wasm` to run in the browser. This will imply investigating a suitable way to compile `LLVM` to `wasm`. + +- There are implementations of mock Substrate contracts run-time, but they don't support full chain operations. Compiling the runtime with full functionality to `wasm` will be investigated. + + +#### 2- Making the IDE visually attractive + + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +I have already completed a grant under this program. I was first introduced to it by my mentor [Sean Young](sean@mess.org) and the awesome [Cyrill leutwiler](bigcyrill@hotmail.com). From bc1528fc7303419fca6b618d0ae57f33bc8ba3f8 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 9 Aug 2023 16:18:08 +0200 Subject: [PATCH 527/665] Update index.md add Solang Playground --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 34422617c2a..cfd8326f063 100644 --- a/applications/index.md +++ b/applications/index.md @@ -54,6 +54,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [k/factory](https://k-f.co/) | [On-Chain Automated Treasury Management](./centrifuge-twamm.md) | [GitHub](https://github.com/centrifuge) | ☐ | ☐ | ☐ | | [AISLAND DAO](https://aisland.io) | [Aisland Docsig](./Aisland-DocSig.md) | [GitHub](https://github.com/aisland-dao) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [Storage solution on Polkadot](./Eiger_Storage_on_Polkadot_1.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | +| [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang Playground](Solang_Playground.md) | [GitHub](https://github.com/salaheldinsoliman) | ☐ | ☐ | ☐ | [🔝](#2023) From f394c620cc84323472e689d7d6694b2d2147ba3f Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 9 Aug 2023 16:36:13 +0200 Subject: [PATCH 528/665] Fix website --- applications/Solang_Playground.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/applications/Solang_Playground.md b/applications/Solang_Playground.md index febde82632e..ec188ea9e7e 100644 --- a/applications/Solang_Playground.md +++ b/applications/Solang_Playground.md @@ -181,7 +181,7 @@ There were also talks, via mail, with members from the foundation explaining int | ------ | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **0a.** | License | Apache 2.0 | | **0b.** | Documentation | - We will provide both **inline documentation** of the client code and a readme that shows the build steps of the language server `.wasm` binary. | -| **0c.** | Testing and Testing Guide | - The functionalities of the `.wasm` language server will be tested against the existing test suite of the current language server to ensure robustness.
- Evaluators can fire up the docker container locally and try to edit Solidity source files with smarts provided from the language server.| +| **0c.** | Testing and Testing Guide | - The functionalities of the `.wasm` language server will be tested against the existing test suite of the current language server to ensure robustness.
- Evaluators can fire up the docker container locally and try to edit Solidity source files with smarts provided from the language server.| | **0d.** | Docker | A docker image will be provided so that an evaluator can easily set it up an try out the client locally. | | 0e. | Solang Playground Client | We will provide a functional web editor in which a developer can edit and save Solidity source files with the help of Solang's language server.(documented code base). | @@ -198,8 +198,8 @@ There were also talks, via mail, with members from the foundation explaining int | -----: | ----------- | ------------- | | **0a.** | License | Apache 2.0 | | **0b.** | Documentation | We will provide both **inline documentation** of the code and a `readme` that shows how to run and interact with the actix web server. | -| **0c.** | Testing and Testing Guide | - Unit tests to be provided to test for the compilation result of the web server. The unit tests will be a part of the server's source code.
- Test scripts for the client's compile functionality. | -| **0d.** | Docker | - A `Docker` container will be provided for the actix web server.
- A `Docker compose` script to be provided to build both the client container and the backend container and set their networking. | +| **0c.** | Testing and Testing Guide | - Unit tests to be provided to test for the compilation result of the web server. The unit tests will be a part of the server's source code.
- Test scripts for the client's compile functionality. | +| **0d.** | Docker | - A `Docker` container will be provided for the actix web server.
- A `Docker compose` script to be provided to build both the client container and the backend container and set their networking. | |1. | Initial skeleton | - The client should have a `compile` functionality in which the bytecode and metadata can be viewed. This would be done by the interaction with the backend server implemented in this milestone. | @@ -231,7 +231,7 @@ There were also talks, via mail, with members from the foundation explaining int | **0c.** | Testing and Testing Guide | The added functionality will be tested against the test suite provided in milestone 4 | | **0d.** | Docker | Since this milestone is considered added functionality to the client `(milestone 1)`, the docker provided in the first milestone would be updated and a new container for the client will be provided. | |**0e.** | Article | I will share a blog-post on multiple platforms inviting Solidity developers to try out Solidity on Substrate using the IDE.| -| 1.| IDE Improvements | 1- Call a specific function by the click of a button, alongside with the required parameters. E.G. similar to `contracts UI`. (Only possible on the Substrate side)
2- Initializing the work-space with an example contract in a Solang project file structure ready for deployment and interaction. +| 1.| IDE Improvements | 1- Call a specific function by the click of a button, alongside with the required parameters. E.G. similar to `contracts UI`. (Only possible on the Substrate side)
2- Initializing the work-space with an example contract in a Solang project file structure ready for deployment and interaction. ## Future Plans From 3866d8e12ad718536b0cddc5e5253617449558e7 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 9 Aug 2023 17:14:34 +0200 Subject: [PATCH 529/665] update dependencies --- yarn.lock | 791 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 412 insertions(+), 379 deletions(-) diff --git a/yarn.lock b/yarn.lock index 980a636fa0d..872a8581923 100644 --- a/yarn.lock +++ b/yarn.lock @@ -29,114 +29,114 @@ resolved "https://registry.yarnpkg.com/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.3.tgz#2e22e830d36f0a9cf2c0ccd3c7f6d59435b77dfa" integrity sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ== -"@algolia/cache-browser-local-storage@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.18.0.tgz#7bc0c9d8d346ed01384f4cf0dfaf6ba29ad5c20c" - integrity sha512-rUAs49NLlO8LVLgGzM4cLkw8NJLKguQLgvFmBEe3DyzlinoqxzQMHfKZs6TSq4LZfw/z8qHvRo8NcTAAUJQLcw== - dependencies: - "@algolia/cache-common" "4.18.0" - -"@algolia/cache-common@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.18.0.tgz#aac33afac53e191c595d14a4bb7e6d81aae4836f" - integrity sha512-BmxsicMR4doGbeEXQu8yqiGmiyvpNvejYJtQ7rvzttEAMxOPoWEHrWyzBQw4x7LrBY9pMrgv4ZlUaF8PGzewHg== - -"@algolia/cache-in-memory@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.18.0.tgz#9a40294c734819724a1b4e86afd5a7d4be9bcc2f" - integrity sha512-evD4dA1nd5HbFdufBxLqlJoob7E2ozlqJZuV3YlirNx5Na4q1LckIuzjNYZs2ddLzuTc/Xd5O3Ibf7OwPskHxw== - dependencies: - "@algolia/cache-common" "4.18.0" - -"@algolia/client-account@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.18.0.tgz#202d9e06b41e06e45cb919107bed0a65106883cc" - integrity sha512-XsDnlROr3+Z1yjxBJjUMfMazi1V155kVdte6496atvBgOEtwCzTs3A+qdhfsAnGUvaYfBrBkL0ThnhMIBCGcew== - dependencies: - "@algolia/client-common" "4.18.0" - "@algolia/client-search" "4.18.0" - "@algolia/transporter" "4.18.0" - -"@algolia/client-analytics@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.18.0.tgz#030b026bd9c13cb15437e35e4456bde25b0f1298" - integrity sha512-chEUSN4ReqU7uRQ1C8kDm0EiPE+eJeAXiWcBwLhEynfNuTfawN9P93rSZktj7gmExz0C8XmkbBU19IQ05wCNrQ== - dependencies: - "@algolia/client-common" "4.18.0" - "@algolia/client-search" "4.18.0" - "@algolia/requester-common" "4.18.0" - "@algolia/transporter" "4.18.0" - -"@algolia/client-common@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.18.0.tgz#e080c393e1becdd5f5f008815c57d3248d3a8483" - integrity sha512-7N+soJFP4wn8tjTr3MSUT/U+4xVXbz4jmeRfWfVAzdAbxLAQbHa0o/POSdTvQ8/02DjCLelloZ1bb4ZFVKg7Wg== - dependencies: - "@algolia/requester-common" "4.18.0" - "@algolia/transporter" "4.18.0" - -"@algolia/client-personalization@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.18.0.tgz#9042ce2773120158ad25e1dfb28d706cebb48dc2" - integrity sha512-+PeCjODbxtamHcPl+couXMeHEefpUpr7IHftj4Y4Nia1hj8gGq4VlIcqhToAw8YjLeCTfOR7r7xtj3pJcYdP8A== - dependencies: - "@algolia/client-common" "4.18.0" - "@algolia/requester-common" "4.18.0" - "@algolia/transporter" "4.18.0" - -"@algolia/client-search@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.18.0.tgz#83b37aacbe254fd7892154fe7a8f0395bd01c682" - integrity sha512-F9xzQXTjm6UuZtnsLIew6KSraXQ0AzS/Ee+OD+mQbtcA/K1sg89tqb8TkwjtiYZ0oij13u3EapB3gPZwm+1Y6g== - dependencies: - "@algolia/client-common" "4.18.0" - "@algolia/requester-common" "4.18.0" - "@algolia/transporter" "4.18.0" +"@algolia/cache-browser-local-storage@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.19.1.tgz#d29f42775ed4d117182897ac164519c593faf399" + integrity sha512-FYAZWcGsFTTaSAwj9Std8UML3Bu8dyWDncM7Ls8g+58UOe4XYdlgzXWbrIgjaguP63pCCbMoExKr61B+ztK3tw== + dependencies: + "@algolia/cache-common" "4.19.1" + +"@algolia/cache-common@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-common/-/cache-common-4.19.1.tgz#faa5eeacaffd6023c2cf26e9866bdb06193f9b26" + integrity sha512-XGghi3l0qA38HiqdoUY+wvGyBsGvKZ6U3vTiMBT4hArhP3fOGLXpIINgMiiGjTe4FVlTa5a/7Zf2bwlIHfRqqg== + +"@algolia/cache-in-memory@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/cache-in-memory/-/cache-in-memory-4.19.1.tgz#afe4f0f21149800358379871089e0141fb72415b" + integrity sha512-+PDWL+XALGvIginigzu8oU6eWw+o76Z8zHbBovWYcrtWOEtinbl7a7UTt3x3lthv+wNuFr/YD1Gf+B+A9V8n5w== + dependencies: + "@algolia/cache-common" "4.19.1" + +"@algolia/client-account@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/client-account/-/client-account-4.19.1.tgz#1fa65881baab79ad35af6bcf44646a13b8d5edc9" + integrity sha512-Oy0ritA2k7AMxQ2JwNpfaEcgXEDgeyKu0V7E7xt/ZJRdXfEpZcwp9TOg4TJHC7Ia62gIeT2Y/ynzsxccPw92GA== + dependencies: + "@algolia/client-common" "4.19.1" + "@algolia/client-search" "4.19.1" + "@algolia/transporter" "4.19.1" + +"@algolia/client-analytics@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/client-analytics/-/client-analytics-4.19.1.tgz#e6ed79acd4de5a0284c9696bf4e1c25278ba34db" + integrity sha512-5QCq2zmgdZLIQhHqwl55ZvKVpLM3DNWjFI4T+bHr3rGu23ew2bLO4YtyxaZeChmDb85jUdPDouDlCumGfk6wOg== + dependencies: + "@algolia/client-common" "4.19.1" + "@algolia/client-search" "4.19.1" + "@algolia/requester-common" "4.19.1" + "@algolia/transporter" "4.19.1" + +"@algolia/client-common@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/client-common/-/client-common-4.19.1.tgz#40a8387316fa61d62ad1091beb3a8e227f008e75" + integrity sha512-3kAIVqTcPrjfS389KQvKzliC559x+BDRxtWamVJt8IVp7LGnjq+aVAXg4Xogkur1MUrScTZ59/AaUd5EdpyXgA== + dependencies: + "@algolia/requester-common" "4.19.1" + "@algolia/transporter" "4.19.1" + +"@algolia/client-personalization@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/client-personalization/-/client-personalization-4.19.1.tgz#fe362e0684dc74c3504c3641c5a7488c6ae02e07" + integrity sha512-8CWz4/H5FA+krm9HMw2HUQenizC/DxUtsI5oYC0Jxxyce1vsr8cb1aEiSJArQT6IzMynrERif1RVWLac1m36xw== + dependencies: + "@algolia/client-common" "4.19.1" + "@algolia/requester-common" "4.19.1" + "@algolia/transporter" "4.19.1" + +"@algolia/client-search@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/client-search/-/client-search-4.19.1.tgz#5e54601aa5f5cea790cec3f2cde4af9d6403871e" + integrity sha512-mBecfMFS4N+yK/p0ZbK53vrZbL6OtWMk8YmnOv1i0LXx4pelY8TFhqKoTit3NPVPwoSNN0vdSN9dTu1xr1XOVw== + dependencies: + "@algolia/client-common" "4.19.1" + "@algolia/requester-common" "4.19.1" + "@algolia/transporter" "4.19.1" "@algolia/events@^4.0.1": version "4.0.1" resolved "https://registry.yarnpkg.com/@algolia/events/-/events-4.0.1.tgz#fd39e7477e7bc703d7f893b556f676c032af3950" integrity sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ== -"@algolia/logger-common@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.18.0.tgz#0e6a14e8b91fcb7861595169e1ca57cf219f8255" - integrity sha512-46etYgSlkoKepkMSyaoriSn2JDgcrpc/nkOgou/lm0y17GuMl9oYZxwKKTSviLKI5Irk9nSKGwnBTQYwXOYdRg== +"@algolia/logger-common@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-common/-/logger-common-4.19.1.tgz#0e46a11510f3e94e1afc0ac780ae52e9597be78f" + integrity sha512-i6pLPZW/+/YXKis8gpmSiNk1lOmYCmRI6+x6d2Qk1OdfvX051nRVdalRbEcVTpSQX6FQAoyeaui0cUfLYW5Elw== -"@algolia/logger-console@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.18.0.tgz#3636e4b3e2154ee2ee2db2e5be2857203c9f7047" - integrity sha512-3P3VUYMl9CyJbi/UU1uUNlf6Z8N2ltW3Oqhq/nR7vH0CjWv32YROq3iGWGxB2xt3aXobdUPXs6P0tHSKRmNA6g== +"@algolia/logger-console@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/logger-console/-/logger-console-4.19.1.tgz#656a6f4ebb5de39af6ef7095c398d9ab3cceb87d" + integrity sha512-jj72k9GKb9W0c7TyC3cuZtTr0CngLBLmc8trzZlXdfvQiigpUdvTi1KoWIb2ZMcRBG7Tl8hSb81zEY3zI2RlXg== dependencies: - "@algolia/logger-common" "4.18.0" + "@algolia/logger-common" "4.19.1" -"@algolia/requester-browser-xhr@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.18.0.tgz#90ac575946e0ab196cdd87593b3fed563a32a9af" - integrity sha512-/AcWHOBub2U4TE/bPi4Gz1XfuLK6/7dj4HJG+Z2SfQoS1RjNLshZclU3OoKIkFp8D2NC7+BNsPvr9cPLyW8nyQ== +"@algolia/requester-browser-xhr@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.19.1.tgz#7341ea2f980b8980a2976110142026721e452187" + integrity sha512-09K/+t7lptsweRTueHnSnmPqIxbHMowejAkn9XIcJMLdseS3zl8ObnS5GWea86mu3vy4+8H+ZBKkUN82Zsq/zg== dependencies: - "@algolia/requester-common" "4.18.0" + "@algolia/requester-common" "4.19.1" -"@algolia/requester-common@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.18.0.tgz#12984aa4b10679ffa863536ceeae33cdd0ee4d42" - integrity sha512-xlT8R1qYNRBCi1IYLsx7uhftzdfsLPDGudeQs+xvYB4sQ3ya7+ppolB/8m/a4F2gCkEO6oxpp5AGemM7kD27jA== +"@algolia/requester-common@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-common/-/requester-common-4.19.1.tgz#f3396c77631b9d36e8d4d6f819a2c27f9ddbf7a1" + integrity sha512-BisRkcWVxrDzF1YPhAckmi2CFYK+jdMT60q10d7z3PX+w6fPPukxHRnZwooiTUrzFe50UBmLItGizWHP5bDzVQ== -"@algolia/requester-node-http@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.18.0.tgz#8046b141c784cc7778bcf51e8a7888cce463754b" - integrity sha512-TGfwj9aeTVgOUhn5XrqBhwUhUUDnGIKlI0kCBMdR58XfXcfdwomka+CPIgThRbfYw04oQr31A6/95ZH2QVJ9UQ== +"@algolia/requester-node-http@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/requester-node-http/-/requester-node-http-4.19.1.tgz#ea210de9642628b3bdda1dd7fcd1fcb686da442e" + integrity sha512-6DK52DHviBHTG2BK/Vv2GIlEw7i+vxm7ypZW0Z7vybGCNDeWzADx+/TmxjkES2h15+FZOqVf/Ja677gePsVItA== dependencies: - "@algolia/requester-common" "4.18.0" + "@algolia/requester-common" "4.19.1" -"@algolia/transporter@4.18.0": - version "4.18.0" - resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.18.0.tgz#18de645c20fc5703196b2ad4fec55e98c315a1d8" - integrity sha512-xbw3YRUGtXQNG1geYFEDDuFLZt4Z8YNKbamHPkzr3rWc6qp4/BqEeXcI2u/P/oMq2yxtXgMxrCxOPA8lyIe5jw== +"@algolia/transporter@4.19.1": + version "4.19.1" + resolved "https://registry.yarnpkg.com/@algolia/transporter/-/transporter-4.19.1.tgz#b5787299740c4bec9ba05502d98c14b5999860c8" + integrity sha512-nkpvPWbpuzxo1flEYqNIbGz7xhfhGOKGAZS7tzC+TELgEmi7z99qRyTfNSUlW7LZmB3ACdnqAo+9A9KFBENviQ== dependencies: - "@algolia/cache-common" "4.18.0" - "@algolia/logger-common" "4.18.0" - "@algolia/requester-common" "4.18.0" + "@algolia/cache-common" "4.19.1" + "@algolia/logger-common" "4.19.1" + "@algolia/requester-common" "4.19.1" "@ampproject/remapping@^2.2.0": version "2.2.1" @@ -146,12 +146,13 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.8.3": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" - integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.22.10", "@babel/code-frame@^7.22.5", "@babel/code-frame@^7.8.3": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3" + integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA== dependencies: - "@babel/highlight" "^7.22.5" + "@babel/highlight" "^7.22.10" + chalk "^2.4.2" "@babel/compat-data@^7.22.5", "@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9": version "7.22.9" @@ -181,32 +182,32 @@ source-map "^0.5.0" "@babel/core@^7.18.6", "@babel/core@^7.19.6", "@babel/core@^7.21.3": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.9.tgz#bd96492c68822198f33e8a256061da3cf391f58f" - integrity sha512-G2EgeufBcYw27U4hhoIwFcgc1XU7TlXJ3mv04oOv1WCuo900U/anZSPzEqNjwdjgffkk2Gs0AN0dW1CKVLcG7w== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.22.10.tgz#aad442c7bcd1582252cb4576747ace35bc122f35" + integrity sha512-fTmqbbUBAwCcre6zPzNngvsI0aNrPZe77AeqvDxWM9Nm+04RrJ3CAmGHA9f7lJQY6ZMhRztNemy4uslDxTX4Qw== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.9" + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" + "@babel/helper-compilation-targets" "^7.22.10" "@babel/helper-module-transforms" "^7.22.9" - "@babel/helpers" "^7.22.6" - "@babel/parser" "^7.22.7" + "@babel/helpers" "^7.22.10" + "@babel/parser" "^7.22.10" "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.8" - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" convert-source-map "^1.7.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.2" semver "^6.3.1" -"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.7", "@babel/generator@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.9.tgz#572ecfa7a31002fa1de2a9d91621fd895da8493d" - integrity sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw== +"@babel/generator@^7.12.5", "@babel/generator@^7.18.7", "@babel/generator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.22.10.tgz#c92254361f398e160645ac58831069707382b722" + integrity sha512-79KIf7YiWjjdZ81JnLujDRApWtl7BxTqWD88+FFdQEIOG8LJ0etDOM7CXuIgGJa55sGOwZVwuEsaLEm0PJ5/+A== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.10" "@jridgewell/gen-mapping" "^0.3.2" "@jridgewell/trace-mapping" "^0.3.17" jsesc "^2.5.1" @@ -219,16 +220,16 @@ "@babel/types" "^7.22.5" "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz#a3f4758efdd0190d8927fcffd261755937c71878" - integrity sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz#573e735937e99ea75ea30788b57eb52fab7468c9" + integrity sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ== dependencies: - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.10" -"@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.9.tgz#f9d0a7aaaa7cd32a3f31c9316a69f5a9bcacb892" - integrity sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw== +"@babel/helper-compilation-targets@^7.22.10", "@babel/helper-compilation-targets@^7.22.5", "@babel/helper-compilation-targets@^7.22.6": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz#01d648bbc25dd88f513d862ee0df27b7d4e67024" + integrity sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q== dependencies: "@babel/compat-data" "^7.22.9" "@babel/helper-validator-option" "^7.22.5" @@ -236,10 +237,10 @@ lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.22.5", "@babel/helper-create-class-features-plugin@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.9.tgz#c36ea240bb3348f942f08b0fbe28d6d979fab236" - integrity sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ== +"@babel/helper-create-class-features-plugin@^7.22.10", "@babel/helper-create-class-features-plugin@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz#dd2612d59eac45588021ac3d6fa976d08f4e95a3" + integrity sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-environment-visitor" "^7.22.5" @@ -260,10 +261,10 @@ regexpu-core "^5.3.1" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.1": - version "0.4.1" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz#af1429c4a83ac316a6a8c2cc8ff45cb5d2998d3a" - integrity sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A== +"@babel/helper-define-polyfill-provider@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz#82c825cadeeeee7aad237618ebbe8fa1710015d7" + integrity sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -333,7 +334,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== -"@babel/helper-remap-async-to-generator@^7.22.5": +"@babel/helper-remap-async-to-generator@^7.22.5", "@babel/helper-remap-async-to-generator@^7.22.9": version "7.22.9" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz#53a25b7484e722d7efb9c350c75c032d4628de82" integrity sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ== @@ -388,36 +389,36 @@ integrity sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw== "@babel/helper-wrap-function@^7.22.9": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.9.tgz#189937248c45b0182c1dcf32f3444ca153944cb9" - integrity sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz#d845e043880ed0b8c18bd194a12005cb16d2f614" + integrity sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ== dependencies: "@babel/helper-function-name" "^7.22.5" "@babel/template" "^7.22.5" - "@babel/types" "^7.22.5" + "@babel/types" "^7.22.10" -"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.6.tgz#8e61d3395a4f0c5a8060f309fb008200969b5ecd" - integrity sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA== +"@babel/helpers@^7.12.5", "@babel/helpers@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.22.10.tgz#ae6005c539dfbcb5cd71fb51bfc8a52ba63bc37a" + integrity sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw== dependencies: "@babel/template" "^7.22.5" - "@babel/traverse" "^7.22.6" - "@babel/types" "^7.22.5" + "@babel/traverse" "^7.22.10" + "@babel/types" "^7.22.10" -"@babel/highlight@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" - integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== +"@babel/highlight@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7" + integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ== dependencies: "@babel/helper-validator-identifier" "^7.22.5" - chalk "^2.0.0" + chalk "^2.4.2" js-tokens "^4.0.0" -"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.5", "@babel/parser@^7.22.7": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.7.tgz#df8cf085ce92ddbdbf668a7f186ce848c9036cae" - integrity sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q== +"@babel/parser@^7.12.7", "@babel/parser@^7.18.8", "@babel/parser@^7.22.10", "@babel/parser@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.22.10.tgz#e37634f9a12a1716136c44624ef54283cabd3f55" + integrity sha512-lNbdGsQb9ekfsnjFGhEiF4hfFqGgfOP3H3d27re3n+CGhNuTSUEQdfWk556sTLNTloczcdM5TYF2LhzmDQKyvQ== "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.5": version "7.22.5" @@ -449,14 +450,6 @@ resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz#af613d2cd5e643643b65cded64207b15c85cb78e" - integrity sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -612,14 +605,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.7": - version "7.22.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz#053e76c0a903b72b573cb1ab7d6882174d460a1b" - integrity sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg== +"@babel/plugin-transform-async-generator-functions@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz#45946cd17f915b10e65c29b8ed18a0a50fc648c8" + integrity sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g== dependencies: "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - "@babel/helper-remap-async-to-generator" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.9" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-transform-async-to-generator@^7.22.5": @@ -638,10 +631,10 @@ dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz#8bfc793b3a4b2742c0983fadc1480d843ecea31b" - integrity sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg== +"@babel/plugin-transform-block-scoping@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz#88a1dccc3383899eb5e660534a76a22ecee64faa" + integrity sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -685,14 +678,14 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/template" "^7.22.5" -"@babel/plugin-transform-destructuring@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz#d3aca7438f6c26c78cdd0b0ba920a336001b27cc" - integrity sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ== +"@babel/plugin-transform-destructuring@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz#38e2273814a58c810b6c34ea293be4973c4eb5e2" + integrity sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.22.5", "@babel/plugin-transform-dotall-regex@^7.4.4": +"@babel/plugin-transform-dotall-regex@^7.22.5": version "7.22.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165" integrity sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw== @@ -870,10 +863,10 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.5", "@babel/plugin-transform-optional-chaining@^7.22.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz#4bacfe37001fe1901117672875e931d439811564" - integrity sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg== +"@babel/plugin-transform-optional-chaining@^7.22.10", "@babel/plugin-transform-optional-chaining@^7.22.5": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz#076d28a7e074392e840d4ae587d83445bac0372a" + integrity sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g== dependencies: "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" @@ -951,13 +944,13 @@ "@babel/helper-annotate-as-pure" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz#cd8a68b228a5f75fa01420e8cc2fc400f0fc32aa" - integrity sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw== +"@babel/plugin-transform-regenerator@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca" + integrity sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw== dependencies: "@babel/helper-plugin-utils" "^7.22.5" - regenerator-transform "^0.15.1" + regenerator-transform "^0.15.2" "@babel/plugin-transform-reserved-words@^7.22.5": version "7.22.5" @@ -967,15 +960,15 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.18.6": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.9.tgz#a87b11e170cbbfb018e6a2bf91f5c6e533b9e027" - integrity sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.10.tgz#89eda6daf1d3af6f36fb368766553054c8d7cd46" + integrity sha512-RchI7HePu1eu0CYNKHHHQdfenZcM4nz8rew5B1VWqeRKdcwW5aQ5HeG9eTUbWiAS1UrmHVLmoxTWHt3iLD/NhA== dependencies: "@babel/helper-module-imports" "^7.22.5" "@babel/helper-plugin-utils" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.4" - babel-plugin-polyfill-corejs3 "^0.8.2" - babel-plugin-polyfill-regenerator "^0.5.1" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" semver "^6.3.1" "@babel/plugin-transform-shorthand-properties@^7.22.5": @@ -1015,19 +1008,19 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typescript@^7.22.5": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.9.tgz#91e08ad1eb1028ecc62662a842e93ecfbf3c7234" - integrity sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.22.10.tgz#aadd98fab871f0bb5717bcc24c31aaaa455af923" + integrity sha512-7++c8I/ymsDo4QQBAgbraXLzIM6jmfao11KgIBEYZRReWzNWH9NtNgJcyrZiXsOPh523FQm6LfpLyy/U5fn46A== dependencies: "@babel/helper-annotate-as-pure" "^7.22.5" - "@babel/helper-create-class-features-plugin" "^7.22.9" + "@babel/helper-create-class-features-plugin" "^7.22.10" "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-typescript" "^7.22.5" -"@babel/plugin-transform-unicode-escapes@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz#ce0c248522b1cb22c7c992d88301a5ead70e806c" - integrity sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg== +"@babel/plugin-transform-unicode-escapes@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9" + integrity sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg== dependencies: "@babel/helper-plugin-utils" "^7.22.5" @@ -1056,12 +1049,12 @@ "@babel/helper-plugin-utils" "^7.22.5" "@babel/preset-env@^7.18.6", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.20.2": - version "7.22.9" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.9.tgz#57f17108eb5dfd4c5c25a44c1977eba1df310ac7" - integrity sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.22.10.tgz#3263b9fe2c8823d191d28e61eac60a79f9ce8a0f" + integrity sha512-riHpLb1drNkpLlocmSyEg4oYJIQFeXAK/d7rI6mbD0XsvoTOOweXDmQPG/ErxsEhWk3rl3Q/3F6RFQlVFS8m0A== dependencies: "@babel/compat-data" "^7.22.9" - "@babel/helper-compilation-targets" "^7.22.9" + "@babel/helper-compilation-targets" "^7.22.10" "@babel/helper-plugin-utils" "^7.22.5" "@babel/helper-validator-option" "^7.22.5" "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.22.5" @@ -1086,15 +1079,15 @@ "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" "@babel/plugin-transform-arrow-functions" "^7.22.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.7" + "@babel/plugin-transform-async-generator-functions" "^7.22.10" "@babel/plugin-transform-async-to-generator" "^7.22.5" "@babel/plugin-transform-block-scoped-functions" "^7.22.5" - "@babel/plugin-transform-block-scoping" "^7.22.5" + "@babel/plugin-transform-block-scoping" "^7.22.10" "@babel/plugin-transform-class-properties" "^7.22.5" "@babel/plugin-transform-class-static-block" "^7.22.5" "@babel/plugin-transform-classes" "^7.22.6" "@babel/plugin-transform-computed-properties" "^7.22.5" - "@babel/plugin-transform-destructuring" "^7.22.5" + "@babel/plugin-transform-destructuring" "^7.22.10" "@babel/plugin-transform-dotall-regex" "^7.22.5" "@babel/plugin-transform-duplicate-keys" "^7.22.5" "@babel/plugin-transform-dynamic-import" "^7.22.5" @@ -1117,38 +1110,36 @@ "@babel/plugin-transform-object-rest-spread" "^7.22.5" "@babel/plugin-transform-object-super" "^7.22.5" "@babel/plugin-transform-optional-catch-binding" "^7.22.5" - "@babel/plugin-transform-optional-chaining" "^7.22.6" + "@babel/plugin-transform-optional-chaining" "^7.22.10" "@babel/plugin-transform-parameters" "^7.22.5" "@babel/plugin-transform-private-methods" "^7.22.5" "@babel/plugin-transform-private-property-in-object" "^7.22.5" "@babel/plugin-transform-property-literals" "^7.22.5" - "@babel/plugin-transform-regenerator" "^7.22.5" + "@babel/plugin-transform-regenerator" "^7.22.10" "@babel/plugin-transform-reserved-words" "^7.22.5" "@babel/plugin-transform-shorthand-properties" "^7.22.5" "@babel/plugin-transform-spread" "^7.22.5" "@babel/plugin-transform-sticky-regex" "^7.22.5" "@babel/plugin-transform-template-literals" "^7.22.5" "@babel/plugin-transform-typeof-symbol" "^7.22.5" - "@babel/plugin-transform-unicode-escapes" "^7.22.5" + "@babel/plugin-transform-unicode-escapes" "^7.22.10" "@babel/plugin-transform-unicode-property-regex" "^7.22.5" "@babel/plugin-transform-unicode-regex" "^7.22.5" "@babel/plugin-transform-unicode-sets-regex" "^7.22.5" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.22.5" - babel-plugin-polyfill-corejs2 "^0.4.4" - babel-plugin-polyfill-corejs3 "^0.8.2" - babel-plugin-polyfill-regenerator "^0.5.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "@babel/types" "^7.22.10" + babel-plugin-polyfill-corejs2 "^0.4.5" + babel-plugin-polyfill-corejs3 "^0.8.3" + babel-plugin-polyfill-regenerator "^0.5.2" core-js-compat "^3.31.0" semver "^6.3.1" -"@babel/preset-modules@^0.1.5": - version "0.1.5" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.5.tgz#ef939d6e7f268827e1841638dc6ff95515e115d9" - integrity sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA== +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" esutils "^2.0.2" @@ -1181,19 +1172,19 @@ integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== "@babel/runtime-corejs3@^7.18.6": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.6.tgz#e8e625eb3db29491e0326b3aeb9929c43b270ae4" - integrity sha512-M+37LLIRBTEVjktoJjbw4KVhupF0U/3PYUCbBwgAd9k17hoKhRu1n935QiG7Tuxv0LJOMrb2vuKEeYUlv0iyiw== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.22.10.tgz#5ecc3d32faa70009f084cc2e087d79e5f5cdcca9" + integrity sha512-IcixfV2Jl3UrqZX4c81+7lVg5++2ufYJyAFW3Aux/ZTvY6LVYYhJ9rMgnbX0zGVq6eqfVpnoatTjZdVki/GmWA== dependencies: core-js-pure "^3.30.2" - regenerator-runtime "^0.13.11" + regenerator-runtime "^0.14.0" "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.3", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.18.6", "@babel/runtime@^7.20.13", "@babel/runtime@^7.8.4": - version "7.22.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.6.tgz#57d64b9ae3cff1d67eb067ae117dac087f5bd438" - integrity sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ== + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682" + integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ== dependencies: - regenerator-runtime "^0.13.11" + regenerator-runtime "^0.14.0" "@babel/template@^7.12.7", "@babel/template@^7.22.5": version "7.22.5" @@ -1204,35 +1195,35 @@ "@babel/parser" "^7.22.5" "@babel/types" "^7.22.5" -"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.6", "@babel/traverse@^7.22.8": - version "7.22.8" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.8.tgz#4d4451d31bc34efeae01eac222b514a77aa4000e" - integrity sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw== +"@babel/traverse@^7.12.9", "@babel/traverse@^7.18.8", "@babel/traverse@^7.22.10": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.22.10.tgz#20252acb240e746d27c2e82b4484f199cf8141aa" + integrity sha512-Q/urqV4pRByiNNpb/f5OSv28ZlGJiFiiTh+GAHktbIrkPhPbl90+uW6SmpoLyZqutrg9AEaEf3Q/ZBRHBXgxig== dependencies: - "@babel/code-frame" "^7.22.5" - "@babel/generator" "^7.22.7" + "@babel/code-frame" "^7.22.10" + "@babel/generator" "^7.22.10" "@babel/helper-environment-visitor" "^7.22.5" "@babel/helper-function-name" "^7.22.5" "@babel/helper-hoist-variables" "^7.22.5" "@babel/helper-split-export-declaration" "^7.22.6" - "@babel/parser" "^7.22.7" - "@babel/types" "^7.22.5" + "@babel/parser" "^7.22.10" + "@babel/types" "^7.22.10" debug "^4.1.0" globals "^11.1.0" -"@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.21.3", "@babel/types@^7.22.5", "@babel/types@^7.4.4": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" - integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== +"@babel/types@^7.12.7", "@babel/types@^7.20.0", "@babel/types@^7.21.3", "@babel/types@^7.22.10", "@babel/types@^7.22.5", "@babel/types@^7.4.4": + version "7.22.10" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.10.tgz#4a9e76446048f2c66982d1a989dd12b8a2d2dc03" + integrity sha512-obaoigiLrlDZ7TUQln/8m4mSqIW2QFeOrCQc9r+xsaHGNoplVNYlRVpsfE8Vj35GEm2ZH4ZhrNYogs/3fj85kg== dependencies: "@babel/helper-string-parser" "^7.22.5" "@babel/helper-validator-identifier" "^7.22.5" to-fast-properties "^2.0.0" "@braintree/sanitize-url@^6.0.2": - version "6.0.2" - resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz#6110f918d273fe2af8ea1c4398a88774bb9fc12f" - integrity sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg== + version "6.0.4" + resolved "https://registry.yarnpkg.com/@braintree/sanitize-url/-/sanitize-url-6.0.4.tgz#923ca57e173c6b232bbbb07347b1be982f03e783" + integrity sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A== "@colors/colors@1.5.0": version "1.5.0" @@ -1710,10 +1701,10 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" - integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== "@jridgewell/set-array@^1.0.1": version "1.1.2" @@ -1728,23 +1719,18 @@ "@jridgewell/gen-mapping" "^0.3.0" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/sourcemap-codec@1.4.14": - version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" - integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== - -"@jridgewell/sourcemap-codec@^1.4.10": +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": version "1.4.15" resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": - version "0.3.18" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" - integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== + version "0.3.19" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811" + integrity sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw== dependencies: - "@jridgewell/resolve-uri" "3.1.0" - "@jridgewell/sourcemap-codec" "1.4.14" + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" "@leichtgewicht/ip-codec@^2.0.1": version "2.0.4" @@ -1786,11 +1772,6 @@ resolved "https://registry.yarnpkg.com/@mdx-js/util/-/util-1.6.22.tgz#219dfd89ae5b97a8801f015323ffa4b62f45718b" integrity sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA== -"@nicolo-ribaudo/semver-v6@^6.3.3": - version "6.3.3" - resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz#ea6d23ade78a325f7a52750aab1526b02b628c29" - integrity sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg== - "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -2123,6 +2104,23 @@ dependencies: "@types/node" "*" +"@types/d3-scale-chromatic@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#103124777e8cdec85b20b51fd3397c682ee1e954" + integrity sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw== + +"@types/d3-scale@^4.0.3": + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/d3-scale/-/d3-scale-4.0.3.tgz#7a5780e934e52b6f63ad9c24b105e33dd58102b5" + integrity sha512-PATBiMCpvHJSMtZAMEhc2WyL+hnzarKzI6wAHYjhsonjWJYGq5BXTzQjv4l8m2jO183/4wZ90rKvSeT7o72xNQ== + dependencies: + "@types/d3-time" "*" + +"@types/d3-time@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/d3-time/-/d3-time-3.0.0.tgz#e1ac0f3e9e195135361fa1a1d62f795d87e6e819" + integrity sha512-sZLCdHvBUcNby1cB6Fd3ZBrABbjz3v1Vm90nysCQ6Vt7vd6e/h9Lt7SiJUoEX0l4Dzc7P5llKyhqSi1ycSf1Hg== + "@types/debug@^4.0.0": version "4.1.8" resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.8.tgz#cef723a5d0a90990313faec2d1e22aee5eecb317" @@ -2139,9 +2137,9 @@ "@types/estree" "*" "@types/eslint@*": - version "8.44.0" - resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.0.tgz#55818eabb376e2272f77fbf5c96c43137c3c1e53" - integrity sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw== + version "8.44.2" + resolved "https://registry.yarnpkg.com/@types/eslint/-/eslint-8.44.2.tgz#0d21c505f98a89b8dd4d37fa162b09da6089199a" + integrity sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg== dependencies: "@types/estree" "*" "@types/json-schema" "*" @@ -2252,9 +2250,9 @@ integrity sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA== "@types/node@*": - version "20.4.2" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.2.tgz#129cc9ae69f93824f92fac653eebfb4812ab4af9" - integrity sha512-Dd0BYtWgnWJKwO1jkmTrzofjK2QXXcai0dmtzvIBhcA+RsG5h8R3xlyta0kGOZRNfL9GuRtb1knmPEhQrePCEw== + version "20.4.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.9.tgz#c7164e0f8d3f12dfae336af0b1f7fdec8c6b204f" + integrity sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ== "@types/node@^17.0.5": version "17.0.45" @@ -2313,9 +2311,9 @@ "@types/react" "*" "@types/react@*": - version "18.2.14" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.14.tgz#fa7a6fecf1ce35ca94e74874f70c56ce88f7a127" - integrity sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g== + version "18.2.19" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.19.tgz#f77cb2c8307368e624d464a25b9675fa35f95a8b" + integrity sha512-e2S8wmY1ePfM517PqCG80CcE48Xs5k0pwJzuDZsfE8IZRRBfOMCF+XqnFxu6mWtyivum1MQm4aco+WIt6Coimw== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -2600,31 +2598,31 @@ ajv@^8.0.0, ajv@^8.9.0: uri-js "^4.2.2" algoliasearch-helper@^3.10.0: - version "3.13.3" - resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.13.3.tgz#d23341fb88f490c9b2b83fc2362d1551d52117b6" - integrity sha512-jhbbuYZ+fheXpaJlqdJdFa1jOsrTWKmRRTYDM3oVTto5VodZzM7tT+BHzslAotaJf/81CKrm6yLRQn8WIr/K4A== + version "3.14.0" + resolved "https://registry.yarnpkg.com/algoliasearch-helper/-/algoliasearch-helper-3.14.0.tgz#2409c2591952719ab6fba1de77b3bbe5094ab85e" + integrity sha512-gXDXzsSS0YANn5dHr71CUXOo84cN4azhHKUbg71vAWnH+1JBiR4jf7to3t3JHXknXkbV0F7f055vUSBKrltHLQ== dependencies: "@algolia/events" "^4.0.1" algoliasearch@^4.0.0, algoliasearch@^4.13.1: - version "4.18.0" - resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.18.0.tgz#1183ad0384a5b2c14f381c3a361da611acc8edb3" - integrity sha512-pCuVxC1SVcpc08ENH32T4sLKSyzoU7TkRIDBMwSLfIiW+fq4znOmWDkAygHZ6pRcO9I1UJdqlfgnV7TRj+MXrA== - dependencies: - "@algolia/cache-browser-local-storage" "4.18.0" - "@algolia/cache-common" "4.18.0" - "@algolia/cache-in-memory" "4.18.0" - "@algolia/client-account" "4.18.0" - "@algolia/client-analytics" "4.18.0" - "@algolia/client-common" "4.18.0" - "@algolia/client-personalization" "4.18.0" - "@algolia/client-search" "4.18.0" - "@algolia/logger-common" "4.18.0" - "@algolia/logger-console" "4.18.0" - "@algolia/requester-browser-xhr" "4.18.0" - "@algolia/requester-common" "4.18.0" - "@algolia/requester-node-http" "4.18.0" - "@algolia/transporter" "4.18.0" + version "4.19.1" + resolved "https://registry.yarnpkg.com/algoliasearch/-/algoliasearch-4.19.1.tgz#18111fb422eaf841737adb92d5ab12133d244218" + integrity sha512-IJF5b93b2MgAzcE/tuzW0yOPnuUyRgGAtaPv5UUywXM8kzqfdwZTO4sPJBzoGz1eOy6H9uEchsJsBFTELZSu+g== + dependencies: + "@algolia/cache-browser-local-storage" "4.19.1" + "@algolia/cache-common" "4.19.1" + "@algolia/cache-in-memory" "4.19.1" + "@algolia/client-account" "4.19.1" + "@algolia/client-analytics" "4.19.1" + "@algolia/client-common" "4.19.1" + "@algolia/client-personalization" "4.19.1" + "@algolia/client-search" "4.19.1" + "@algolia/logger-common" "4.19.1" + "@algolia/logger-console" "4.19.1" + "@algolia/requester-browser-xhr" "4.19.1" + "@algolia/requester-common" "4.19.1" + "@algolia/requester-node-http" "4.19.1" + "@algolia/transporter" "4.19.1" ansi-align@^3.0.0, ansi-align@^3.0.1: version "3.0.1" @@ -2778,29 +2776,29 @@ babel-plugin-extract-import-names@1.6.22: dependencies: "@babel/helper-plugin-utils" "7.10.4" -babel-plugin-polyfill-corejs2@^0.4.4: - version "0.4.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz#9f9a0e1cd9d645cc246a5e094db5c3aa913ccd2b" - integrity sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA== +babel-plugin-polyfill-corejs2@^0.4.5: + version "0.4.5" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz#8097b4cb4af5b64a1d11332b6fb72ef5e64a054c" + integrity sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.4.1" - "@nicolo-ribaudo/semver-v6" "^6.3.3" + "@babel/helper-define-polyfill-provider" "^0.4.2" + semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz#d406c5738d298cd9c66f64a94cf8d5904ce4cc5e" - integrity sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ== +babel-plugin-polyfill-corejs3@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz#b4f719d0ad9bb8e0c23e3e630c0c8ec6dd7a1c52" + integrity sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.1" + "@babel/helper-define-polyfill-provider" "^0.4.2" core-js-compat "^3.31.0" -babel-plugin-polyfill-regenerator@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz#ace7a5eced6dff7d5060c335c52064778216afd3" - integrity sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw== +babel-plugin-polyfill-regenerator@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz#80d0f3e1098c080c8b5a65f41e9427af692dc326" + integrity sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA== dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.1" + "@babel/helper-define-polyfill-provider" "^0.4.2" bail@^1.0.0: version "1.0.5" @@ -2909,13 +2907,13 @@ braces@^3.0.2, braces@~3.0.2: fill-range "^7.0.1" browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.18.1, browserslist@^4.21.4, browserslist@^4.21.5, browserslist@^4.21.9: - version "4.21.9" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.9.tgz#e11bdd3c313d7e2a9e87e8b4b0c7872b13897635" - integrity sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg== + version "4.21.10" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.21.10.tgz#dbbac576628c13d3b2231332cb2ec5a46e015bb0" + integrity sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ== dependencies: - caniuse-lite "^1.0.30001503" - electron-to-chromium "^1.4.431" - node-releases "^2.0.12" + caniuse-lite "^1.0.30001517" + electron-to-chromium "^1.4.477" + node-releases "^2.0.13" update-browserslist-db "^1.0.11" buffer-from@^1.0.0: @@ -2987,17 +2985,17 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001503: - version "1.0.30001515" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz#418aefeed9d024cd3129bfae0ccc782d4cb8f12b" - integrity sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001464, caniuse-lite@^1.0.30001517: + version "1.0.30001519" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz#3e7b8b8a7077e78b0eb054d69e6edf5c7df35601" + integrity sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg== ccount@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.1.0.tgz#246687debb6014735131be8abab2d93898f8d043" integrity sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg== -chalk@^2.0.0: +chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -3320,21 +3318,21 @@ copy-webpack-plugin@^11.0.0: serialize-javascript "^6.0.0" core-js-compat@^3.31.0: - version "3.31.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.31.1.tgz#5084ad1a46858df50ff89ace152441a63ba7aae0" - integrity sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA== + version "3.32.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.32.0.tgz#f41574b6893ab15ddb0ac1693681bd56c8550a90" + integrity sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw== dependencies: browserslist "^4.21.9" core-js-pure@^3.30.2: - version "3.31.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.31.1.tgz#73d154958881873bc19381df80bddb20c8d0cdb5" - integrity sha512-w+C62kvWti0EPs4KPMCMVv9DriHSXfQOCQ94bGGBiEW5rrbtt/Rz8n5Krhfw9cpFyzXBjf3DB3QnPdEzGDY4Fw== + version "3.32.0" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.32.0.tgz#5d79f85da7a4373e9a06494ccbef995a4c639f8b" + integrity sha512-qsev1H+dTNYpDUEURRuOXMvpdtAnNEvQWS/FMJ2Vb5AY8ZP4rAPQldkE27joykZPJTe0+IVgHZYh1P5Xu1/i1g== core-js@^3.23.3: - version "3.31.1" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.31.1.tgz#f2b0eea9be9da0def2c5fece71064a7e5d687653" - integrity sha512-2sKLtfq1eFST7l7v62zaqXacPc7uG8ZAya8ogijLhTtaKNcpzpB4TMoTw2Si+8GYKRwFPMMtUT0263QFWFfqyQ== + version "3.32.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.32.0.tgz#7643d353d899747ab1f8b03d2803b0312a0fb3b6" + integrity sha512-rd4rYZNlF3WuoYuRIDEmbR/ga9CeuWX9U05umAvgrrZoHY4Z++cp/xwPQMvUpBB4Ag6J8KfD80G0zwCyaSxDww== core-util-is@~1.0.0: version "1.0.3" @@ -3595,13 +3593,20 @@ cytoscape-fcose@^2.1.0: cose-base "^2.2.0" cytoscape@^3.23.0: - version "3.25.0" - resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.25.0.tgz#5289e9d18be0293b073bfe93f83bb95b908b2dc1" - integrity sha512-7MW3Iz57mCUo6JQCho6CmPBCbTlJr7LzyEtIkutG255HLVd4XuBg2I9BkTZLI/e4HoaOB/BiAzXuQybQ95+r9Q== + version "3.26.0" + resolved "https://registry.yarnpkg.com/cytoscape/-/cytoscape-3.26.0.tgz#b4c6961445fd51e1fd3cca83c3ffe924d9a8abc9" + integrity sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w== dependencies: heap "^0.2.6" lodash "^4.17.21" +"d3-array@1 - 2": + version "2.12.1" + resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-2.12.1.tgz#e20b41aafcdffdf5d50928004ececf815a465e81" + integrity sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ== + dependencies: + internmap "^1.0.0" + "d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0: version "3.2.4" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-3.2.4.tgz#15fec33b237f97ac5d7c986dc77da273a8ed0bb5" @@ -3718,6 +3723,11 @@ d3-hierarchy@3: dependencies: d3-color "1 - 3" +d3-path@1: + version "1.0.9" + resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" + integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== + "d3-path@1 - 3", d3-path@3, d3-path@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526" @@ -3738,6 +3748,14 @@ d3-random@3: resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4" integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ== +d3-sankey@^0.12.3: + version "0.12.3" + resolved "https://registry.yarnpkg.com/d3-sankey/-/d3-sankey-0.12.3.tgz#b3c268627bd72e5d80336e8de6acbfec9d15d01d" + integrity sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ== + dependencies: + d3-array "1 - 2" + d3-shape "^1.2.0" + d3-scale-chromatic@3: version "3.0.0" resolved "https://registry.yarnpkg.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a" @@ -3769,6 +3787,13 @@ d3-shape@3: dependencies: d3-path "^3.1.0" +d3-shape@^1.2.0: + version "1.3.7" + resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.3.7.tgz#df63801be07bc986bc54f63789b4fe502992b5d7" + integrity sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw== + dependencies: + d3-path "1" + "d3-time-format@2 - 4", d3-time-format@4: version "4.1.0" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a" @@ -4059,10 +4084,10 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -dompurify@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.3.tgz#4b115d15a091ddc96f232bcef668550a2f6f1430" - integrity sha512-axQ9zieHLnAnHh0sfAamKYiqXMJAVwu+LM/alQ7WDagoWessyWvMSFyW65CqF3owufNu8HBcE4cM2Vflu7YWcQ== +dompurify@3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/dompurify/-/dompurify-3.0.5.tgz#eb3d9cfa10037b6e73f32c586682c4b2ab01fbed" + integrity sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A== domutils@^2.5.2, domutils@^2.8.0: version "2.8.0" @@ -4117,10 +4142,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.431: - version "1.4.459" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.459.tgz#25a23370f4ae8aaa8f77aaf00133aa4994f4148e" - integrity sha512-XXRS5NFv8nCrBL74Rm3qhJjA2VCsRFx0OjHKBMPI0otij56aun8UWiKTDABmd5/7GTR021pA4wivs+Ri6XCElg== +electron-to-chromium@^1.4.477: + version "1.4.488" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.488.tgz#442b1855f8c84fb1ed79f518985c65db94f64cc9" + integrity sha512-Dv4sTjiW7t/UWGL+H8ZkgIjtUAVZDgb/PwGWvMsCT7jipzUV/u5skbLXPFKb6iV0tiddVi/bcS2/kUrczeWgIQ== elkjs@^0.8.2: version "0.8.2" @@ -4367,9 +4392,9 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== fast-glob@^3.2.11, fast-glob@^3.2.9, fast-glob@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" - integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== + version "3.3.1" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4" + integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" @@ -5129,6 +5154,11 @@ inline-style-parser@0.1.1: resolved "https://registry.yarnpkg.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009" integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg== +internmap@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/internmap/-/internmap-1.0.1.tgz#0017cc8a3b99605f0302f2b198d272e015e5df95" + integrity sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw== + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" @@ -5188,10 +5218,10 @@ is-ci@^2.0.0: dependencies: ci-info "^2.0.0" -is-core-module@^2.11.0: - version "2.12.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" - integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== +is-core-module@^2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db" + integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ== dependencies: has "^1.0.3" @@ -5349,10 +5379,10 @@ isobject@^3.0.1: resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== -jest-util@^29.6.1: - version "29.6.1" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.1.tgz#c9e29a87a6edbf1e39e6dee2b4689b8a146679cb" - integrity sha512-NRFCcjc+/uO3ijUVyNOQJluf8PtGCe/W6cix36+M3cTFgiYqFOOW5MgN4JOOcvbUhcKTYVd1CvHz/LWi8d16Mg== +jest-util@^29.6.2: + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.6.2.tgz#8a052df8fff2eebe446769fd88814521a517664d" + integrity sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w== dependencies: "@jest/types" "^29.6.1" "@types/node" "*" @@ -5371,12 +5401,12 @@ jest-worker@^27.4.5: supports-color "^8.0.0" jest-worker@^29.1.2: - version "29.6.1" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.1.tgz#64b015f0e985ef3a8ad049b61fe92b3db74a5319" - integrity sha512-U+Wrbca7S8ZAxAe9L6nb6g8kPdia5hj32Puu5iOqBCMTMWFHXuK6dOV2IFrpedbTV8fjMFLdWNttQTBL6u2MRA== + version "29.6.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.6.2.tgz#682fbc4b6856ad0aa122a5403c6d048b83f3fb44" + integrity sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ== dependencies: "@types/node" "*" - jest-util "^29.6.1" + jest-util "^29.6.2" merge-stream "^2.0.0" supports-color "^8.0.0" @@ -5764,18 +5794,21 @@ merge2@^1.3.0, merge2@^1.4.1: integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== mermaid@^10.1.0: - version "10.2.4" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.2.4.tgz#3358adc61346ce51858b1b5b1078c20411efabdc" - integrity sha512-zHGjEI7lBvWZX+PQYmlhSA2p40OzW6QbGodTCSzDeVpqaTnyAC+2sRGqrpXO+uQk3CnoeClHQPraQUMStdqy2g== + version "10.3.0" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-10.3.0.tgz#45c1399fc8b95818822cbbd7b03a6093d15685a9" + integrity sha512-H5quxuQjwXC8M1WuuzhAp2TdqGg74t5skfDBrNKJ7dt3z8Wprl5S6h9VJsRhoBUTSs1TMtHEdplLhCqXleZZLw== dependencies: "@braintree/sanitize-url" "^6.0.2" + "@types/d3-scale" "^4.0.3" + "@types/d3-scale-chromatic" "^3.0.0" cytoscape "^3.23.0" cytoscape-cose-bilkent "^4.1.0" cytoscape-fcose "^2.1.0" d3 "^7.4.0" + d3-sankey "^0.12.3" dagre-d3-es "7.0.10" dayjs "^1.11.7" - dompurify "3.0.3" + dompurify "3.0.5" elkjs "^0.8.2" khroma "^2.0.0" lodash-es "^4.17.21" @@ -6142,7 +6175,7 @@ node-forge@^1: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== -node-releases@^2.0.12: +node-releases@^2.0.13: version "2.0.13" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d" integrity sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ== @@ -6764,9 +6797,9 @@ postcss-zindex@^5.1.0: integrity sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A== postcss@^8.3.11, postcss@^8.4.14, postcss@^8.4.17, postcss@^8.4.21: - version "8.4.25" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.25.tgz#4a133f5e379eda7f61e906c3b1aaa9b81292726f" - integrity sha512-7taJ/8t2av0Z+sQEvNzCkpDynl0tX3uJMCODi6nT3PfASC7dYCWV9aQ+uiCf+KBD4SEFcu+GvJdGdwzQ6OSjCw== + version "8.4.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.27.tgz#234d7e4b72e34ba5a92c29636734349e0d9c3057" + integrity sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ== dependencies: nanoid "^3.3.6" picocolors "^1.0.0" @@ -7162,15 +7195,15 @@ regenerate@^1.4.2: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== -regenerator-runtime@^0.13.11: - version "0.13.11" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" - integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== -regenerator-transform@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.1.tgz#f6c4e99fc1b4591f780db2586328e4d9a9d8dc56" - integrity sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg== +regenerator-transform@^0.15.2: + version "0.15.2" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4" + integrity sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg== dependencies: "@babel/runtime" "^7.8.4" @@ -7311,11 +7344,11 @@ resolve-pathname@^3.0.0: integrity sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng== resolve@^1.1.6, resolve@^1.14.2, resolve@^1.3.2: - version "1.22.2" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" - integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== + version "1.22.4" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34" + integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg== dependencies: - is-core-module "^2.11.0" + is-core-module "^2.13.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" @@ -7929,9 +7962,9 @@ terser-webpack-plugin@^5.3.3, terser-webpack-plugin@^5.3.7: terser "^5.16.8" terser@^5.10.0, terser@^5.16.8: - version "5.19.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.0.tgz#7b3137b01226bdd179978207b9c8148754a6da9c" - integrity sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q== + version "5.19.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.19.2.tgz#bdb8017a9a4a8de4663a7983f45c506534f9234e" + integrity sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA== dependencies: "@jridgewell/source-map" "^0.3.3" acorn "^8.8.2" @@ -8011,9 +8044,9 @@ ts-dedent@^2.2.0: integrity sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ== tslib@^2.0.3, tslib@^2.1.0, tslib@^2.4.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" - integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== + version "2.6.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.1.tgz#fd8c9a0ff42590b25703c0acb3de3d3f4ede0410" + integrity sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig== type-fest@^0.20.2: version "0.20.2" @@ -8446,9 +8479,9 @@ webpack-sources@^3.2.2, webpack-sources@^3.2.3: integrity sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w== webpack@^5.73.0: - version "5.88.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.1.tgz#21eba01e81bd5edff1968aea726e2fbfd557d3f8" - integrity sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ== + version "5.88.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-5.88.2.tgz#f62b4b842f1c6ff580f3fcb2ed4f0b579f4c210e" + integrity sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ== dependencies: "@types/eslint-scope" "^3.7.3" "@types/estree" "^1.0.0" From 2f1621c2fc2449745674ca404a43f7445066d4a8 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 11 Aug 2023 03:53:46 -0400 Subject: [PATCH 530/665] Update index.md (#1903) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index cfd8326f063..a99ec71b182 100644 --- a/applications/index.md +++ b/applications/index.md @@ -136,7 +136,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☒ | ☐ | -| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☐ | +| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer](hybrid.md) | [GitHub](https://github.com/acuity-social) | ☐ | ☒ | ☒ | | [ParaSpell](https://github.com/paraspell) | [ParaSpell_Follow Up 2](ParaSpell_follow-up2.md) | [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | | [justmert](https://github.com/justmert) | [PolkaFlow](polkaflow.md) | [GitHub](https://github.com/justmert) | ☐ | ☒ | ☒ | | [BelSoft](https://www.belsoft.rs) | [Diffy messenger](Diffy_chat.md) | [GitHub](https://github.com/1db1) | ☐ | ☒ | ☒ | From 8130fab75a62370f6dbf837b126a8a8f8753594d Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 11 Aug 2023 09:26:33 -0300 Subject: [PATCH 531/665] Update index.md (#1905) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a99ec71b182..ac3b86b56cb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -48,7 +48,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Starks](https://github.com/tur461) | [XCM tool for NFTs](./xNFT.md) | [GitHub](https://github.com/tur461) | ☐ | ☐ | ☐ | | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | -| [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☐ | ☐ | +| [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☒ | ☐ | | [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | | [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [On-Chain Automated Treasury Management](./centrifuge-twamm.md) | [GitHub](https://github.com/centrifuge) | ☐ | ☐ | ☐ | From 3d54afdb23b3fe392db5d6953bb87478b9137202 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 11 Aug 2023 16:17:09 +0200 Subject: [PATCH 532/665] Update application-template.md Stop terminating people --- applications/application-template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/application-template.md b/applications/application-template.md index 57087dad840..bd01ca873c0 100644 --- a/applications/application-template.md +++ b/applications/application-template.md @@ -108,7 +108,7 @@ This section should break the development roadmap down into milestones and deliv Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We _recommend_ that teams structure their roadmap as 1 milestone ≈ 1 month. -> :exclamation: If any of your deliverables is based on somebody else's work, make sure you work and publish _under the terms of the license_ of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Teams that submit others' work without attributing it will be immediately terminated.** +> :exclamation: If any of your deliverables is based on somebody else's work, make sure you work and publish _under the terms of the license_ of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Projects that submit other people's work without proper attribution will be immediately terminated.** ### Overview From 8504089cd7ec531282ca8251303f50bf1d687784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 14 Aug 2023 22:43:15 +0200 Subject: [PATCH 533/665] Update README.md Add Nikhil --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 41719ccf59d..dc3e8fce4b3 100644 --- a/README.md +++ b/README.md @@ -107,6 +107,7 @@ Evaluators are individuals able to evaluate the technology delivered as a result - [Diogo Mendonça](https://github.com/dsm-w3f) - [Sebastian Müller](https://github.com/semuelle) - [Keegan Quigley](https://github.com/keeganquigley) +- [Nikhil Ranjan](https://github.com/nikw3f) - [Seraya Takahashi](https://github.com/takahser) #### W3F Operations Team From 1ef05c190359d9e83a91edf76379380caa9f6df4 Mon Sep 17 00:00:00 2001 From: Daniel Leping Date: Tue, 15 Aug 2023 13:46:11 +0100 Subject: [PATCH 534/665] Tesseract dApps/Wallet integration native mobile libraries proposal (#1856) --- ...let_integration_native_mobile_libraries.md | 308 ++++++++++++++++++ 1 file changed, 308 insertions(+) create mode 100644 applications/dapp_wallet_integration_native_mobile_libraries.md diff --git a/applications/dapp_wallet_integration_native_mobile_libraries.md b/applications/dapp_wallet_integration_native_mobile_libraries.md new file mode 100644 index 00000000000..ebff0154557 --- /dev/null +++ b/applications/dapp_wallet_integration_native_mobile_libraries.md @@ -0,0 +1,308 @@ +# Tesseract dApps/Wallet integration native mobile libraries + +- **Team Name:** Tesseract +- **Continuation of:** [mobile dApps/Wallet Connection](https://github.com/w3f/Grants-Program/pull/508) + +### Overview + +This is a follow-up grant proposal aiming to reduce the integration barriers of the mobile dApp/Wallet integration protocol built during the [previous grant](https://github.com/w3f/Grants-Program/pull/508). + +Tesseract dApp/Wallet integration protocol implemented in our [previously finished grant](https://github.com/w3f/Grants-Program/pull/508) provides excellent UX enhancement capabilities to the Polkadot Substrate ecosystem. Its current version allows native mobile applications to request public keys and transaction signatures through seamless integration with any Tesseract-compatible wallet installed on the same smartphone. You can see the **Polkadoot dApp interacting with a wallet** demo here: . + +The version released during the previous grant is an excellent achievement for Tesseract. It is the first step toward implementing Tesseract’s full potential. Ultimately, we aim to make Tesseract a universal go-to dApp/Wallet integration solution capable of handling any scenario using the shortest peer-to-peer communication path. You can read more about it in detail in one of our articles: [Why do we need better dApp/Wallet connectors?](https://medium.com/@dileping/why-do-we-need-better-dapp-wallet-connectors-and-how-did-we-come-up-with-the-tesseract-protocol-987ce0e8a1ab) + +To achieve such an ambitious goal, we need to cover two main areas of improvement: + +1. Allow Tesseract to cover more use cases: add desktop dApps connectivity, ability to work with dApps running in browsers, etc. +2. Provide the dApp and Wallet developers with a way to integrate Tesseract as easily as it can get. + +Even though covering more use cases ASAP sounds tempting, we believe that the UX improvements Tesseract’s current version brings to the Substrate community already provide enough value by itself to focus on and implement an easy way for the dApps and wallets to integrate Tesseract - a set of native libraries (Swift and Kotlin), that allows using Tesseract no harder than any native library the developers are used to. + +### Why are the Tesseract native libraries necessary? + +iOS and Android provide their developers with native programming languages, which are the standard for the platforms: Swift and Kotlin, respectively. + +In contrast, Tesseract is built in Rust for its reliability, robustness, and cross-platform nature. While providing a lot of pros, Rust is quite hard and cumbersome to integrate into a mobile app (dApp or Wallet) and requires a lot of knowledge and effort, which is a significant barrier to Tesseract integration. + +To counteract this barrier, we propose to build Swift and Kotlin native libraries that wrap all the complexity of Rust integration under the hood and provide the dApp and Wallet developers with easy and familiar native APIs that require no more effort than any other mobile library. + +This way, we reduce the integration barrier to the minimum, allowing Tesseract to participate in Polkadot/Substrate community without bearing any additional complexity for the developer. + +### What about cross-platform mobile apps (React Native, Flutter, etc.)? + +Cross-platform mobile frameworks, such as React Native and Flutter, are popular among mobile developers. Providing libraries for these frameworks is definitely planned. + +However, building a library for such a cross-platform framework is done via Swift/Kotlin bridges. This means that to build the APIs for the cross-platform frameworks, we first need to implement Swift/Kotlin Tesseract libraries. It’s an unavoidable prerequisite. + +We are approaching the infrastructure around Tesseract in stages. Even though we would love to have React Native and Flutter asap, to avoid the grant bloating, we narrowed the scope down to Swift/Kotlin, which provides significant value by itself, allowing non-cross-platform developers to benefit from Tesseract while being a prerequisite step for cross-platform libraries development anyhow. React Native and Flutter are the next step. + +### Native Libraries APIs + +In total, there are four sets of APIs of Tesseract libraries to work on: + +1. Android dApp side +2. Android Wallet side +3. iOS dApp side +4. iOS Wallet side + +Each of the sides requires several rust libraries to be wrapped: + +1. Tesseract itself +2. IPC transport +3. Test protocol +4. Substrate protocol + +For the sake of simplicity, we will not list all the objects and methods here but rather provide examples of how native mobile developers can use Tesseract. + +We aim to make the APIs as simple as we managed to do in Rust and keep them as similar among the platforms as possible. Even though implementing the bridges is not a trivial process and is a lot of interop code, the libraries’ “frontend” APIs still can be very easy and intuitive. Let’s jump straight to it. + +#### dApp Side + +Let’s start with some code examples we have in Rust. Here is how one would initialize Tesseract and request an account from the wallet in Rust on the dApp side: + +```rust +let polkadot_wallet_service = Tesseract::new(Arc::new(delegate)) + .transport(TransportIPCAndroid::new(&env, application)) + .service(Substrate::Protocol); + + +let account = Arc::clone(&polkadot_wallet_service).get_account(AccountType::Sr25519).await?; +``` + +In iOS, it can look something like this: + +```swift +let polkadotWalletService = Tesseract(delegate: delegate) + .transport(IPCTransportIOS()) + .service(protocol: .polkadot) + + +let account = try await polkadotWalletService.getAccount() +``` + +And here is an example for Android: + +```kotlin +val polkadotWalletService = Tesseract(delegate) + .transport(TransportIPC(application)) + .service(Protocol.Polkadot) + +val account = polkadotWalletService.getAccount().await() +``` + +#### Wallet Side + +While the dApp APIs are typical for client-side APIs, the wallet-side APIs resemble some service implementation closely (i.e., a web service or an RPC). Here is how it works in Rust (an example is taken from the Developer Wallet): + +```rust +let ipc = Transport::default(&env)?; +let tesseract = Tesseract::new() + .transport(ipc) + .service(TestService::new(...)) + .service(SubstrateService:new(...)); +``` + +Also, `TestService` and `SubstrateService` are classes implementing a certain interface (separate for each) that defines how exactly the wallet should reply to the public key and transaction signature requests. Here are the Rust interface implementations: + +```rust +impl tesseract::service::Service for TestService { + type Protocol = Test; + + fn protocol(&self) -> &Test { + &Test::Protocol + } + + + fn to_executor(self) -> Box { + Box::new(tesseract_protocol_test::service::TestExecutor::from_service(Self)) + } +} +``` + +```rust +#[async_trait] +impl tesseract_protocol_test::TestService for TestService { + async fn sign_transaction(self: Arc, req: &str) -> tesseract::Result { + //implementation code goes here + } +} +``` + +The implementation of the Polkadot Service is going to be fairly similar, just different methods (Polkadot specific): + +```rust +#[async_trait] +impl tesseract_protocol_substrate::SubstrateService for SubstrateService { + async fn get_account(self: Arc, account_type: AccountType) -> tesseract::Result { + //implementation code goes here + } + + async fn sign_transaction(self: Arc, account_type: AccountType, account_path: &str, extrinsic_data: &[u8], extrinsic_metadata: &[u8], extrinsic_types: &[u8]) -> tesseract::Result> { + //implementation code goes here + } +} +``` + +Such an API implementation approach is pretty straightforward for both Swift and Kotlin. The initialization is a simple builder pattern, and the Rust’s traits here can be replaced with the protocols and interfaces of Swift and Kotlin 1:1 in this case. We are not providing additional examples here to keep the proposal concise, as we believe they are redundant for the wallet example due to its trivial outer API. + +### Feasibility + +All the APIs in the examples are tested to be achievable with the mock objects. The feasibility of creating such bridges was tested while creating the mobile demo applications and the Developer Wallet for the previous grant. + +## Team :busts_in_silhouette: + +### Team members + +- Daniel Leping, @dileping on GitHub, CEO +- Yehor Popovych, @ypopovych on GitHub, CTO + +### Contact + +- **Contact Name:** Daniel Leping +- **Contact Email:** +- **Website:** + +### Legal Structure + +- **Registered Address:** 251 Little Falls Drive, Wilmington, New Castle County, Delaware 19808-1674, USA +- **Registered Legal Entity:** Tesseract Systems, Inc. + +### Team's experience + +Our team has been building blockchain applications since 2017 and has worked together on Tesseract since 2018. The company got funded by SOSV and Emurgo in 2019 and took training in the dLab acceleration program. + +This is our third grant application for W3F. Previously, we were awarded to build [Polkadot/Substrate Swift SDK](https://github.com/w3f/General-Grants-Program/pull/333) and the initial grant of [Tesseract dApp/Wallet integration protocol](https://github.com/w3f/Grants-Program/pull/508). + +Prior to blockchain technology, we had a wealth of experience in building mobile applications and middleware, among which the most noticeable projects are: Swift Express and Reactive Swift. + +The team has a 10-year history of working together, delivering various solutions of high complexity, including the mentioned above Swift Express and Reactive Swift, Cross++ ( cross-platform framework in C++ that allowed to keep the app logic shared while providing the capability to use native UIs) and tens of the web, mobile, and server applications for customers from around the world including the US, EU, Israel, Australia, etc. + +### Team Code Repos + +- - current main repo + +#### Notable past open-source repos + +- +- + +#### Teams' github profiles + +- +- + +### Team LinkedIn Profiles + +- +- + +## Development Roadmap :nut_and_bolt: + +### Roadmap Overview + +The development is split into four equal milestones, each covering client or wallet-side APIs in Kotlin or Swift. This split allows us to focus on a particular library at a time and achieve tangible and easily verifiable goals with each milestone. + +- **Total Estimated Duration:** 16 weeks +- **Full-Time Equivalent (FTE):** 2 + +### Milestone 1: Wallet-side Library in Kotlin (Android) + +- **Estimated duration:** 4 weeks +- **FTE:** 2 + +A library in Kotlin, wrapping the wallet-side Tesseract rust implementation. Provides Android Wallet developers with native Kotlin APIs of Tesseract. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to integrate Tesseract into a Wallet. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Due to the client-side nature of the deliverable, there is no need for a docker image. | +| 0e. | Article | We will publish an article that explains how Tesseract makes dApps better and how to enable Tesseract protocol support in a Polkadot wallet for Android. | +| 1. | Wallet-side Android library | The library provides Kotlin APIs for Tesseract's wallet-side | +| 2. | Wallet-side IPC wrapper for Android | Kotlin wrapper for the wallet side of Android IPC transport | +| 3. | Wallet-side of the Test protocol in Kotlin | Kotlin API for the wallet side of Tesseract Test protocol | +| 4. | Wallet-side of the Substrate protocol in Kotlin | Kotlin API for the wallet side of Tesseract Substrate protocol | +| 5. | Android demo Wallet | A demo wallet that demonstrates the Kotlin APIs usage | + +### Milestone 2: Wallet-side Library in Swift (iOS) + +- **Estimated duration:** 4 weeks +- **FTE:** 2 + +A library in Swift, wrapping the wallet-side Tesseract rust implementation. Provides iOS Wallet developers with native Swift APIs of Tesseract. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to integrate Tesseract into a Wallet. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Due to the client-side nature of the deliverable, there is no need for a docker image. | +| 0e. | Article | We will publish an article that explains how Tesseract makes dApps better and how to enable Tesseract protocol support in a Polkadot wallet for iOS. | +| 1. | Wallet-side iOS library | The library provides Swift APIs for Tesseract's wallet-side | +| 2. | Wallet-side IPC wrapper for iOS | Swift wrapper for the wallet side of iOS IPC transport | +| 3. | Wallet-side of the Test protocol in Swift | Swift API for the wallet side of Tesseract Test protocol | +| 4. | Wallet-side of the Substrate protocol in Swift | Swift API for the wallet side of Tesseract Substrate protocol | +| 5. | iOS demo Wallet | A demo wallet that demonstrates the Swift APIs usage | + +### Milestone 3: Client-side library in Kotlin (Android) + +- **Estimated duration:** 4 weeks +- **FTE:** 2 + +A library in Kotlin, wrapping the client-side Tesseract rust implementation. Provides Android dApp developers with native Kotlin APIs of Tesseract. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to integrate Tesseract into a dApp. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Due to the client-side nature of the deliverable, there is no need for a docker image. | +| 0e. | Article | We will publish an article that explains how Tesseract makes dApps better and how to integrate it into a Polkadot dApp on Android. | +| 1. | Client-side Android library | The library provides Kotlin APIs for Tesseract's client-side | +| 2. | Client-side IPC wrapper for Android | Kotlin wrapper for the dApp side of Android IPC transport | +| 3. | Client-side of the Test protocol in Kotlin | Kotlin API for the dApp side of Tesseract Test protocol | +| 4. | Client-side of the Substrate protocol in Kotlin | Kotlin API for the dApp side of Tesseract Substrate protocol | +| 5. | Android demo dApp | A demo application that demonstrates the Kotlin APIs usage | + +### Milestone 4: Client-side library in Swift (iOS) + +- **Estimated duration:** 4 weeks +- **FTE:** 2 + +A library in Swift, wrapping the client-side Tesseract rust implementation. Provides iOS dApp developers with native Swift APIs of Tesseract. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how to integrate Tesseract into a dApp. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | Due to the client-side nature of the deliverable, there is no need for a docker image. | +| 0e. | Article | We will publish an article that explains how Tesseract makes dApps better and how to integrate it into a Polkadot dApp on iOS. | +| 1. | Client-side iOS library | The library provides Swift APIs for Tesseract's client-side | +| 2. | Client-side IPC wrapper for iOS | Swift wrapper for the dApp side of iOS IPC transport | +| 3. | Client-side of the Test protocol in Swift | Swift API for the dApp side of Tesseract Test protocol | +| 4. | Client-side of the Substrate protocol in Swift | Swift API for the dApp side of Tesseract Substrate protocol | +| 5. | iOS demo dApp | A demo application that demonstrates the Swift APIs usage | + +## Future Plans + +As mentioned initially, we aim to make Tesseract a **universal go-to dApp/Wallet integration solution**. We approach the development of Tesseract step-by-step, with each additional step bringing a significant concrete value to the ecosystem. + +The most critical areas we plan to cover are: + +1. Simplifying the integration of Tesseract for various development platforms by providing more and more libraries for various platforms (JS, Flutter, etc.) +2. Cover more use cases. Due to its robust and flexible core, Tesseract is extremely extendible, allowing us to aim for a universal dApp/Wallet integration solution as the ultimate goal. With its first two implemented connectors (mobile IPC for iOS and Android), Tesseract proves its capabilities to provide first-class seamless integration for mobile dApps. Soon, we will release more connectors (Bluetooth, NFC, QR, etc.), allowing more dApps to benefit from our seamless wallet integration. Desktop, Web, and more kinds of dApps will be provided with a seamless wallet integration in the near future. + +## Conclusion :heavy_plus_sign: + +Thanks to the support of the Web3 Foundation, the first version of the Tesseract universal dApp/Wallet integration protocol was built and released successfully. Though, to start providing value to the Polkadot/Substrate community, we need to lower the current technical integration barriers imposed by the fact that Tesseract is built with Rust, which is hard and labor-intensive to integrate into mobile dApps and Wallets. To eliminate this, we propose to build a set of native Swift and Kotlin libraries that wrap Tesseract’s Rust implementation under the hood and provide mobile developers with a straightforward way to integrate Tesseract within minutes, thus significantly improving the UX of mobile dApps within Polkadot/Substrate ecosystem. + +## Some links for reference + +- Github: +- Original grant proposal: +- Demo video: + +- Developer wallet (for Tesseract-compatible dApps testing): +- Polkadot dApp example: From f146758f3aff96d47061ae9d5a5f2388903458fe Mon Sep 17 00:00:00 2001 From: Kotenko Nikolay Date: Tue, 15 Aug 2023 17:08:12 +0300 Subject: [PATCH 535/665] P2P data platform proposal (#1866) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Create data_platform_with_deep_indexed_data_and_staking_reports * Rename data_platform_with_deep_indexed_data_and_staking_reports to data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md Co-authored-by: Sebastian Müller * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md * Update data_platform_with_deep_indexed_data_and_staking_reports.md --------- Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: Sebastian Müller --- ...h_deep_indexed_data_and_staking_reports.md | 243 ++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 data_platform_with_deep_indexed_data_and_staking_reports.md diff --git a/data_platform_with_deep_indexed_data_and_staking_reports.md b/data_platform_with_deep_indexed_data_and_staking_reports.md new file mode 100644 index 00000000000..1096c774403 --- /dev/null +++ b/data_platform_with_deep_indexed_data_and_staking_reports.md @@ -0,0 +1,243 @@ +# Polkadot Data platform with deep indexed data and staking reports + +- **Team Name:** [P2P.ORG](http://p2p.org/) Validator +- **Payment Address:** 0xE22211Ba98213c866CC5DC8d7D9493b1e7EFD25A (USDC) +- **Level:** 2 + +## Project Overview :page_facing_up: + +Current proposal is the solution from [P2P.org](http://P2P.org) for the problem described in [Analytics Website/Data Platform](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/analysis-website-and-data-platform.md) RFP. + +### Overview and Ecosystem Fit + +Implementation of the data-driven culture was a huge boosting for web2 which allowed the fin-tech industry to speed up the decision-making and the development of new products, also decrease the financial fraud and provide flexible risk-management. + +Dune analytics success and arising 15+ Dune-like platforms are the evidence that data analysis tools are especially acute for web3 today and the demand for community driven data insights continue to grow. + +[P2P.org](http://P2P.org) is one of the biggest validators that is participate in more than 40 POS chains. That is why the need of data, monitoring, performance analysis are the core problems in decision making for us. We’ve started to develop our data function from using external platforms such as Dune but soon we found out that there is no such platform or platforms that could help with even the most common challenges according to data needs: + +- **data covering**: no Polkadot data and off-chain data about deFi protocols such as Chainlink; +- **absent of the streaming** doesn’t allow to receive the data close-to-real time which makes it unacceptable for pro-reactive tasks such as performance monitoring; +- **threshold for entering analytics**: we have high skilled data analyst who can work with any data but for business people it is impossible to get answer about new metric very quick. + +Solving these problem internally we understood that our experience and data insights could be helpful for crypto community, especially in new projects such as new cosmos chains where there are not so many users and the economy has just started to evolve. We can help new project with data-driven shilling and go deeper with data-analysis in the chains that we already covered by existing data platforms. + +According the web3 fund need from RFP Polkadot ecosystem needs: + +- extract on-chain data and transform it to be available for SQL querying by data analysts +- provide public access through query engine to build data sets on-top of indexed data +- provide UI interface for building dashboards on-top of data sets to visualize data insights for decision makers + +We saw some teams that already building such solutions for the RFP and want to describe our key features which could provide the best user experience according to our vision: + +- modular architecture allows you + - to use any indexer such as Subsquid, Subquery or custom indexer (Mbelt in [P2P.org](http://P2P.org) case) + - to use any database as a DWH for storing public data (in current RFP we will use BigQuery as DWH) + - to customize ETL process for any indexer/DWH solution via [Airflow](https://airflow.apache.org/) DAGs + - to customize the solution for real-time data enrichment process via direct streaming to DWH +- dashboard with sli/slo for data quality of ETL pipeline - we provide transparent and clear data quality metrics to estimate the quality of ETL +- [P2P.org](http://P2P.org) infrastructure (P2P RPC for indexation) + +### Potential users + +We define the users of the platform as data people who generates insights from the data to support data-driven base for decision makers. These people have: + +- tech skills to write SQL queries +- basic statistics to define calculate and estimate metrics for the business +- expertise of the particular domain (such as NFT, particular deFi) + +Current state of Dune platform (as the Leader of the market) is about 20k users. Dune is focusing on Ethereum data and DeFi in Ethereum ecosystem. Current number of active wallets in Ethereum is 400k. So, we see that current state of the crypto industry demonstrates a high proportion of data-people to all token holders with is 5%. + +We believe that in case of mass adoption we will not see this proportion but we need to involve more people still. Our global vision for this problem is to provide ability to work with the data without SQL knowledge. That is why we develop Kolmo - AI assistant. + +![](https://github.com/bigslimdogg/web3_pic/blob/3a0406565507ada022e57797adf8258edf1e50e3/ai_assistant.png) + +Our concern is that we can first attract users from the Polkadot ecosystem, which hasn’t been covered by the current data-platforms. After that we are going to provide an innovative opportunity to enter in data-driven decisions without SQL skills. + +**Free usage** + +The only limitation for all users is number of TB for free executing of SQL query. We would be able to charge users for executing more data. + +### Project Details + +We already mentioned modular architecture as key feature of the solution. The next chapter will describe it deeply. + +**Modular architecture** + +![](https://github.com/bigslimdogg/web3_pic/blob/3a0406565507ada022e57797adf8258edf1e50e3/architecture.png) + +Indexing & ETL module consist of: + +- indexer which is Software to extract the data +- orchestration service: you can use any source to receive the data from RPC and write it to any DWH + +DWH module is analytical data base which stores all the data and provides public access. It consist of: + +- raw layer which is simply the response from indexer - structured/decoded data from RPC nodes +- domain layer which is the reports and data-marts that were written by the users. By default we would provide the “staking domain data” with the data marts about staking + +UI module consist of forking existing BI tool with the ability: + +- get access to DWH data (both layers) +- interface to write the query +- execute the SQL statement +- save and store SQL statements (provided by users manually) to use it for visualizing +- BI interface to build charts and dashboards on-top of DWH data + +**Tech stack** + +| module | component | solution | tech stack | comment | +| --- | --- | --- | --- | --- | +| Indexing & ETL | indexer | Mbelt | js | We already develop the indexer for web3 RFP. It can extract all data like Subquery but more over it can extract data about staking process. +We also share sli/slo for indexer and our experience showed that currently it is the best solution according to data quality and flexible enough to support custom needs like staking. | +| | orchestration | [Airflow](https://airflow.apache.org/) | python | flexible, popular ETL orchestration | +| DWH | raw layer + domain layer | bigQuery | cloud sql | current solution is DWH agnostic but we are using bigQuery | +| UI | forked BI tool | forking [Superset](https://github.com/apache/superset) | - backend: python +- frontend: rest | - auth in the box +- already has all functions to write, save, execute query and build dashboards +- open-source +- flexible role-model +- audit of logs for security +- ability to make dashboards public | + +**Data schema** + +Raw layer (indexer’s data) which is MBELT data scheme described here: https://github.com/p2p-org/polkadot-profit-transformer/blob/main/db/000001_init.sql + +The solution comes with the second layer of data which is data marts layer. + +There are two ways to create report based on raw layer: + +- via BI where the query will be store as request to DWH +- PR with data mart that should be re-calculated every time + +Second option is for popular/the most important reports which are accepted by admin users (p2p.org DWH team). + +Initially the solution will contain reports about staking in Polkadot/Kusama/Evm parachains: + +- active set of validators per epoch +- stake amount between nominator and validator for every epoch +- total validator stake per epoch +- the validator commission for all active validators +- the public identity of validator +- the rewards (tokens, rewards points) earned by nominator with particular validator per epoch +- total rewards (tokens, rewards points) earned by nominator per epoch +- total rewards (tokens, rewards points) earned by validator per epoch +- ability to calculate APR/APY on top of this reports + +**Data quality** + +Polkadot SLI (based on history for internal consumption): + +- Block processing mean time: 1073 msec (min - 238 msec, max- 35 sec) +- Mean latency between block in RPC node to block in database: ~ 18 сек (min - 13 sec, max 99 sec) +- Blocks processed correctly in first attempt (others are fixed automatically): ~ 99% +- Staking SLI: 100% (no problems detected) + +Parachains sli: + +- Block processing mean time: 914 msec (min - 81 msec, max- 98 sec) +- Mean latency between block in RPC node to block in database: ~ 95 сек (min - 12 sec, max 240 sec) +- Blocks processed correctly in first attempt (others are fixed automatically) ~ 96% +- Staking SLI: 95% + +We also have an SLI [dashboard here](https://reports.p2p.org/superset/dashboard/124/?native_filters_key=hx3xwFAW7LaoWw6vWbB6eY7JD3BOjObbcgnwy_BkExJw20nkHu2NtfTYLkDe22Kl), but thresholds used in this dashboard were set by internal team and could be different for final public solution. + +## Team :busts_in_silhouette: + +### Team members + +- Developers: + - Ivan Safronov (developer of Mbelt) + - Artem Kiselev (team lead of indexation team in P2P.org) +- DWH engineers: + - Kovalev German - (data engineer) + - Kamalov Sergey (team lead of DWH team in P2P.org) +- Product owner: Kotenko Nick + +### Team Code Repos + +Indexer: [Mbelt](https://github.com/p2p-org/polkadot-profit-transformer/tree/mbelt3/prod) + +Public DWH: “p2p-data-platform” in bigQuery you can find in public access though bigQ console + +### Team's experience + +We believe that proposed product can bring not only a new user experience for validators and NO managers but also provide true decentralization with the performance improvement. P2P.org has long-term experience in more then 25 blockchains since 2018. We can bring the high level expertise to help new participants perform better by providing recommendations on-top of the core solution. + +Our data chapter is successfully implementing data-driven culture in [P2P.org](http://P2P.org) during 2 years. + +1. Our developers have vast experience in data-indexation ([Mbelt](https://github.com/p2p-org/polkadot-profit-transformer/tree/mbelt3/prod), Cosmos chains indexer for Agoric); +2. Data engineers support external and internal solutions for Data warehouse with more than 200 TB of on-chain data; +3. Data analyst with developers are finishing new stacking flow solution with Delegators’s custom dashboards which are build on-top of DWH. + +### Contact + +- **Contact Name:** Nick Kotenko +- **Contact Email:** [nikolay.kotenko@p2p.org](mailto:nikolay.kotenko@p2p.org) +- **Website:** [p2p.org](http://p2p.org/) + +## Development Status :open_book: + +Current solution from [P2P.org](http://P2P.org) has already implemented: + +- mbelt indexer as open-source solution +- private Polkadot datasets +- private [Superset](https://github.com/apache/superset) without public user’s access and public auth +- dashboard with sli/slo for ETL of the platform + +We suggest proposal with 1 milestone to: + +1. copy Mbelt data (raw indexed data) to public +2. provide public dataset about staking (example user’s domain data/reports) +3. fork [Superset](https://github.com/apache/superset) for public usage +4. provide staking dashboards (example user’s domain data/reports) +5. wrapping to end-2-end open-source solution: indexer deploy + orchestration + DWH connector + BI tool + +### Overview + +- **Total Estimated Duration:** 1.5 month +- **Full-Time Equivalent (FTE):** 200 FTE hours [100 USD/hr] +- **Total Costs:** $20,000 + +### Milestone 1 — Forked Superset with indexed data + +- **Estimated duration:** 1.5 month +- **FTE:** 3.5 +- **Costs:** 20,000 USD + + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide a documentation page about how to launch docker’s files for ETL (indexer + orchestration), DWH connection, launching UI (BI tool). | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to run indexer locally, set up data base (DWH), and run BI. | +| 1. | Develop the ETL component | The result of developing ETL component contains the docker with Mbelt (indexer) and [Airflow](https://airflow.apache.org/) with DAGs to write indexer’s output into DWH (data base). | +| 2. | Publish DWH data | Our goal for publishing data is: providing raw (indexer’s data) data into public bigQ project with the ability to query and use this data for public users. The chains are Polkadot, Kusama, EVM parachains. We would also provide reports about staking on top of raw data in chains above. The additional result is SLI/SLO dashboard of ETL process to provide more transparency for users. | +| 3. | Forking [Superset](https://github.com/apache/superset) | Forking Superset will allow us to modify sign-in page to provide new users to join. We will make some changes on UI side to improve user’s experience such as: Main page modifications to make it dash-oriented, Dashboard tab & Chart tab modification to provide user-friendly filters, SQL lab tab modification to make it more useful to search for sources, User’s settings modification to exclude useless bottoms | + + +## **Future plans** + +The functionality that we want to test and implement out of scope the RFP development: + +- materialized views for user +- upload user’s off-chain data +- anchor modeling as data layer for analysts +- AI assistant implementation (closed-source) +- community driven fine-tuning of the AI assistant + +## **Referral Program (optional) 💰** + +Not applicable**** + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website and previous grants: [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md) + +**How did you hear about the Grants Program?** + +Web3 Foundation Website and previous grants: [Multiblockchain ETL](https://github.com/w3f/General-Grants-Program/blob/master/grants/speculative/Multiblockchain%20ETL.md) From 6a68afa5729c619707fda0c100fbce3bd27d8b8a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 15 Aug 2023 16:10:28 +0200 Subject: [PATCH 536/665] Update index.md Add P2P --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index ac3b86b56cb..c083904e114 100644 --- a/applications/index.md +++ b/applications/index.md @@ -55,6 +55,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [AISLAND DAO](https://aisland.io) | [Aisland Docsig](./Aisland-DocSig.md) | [GitHub](https://github.com/aisland-dao) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [Storage solution on Polkadot](./Eiger_Storage_on_Polkadot_1.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang Playground](Solang_Playground.md) | [GitHub](https://github.com/salaheldinsoliman) | ☐ | ☐ | ☐ | +| [P2P.ORG](http://p2p.org/) | [P2P data platform](data_platform_with_deep_indexed_data_and_staking_reports.md) | [GitHub](https://github.com/p2p-org) | ☐ | ☐ | ☐ | [🔝](#2023) From e5c35d704f63f59f2cb69b46762a6033b4559444 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 16 Aug 2023 09:24:39 +0200 Subject: [PATCH 537/665] Update semver --- package.json | 3 +++ yarn.lock | 12 +----------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index bfb4c80ba38..716100c6219 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,9 @@ "react-dom": "^18.2.0", "url-loader": "^4.1.1" }, + "resolutions": { + "semver": "^7.5.4" + }, "browserslist": { "production": [ ">0.5%", diff --git a/yarn.lock b/yarn.lock index 872a8581923..3c76bd6bc6c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7513,17 +7513,7 @@ semver-diff@^3.1.1: dependencies: semver "^6.3.0" -semver@^5.4.1: - version "5.7.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" - integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== - -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1: - version "6.3.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" - integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== - -semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8: +semver@^5.4.1, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0, semver@^6.3.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.7, semver@^7.3.8, semver@^7.5.4: version "7.5.4" resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== From 4405b7f0208105d572fa50f1963e80275942c160 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 16 Aug 2023 09:45:28 +0200 Subject: [PATCH 538/665] remove package-lock --- package-lock.json | 14744 -------------------------------------------- 1 file changed, 14744 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 854cc8357c6..00000000000 --- a/package-lock.json +++ /dev/null @@ -1,14744 +0,0 @@ -{ - "name": "grants", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "grants", - "version": "0.0.0", - "dependencies": { - "@docusaurus/core": "^2.2.0", - "@docusaurus/preset-classic": "^2.2.0", - "@mdx-js/react": "^1.6.21", - "@svgr/webpack": "^5.5.0", - "clsx": "^1.1.1", - "file-loader": "^6.2.0", - "mdx-mermaid": "^1.2.3", - "mermaid": "^9.1.3", - "prettier": "^2.6.2", - "pretty-quick": "^3.1.3", - "prism-react-renderer": "^1.2.1", - "react": "^17.0.1", - "react-countup": "^6.4.0", - "react-dom": "^17.0.1", - "url-loader": "^4.1.1" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.7.4.tgz", - "integrity": "sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==", - "dependencies": { - "@algolia/autocomplete-shared": "1.7.4" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.7.4.tgz", - "integrity": "sha512-s37hrvLEIfcmKY8VU9LsAXgm2yfmkdHT3DnA3SgHaY93yjZ2qL57wzb5QweVkYuEBZkT2PIREvRoLXC2sxTbpQ==", - "dependencies": { - "@algolia/autocomplete-shared": "1.7.4" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.7.4.tgz", - "integrity": "sha512-2VGCk7I9tA9Ge73Km99+Qg87w0wzW4tgUruvWAn/gfey1ZXgmxZtyIRBebk35R1O8TbK77wujVtCnpsGpRy1kg==" - }, - "node_modules/@algolia/cache-browser-local-storage": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.14.3.tgz", - "integrity": "sha512-hWH1yCxgG3+R/xZIscmUrWAIBnmBFHH5j30fY/+aPkEZWt90wYILfAHIOZ1/Wxhho5SkPfwFmT7ooX2d9JeQBw==", - "dependencies": { - "@algolia/cache-common": "4.14.3" - } - }, - "node_modules/@algolia/cache-common": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.14.3.tgz", - "integrity": "sha512-oZJofOoD9FQOwiGTzyRnmzvh3ZP8WVTNPBLH5xU5JNF7drDbRT0ocVT0h/xB2rPHYzOeXRrLaQQBwRT/CKom0Q==" - }, - "node_modules/@algolia/cache-in-memory": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.14.3.tgz", - "integrity": "sha512-ES0hHQnzWjeioLQf5Nq+x1AWdZJ50znNPSH3puB/Y4Xsg4Av1bvLmTJe7SY2uqONaeMTvL0OaVcoVtQgJVw0vg==", - "dependencies": { - "@algolia/cache-common": "4.14.3" - } - }, - "node_modules/@algolia/client-account": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.14.3.tgz", - "integrity": "sha512-PBcPb0+f5Xbh5UfLZNx2Ow589OdP8WYjB4CnvupfYBrl9JyC1sdH4jcq/ri8osO/mCZYjZrQsKAPIqW/gQmizQ==", - "dependencies": { - "@algolia/client-common": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/transporter": "4.14.3" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.14.3.tgz", - "integrity": "sha512-eAwQq0Hb/aauv9NhCH5Dp3Nm29oFx28sayFN2fdOWemwSeJHIl7TmcsxVlRsO50fsD8CtPcDhtGeD3AIFLNvqw==", - "dependencies": { - "@algolia/client-common": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" - } - }, - "node_modules/@algolia/client-common": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.14.3.tgz", - "integrity": "sha512-jkPPDZdi63IK64Yg4WccdCsAP4pHxSkr4usplkUZM5C1l1oEpZXsy2c579LQ0rvwCs5JFmwfNG4ahOszidfWPw==", - "dependencies": { - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.14.3.tgz", - "integrity": "sha512-UCX1MtkVNgaOL9f0e22x6tC9e2H3unZQlSUdnVaSKpZ+hdSChXGaRjp2UIT7pxmPqNCyv51F597KEX5WT60jNg==", - "dependencies": { - "@algolia/client-common": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" - } - }, - "node_modules/@algolia/client-search": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.14.3.tgz", - "integrity": "sha512-I2U7xBx5OPFdPLA8AXKUPPxGY3HDxZ4r7+mlZ8ZpLbI8/ri6fnu6B4z3wcL7sgHhDYMwnAE8Xr0AB0h3Hnkp4A==", - "dependencies": { - "@algolia/client-common": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/transporter": "4.14.3" - } - }, - "node_modules/@algolia/events": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@algolia/events/-/events-4.0.1.tgz", - "integrity": "sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==" - }, - "node_modules/@algolia/logger-common": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.14.3.tgz", - "integrity": "sha512-kUEAZaBt/J3RjYi8MEBT2QEexJR2kAE2mtLmezsmqMQZTV502TkHCxYzTwY2dE7OKcUTxi4OFlMuS4GId9CWPw==" - }, - "node_modules/@algolia/logger-console": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.14.3.tgz", - "integrity": "sha512-ZWqAlUITktiMN2EiFpQIFCJS10N96A++yrexqC2Z+3hgF/JcKrOxOdT4nSCQoEPvU4Ki9QKbpzbebRDemZt/hw==", - "dependencies": { - "@algolia/logger-common": "4.14.3" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.14.3.tgz", - "integrity": "sha512-AZeg2T08WLUPvDncl2XLX2O67W5wIO8MNaT7z5ii5LgBTuk/rU4CikTjCe2xsUleIZeFl++QrPAi4Bdxws6r/Q==", - "dependencies": { - "@algolia/requester-common": "4.14.3" - } - }, - "node_modules/@algolia/requester-common": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.14.3.tgz", - "integrity": "sha512-RrRzqNyKFDP7IkTuV3XvYGF9cDPn9h6qEDl595lXva3YUk9YSS8+MGZnnkOMHvjkrSCKfoLeLbm/T4tmoIeclw==" - }, - "node_modules/@algolia/requester-node-http": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.14.3.tgz", - "integrity": "sha512-O5wnPxtDRPuW2U0EaOz9rMMWdlhwP0J0eSL1Z7TtXF8xnUeeUyNJrdhV5uy2CAp6RbhM1VuC3sOJcIR6Av+vbA==", - "dependencies": { - "@algolia/requester-common": "4.14.3" - } - }, - "node_modules/@algolia/transporter": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.14.3.tgz", - "integrity": "sha512-2qlKlKsnGJ008exFRb5RTeTOqhLZj0bkMCMVskxoqWejs2Q2QtWmsiH98hDfpw0fmnyhzHEt0Z7lqxBYp8bW2w==", - "dependencies": { - "@algolia/cache-common": "4.14.3", - "@algolia/logger-common": "4.14.3", - "@algolia/requester-common": "4.14.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "dependencies": { - "@babel/types": "^7.21.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", - "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "dependencies": { - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.0.tgz", - "integrity": "sha512-eD/JQ21IG2i1FraJnTMbUarAUkA7G988ofehG5MDCRXaUU91rEBJuCeSoou2Sk1y4RbLYXzqEg1QLwEmRU4qcQ==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.1.tgz", - "integrity": "sha512-JzhBFpkuhBNYUY7qs+wTzNmyCWUHEaAFpQQD2YfU1rPL38/L43Wvid0fFkiOCnHvsGncRZgEPyGnltABLcVDTg==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.20.11.tgz", - "integrity": "sha512-S8e1f7WQ7cimJQ51JkAaDrEtohVEitXjgCGAS2N8S31Y42E+kWwfSz83LYz57QdBm7q9diARVqanIaH2oVgQnw==", - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.20.2.tgz", - "integrity": "sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz", - "integrity": "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz", - "integrity": "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.0.tgz", - "integrity": "sha512-ReY6pxwSzEU0b3r2/T/VhqMKg/AkceBT19X0UptA3/tYi5Pe2eXgEUH+NNMC5nok6c6XQz5tyVTUpuezRfSMSg==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-react": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.18.6.tgz", - "integrity": "sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-react-display-name": "^7.18.6", - "@babel/plugin-transform-react-jsx": "^7.18.6", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-pure-annotations": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/runtime-corejs3": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.21.0.tgz", - "integrity": "sha512-TDD4UJzos3JJtM+tHX+w2Uc+KWj7GV+VKKFdMVd2Rx8sdA19hcc3P3AHFYd5LVOw+pYuSd5lICC3gm52B6Rwxw==", - "dependencies": { - "core-js-pure": "^3.25.1", - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.0.tgz", - "integrity": "sha512-Xdt2P1H4LKTO8ApPfnO1KmzYMFpp7D/EinoXzLYN/cHcBNrVCAkAtGUcXnHXrl/VGktureU6fkQrHSBE2URfoA==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.0", - "@babel/types": "^7.21.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.0.tgz", - "integrity": "sha512-uR7NWq2VNFnDi7EYqiRz2Jv/VQIu38tu64Zy8TX2nQFQ6etJ9V/Rr2msW8BS132mum2rL645qpDrLtAJtVpuow==", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@braintree/sanitize-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", - "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@discoveryjs/json-ext": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", - "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@docsearch/css": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.3.3.tgz", - "integrity": "sha512-6SCwI7P8ao+se1TUsdZ7B4XzL+gqeQZnBc+2EONZlcVa0dVrk0NjETxozFKgMv0eEGH8QzP1fkN+A1rH61l4eg==" - }, - "node_modules/@docsearch/react": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.3.3.tgz", - "integrity": "sha512-pLa0cxnl+G0FuIDuYlW+EBK6Rw2jwLw9B1RHIeS4N4s2VhsfJ/wzeCi3CWcs5yVfxLd5ZK50t//TMA5e79YT7Q==", - "dependencies": { - "@algolia/autocomplete-core": "1.7.4", - "@algolia/autocomplete-preset-algolia": "1.7.4", - "@docsearch/css": "3.3.3", - "algoliasearch": "^4.0.0" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - } - } - }, - "node_modules/@docusaurus/core": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-2.3.1.tgz", - "integrity": "sha512-0Jd4jtizqnRAr7svWaBbbrCCN8mzBNd2xFLoT/IM7bGfFie5y58oz97KzXliwiLY3zWjqMXjQcuP1a5VgCv2JA==", - "dependencies": { - "@babel/core": "^7.18.6", - "@babel/generator": "^7.18.7", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-transform-runtime": "^7.18.6", - "@babel/preset-env": "^7.18.6", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@babel/runtime": "^7.18.6", - "@babel/runtime-corejs3": "^7.18.6", - "@babel/traverse": "^7.18.8", - "@docusaurus/cssnano-preset": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-common": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "@slorber/static-site-generator-webpack-plugin": "^4.0.7", - "@svgr/webpack": "^6.2.1", - "autoprefixer": "^10.4.7", - "babel-loader": "^8.2.5", - "babel-plugin-dynamic-import-node": "^2.3.3", - "boxen": "^6.2.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.3", - "clean-css": "^5.3.0", - "cli-table3": "^0.6.2", - "combine-promises": "^1.1.0", - "commander": "^5.1.0", - "copy-webpack-plugin": "^11.0.0", - "core-js": "^3.23.3", - "css-loader": "^6.7.1", - "css-minimizer-webpack-plugin": "^4.0.0", - "cssnano": "^5.1.12", - "del": "^6.1.1", - "detect-port": "^1.3.0", - "escape-html": "^1.0.3", - "eta": "^2.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "html-minifier-terser": "^6.1.0", - "html-tags": "^3.2.0", - "html-webpack-plugin": "^5.5.0", - "import-fresh": "^3.3.0", - "leven": "^3.1.0", - "lodash": "^4.17.21", - "mini-css-extract-plugin": "^2.6.1", - "postcss": "^8.4.14", - "postcss-loader": "^7.0.0", - "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", - "react-router": "^5.3.3", - "react-router-config": "^5.1.1", - "react-router-dom": "^5.3.3", - "rtl-detect": "^1.0.4", - "semver": "^7.3.7", - "serve-handler": "^6.1.3", - "shelljs": "^0.8.5", - "terser-webpack-plugin": "^5.3.3", - "tslib": "^2.4.0", - "update-notifier": "^5.1.0", - "url-loader": "^4.1.1", - "wait-on": "^6.0.1", - "webpack": "^5.73.0", - "webpack-bundle-analyzer": "^4.5.0", - "webpack-dev-server": "^4.9.3", - "webpack-merge": "^5.8.0", - "webpackbar": "^5.0.2" - }, - "bin": { - "docusaurus": "bin/docusaurus.mjs" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@docusaurus/core/node_modules/@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@docusaurus/core/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@docusaurus/core/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@docusaurus/core/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/@docusaurus/core/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@docusaurus/core/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/@docusaurus/core/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/@docusaurus/core/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/@docusaurus/core/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@docusaurus/core/node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@docusaurus/cssnano-preset": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-2.3.1.tgz", - "integrity": "sha512-7mIhAROES6CY1GmCjR4CZkUfjTL6B3u6rKHK0ChQl2d1IevYXq/k/vFgvOrJfcKxiObpMnE9+X6R2Wt1KqxC6w==", - "dependencies": { - "cssnano-preset-advanced": "^5.3.8", - "postcss": "^8.4.14", - "postcss-sort-media-queries": "^4.2.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/logger": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-2.3.1.tgz", - "integrity": "sha512-2lAV/olKKVr9qJhfHFCaqBIl8FgYjbUFwgUnX76+cULwQYss+42ZQ3grHGFvI0ocN2X55WcYe64ellQXz7suqg==", - "dependencies": { - "chalk": "^4.1.2", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/mdx-loader": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-2.3.1.tgz", - "integrity": "sha512-Gzga7OsxQRpt3392K9lv/bW4jGppdLFJh3luKRknCKSAaZrmVkOQv2gvCn8LAOSZ3uRg5No7AgYs/vpL8K94lA==", - "dependencies": { - "@babel/parser": "^7.18.8", - "@babel/traverse": "^7.18.8", - "@docusaurus/logger": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@mdx-js/mdx": "^1.6.22", - "escape-html": "^1.0.3", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "image-size": "^1.0.1", - "mdast-util-to-string": "^2.0.0", - "remark-emoji": "^2.2.0", - "stringify-object": "^3.3.0", - "tslib": "^2.4.0", - "unified": "^9.2.2", - "unist-util-visit": "^2.0.3", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/module-type-aliases": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-2.3.1.tgz", - "integrity": "sha512-6KkxfAVOJqIUynTRb/tphYCl+co3cP0PlHiMDbi+SzmYxMdgIrwYqH9yAnGSDoN6Jk2ZE/JY/Azs/8LPgKP48A==", - "dependencies": { - "@docusaurus/react-loadable": "5.5.2", - "@docusaurus/types": "2.3.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "@types/react-router-dom": "*", - "react-helmet-async": "*", - "react-loadable": "npm:@docusaurus/react-loadable@5.5.2" - }, - "peerDependencies": { - "react": "*", - "react-dom": "*" - } - }, - "node_modules/@docusaurus/plugin-content-blog": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.3.1.tgz", - "integrity": "sha512-f5LjqX+9WkiLyGiQ41x/KGSJ/9bOjSD8lsVhPvYeUYHCtYpuiDKfhZE07O4EqpHkBx4NQdtQDbp+aptgHSTuiw==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-common": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "cheerio": "^1.0.0-rc.12", - "feed": "^4.2.2", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "reading-time": "^1.5.0", - "tslib": "^2.4.0", - "unist-util-visit": "^2.0.3", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-docs": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-2.3.1.tgz", - "integrity": "sha512-DxztTOBEruv7qFxqUtbsqXeNcHqcVEIEe+NQoI1oi2DBmKBhW/o0MIal8lt+9gvmpx3oYtlwmLOOGepxZgJGkw==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/module-type-aliases": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "@types/react-router-config": "^5.0.6", - "combine-promises": "^1.1.0", - "fs-extra": "^10.1.0", - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-content-pages": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-2.3.1.tgz", - "integrity": "sha512-E80UL6hvKm5VVw8Ka8YaVDtO6kWWDVUK4fffGvkpQ/AJQDOg99LwOXKujPoICC22nUFTsZ2Hp70XvpezCsFQaA==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "fs-extra": "^10.1.0", - "tslib": "^2.4.0", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-debug": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-2.3.1.tgz", - "integrity": "sha512-Ujpml1Ppg4geB/2hyu2diWnO49az9U2bxM9Shen7b6qVcyFisNJTkVG2ocvLC7wM1efTJcUhBO6zAku2vKJGMw==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "fs-extra": "^10.1.0", - "react-json-view": "^1.21.3", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-analytics": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-2.3.1.tgz", - "integrity": "sha512-OHip0GQxKOFU8n7gkt3TM4HOYTXPCFDjqKbMClDD3KaDnyTuMp/Zvd9HSr770lLEscgPWIvzhJByRAClqsUWiQ==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-gtag": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-2.3.1.tgz", - "integrity": "sha512-uXtDhfu4+Hm+oqWUySr3DNI5cWC/rmP6XJyAk83Heor3dFjZqDwCbkX8yWPywkRiWev3Dk/rVF8lEn0vIGVocA==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-2.3.1.tgz", - "integrity": "sha512-Ww2BPEYSqg8q8tJdLYPFFM3FMDBCVhEM4UUqKzJaiRMx3NEoly3qqDRAoRDGdIhlC//Rf0iJV9cWAoq2m6k3sw==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/plugin-sitemap": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-2.3.1.tgz", - "integrity": "sha512-8Yxile/v6QGYV9vgFiYL+8d2N4z4Er3pSHsrD08c5XI8bUXxTppMwjarDUTH/TRTfgAWotRbhJ6WZLyajLpozA==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-common": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "fs-extra": "^10.1.0", - "sitemap": "^7.1.1", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/preset-classic": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-2.3.1.tgz", - "integrity": "sha512-OQ5W0AHyfdUk0IldwJ3BlnZ1EqoJuu2L2BMhqLbqwNWdkmzmSUvlFLH1Pe7CZSQgB2YUUC/DnmjbPKk/qQD0lQ==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/plugin-content-blog": "2.3.1", - "@docusaurus/plugin-content-docs": "2.3.1", - "@docusaurus/plugin-content-pages": "2.3.1", - "@docusaurus/plugin-debug": "2.3.1", - "@docusaurus/plugin-google-analytics": "2.3.1", - "@docusaurus/plugin-google-gtag": "2.3.1", - "@docusaurus/plugin-google-tag-manager": "2.3.1", - "@docusaurus/plugin-sitemap": "2.3.1", - "@docusaurus/theme-classic": "2.3.1", - "@docusaurus/theme-common": "2.3.1", - "@docusaurus/theme-search-algolia": "2.3.1", - "@docusaurus/types": "2.3.1" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/react-loadable": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/@docusaurus/theme-classic": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-2.3.1.tgz", - "integrity": "sha512-SelSIDvyttb7ZYHj8vEUhqykhAqfOPKk+uP0z85jH72IMC58e7O8DIlcAeBv+CWsLbNIl9/Hcg71X0jazuxJug==", - "dependencies": { - "@docusaurus/core": "2.3.1", - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/module-type-aliases": "2.3.1", - "@docusaurus/plugin-content-blog": "2.3.1", - "@docusaurus/plugin-content-docs": "2.3.1", - "@docusaurus/plugin-content-pages": "2.3.1", - "@docusaurus/theme-common": "2.3.1", - "@docusaurus/theme-translations": "2.3.1", - "@docusaurus/types": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-common": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "@mdx-js/react": "^1.6.22", - "clsx": "^1.2.1", - "copy-text-to-clipboard": "^3.0.1", - "infima": "0.2.0-alpha.42", - "lodash": "^4.17.21", - "nprogress": "^0.2.0", - "postcss": "^8.4.14", - "prism-react-renderer": "^1.3.5", - "prismjs": "^1.28.0", - "react-router-dom": "^5.3.3", - "rtlcss": "^3.5.0", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-common": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-2.3.1.tgz", - "integrity": "sha512-RYmYl2OR2biO+yhmW1aS5FyEvnrItPINa+0U2dMxcHpah8reSCjQ9eJGRmAgkZFchV1+aIQzXOI1K7LCW38O0g==", - "dependencies": { - "@docusaurus/mdx-loader": "2.3.1", - "@docusaurus/module-type-aliases": "2.3.1", - "@docusaurus/plugin-content-blog": "2.3.1", - "@docusaurus/plugin-content-docs": "2.3.1", - "@docusaurus/plugin-content-pages": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router-config": "*", - "clsx": "^1.2.1", - "parse-numeric-range": "^1.3.0", - "prism-react-renderer": "^1.3.5", - "tslib": "^2.4.0", - "use-sync-external-store": "^1.2.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-search-algolia": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-2.3.1.tgz", - "integrity": "sha512-JdHaRqRuH1X++g5fEMLnq7OtULSGQdrs9AbhcWRQ428ZB8/HOiaN6mj3hzHvcD3DFgu7koIVtWPQnvnN7iwzHA==", - "dependencies": { - "@docsearch/react": "^3.1.1", - "@docusaurus/core": "2.3.1", - "@docusaurus/logger": "2.3.1", - "@docusaurus/plugin-content-docs": "2.3.1", - "@docusaurus/theme-common": "2.3.1", - "@docusaurus/theme-translations": "2.3.1", - "@docusaurus/utils": "2.3.1", - "@docusaurus/utils-validation": "2.3.1", - "algoliasearch": "^4.13.1", - "algoliasearch-helper": "^3.10.0", - "clsx": "^1.2.1", - "eta": "^2.0.0", - "fs-extra": "^10.1.0", - "lodash": "^4.17.21", - "tslib": "^2.4.0", - "utility-types": "^3.10.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/theme-translations": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-2.3.1.tgz", - "integrity": "sha512-BsBZzAewJabVhoGG1Ij2u4pMS3MPW6gZ6sS4pc+Y7czevRpzxoFNJXRtQDVGe7mOpv/MmRmqg4owDK+lcOTCVQ==", - "dependencies": { - "fs-extra": "^10.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/types": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-2.3.1.tgz", - "integrity": "sha512-PREbIRhTaNNY042qmfSE372Jb7djZt+oVTZkoqHJ8eff8vOIc2zqqDqBVc5BhOfpZGPTrE078yy/torUEZy08A==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "commander": "^5.1.0", - "joi": "^17.6.0", - "react-helmet-async": "^1.3.0", - "utility-types": "^3.10.0", - "webpack": "^5.73.0", - "webpack-merge": "^5.8.0" - }, - "peerDependencies": { - "react": "^16.8.4 || ^17.0.0", - "react-dom": "^16.8.4 || ^17.0.0" - } - }, - "node_modules/@docusaurus/utils": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-2.3.1.tgz", - "integrity": "sha512-9WcQROCV0MmrpOQDXDGhtGMd52DHpSFbKLfkyaYumzbTstrbA5pPOtiGtxK1nqUHkiIv8UwexS54p0Vod2I1lg==", - "dependencies": { - "@docusaurus/logger": "2.3.1", - "@svgr/webpack": "^6.2.1", - "escape-string-regexp": "^4.0.0", - "file-loader": "^6.2.0", - "fs-extra": "^10.1.0", - "github-slugger": "^1.4.0", - "globby": "^11.1.0", - "gray-matter": "^4.0.3", - "js-yaml": "^4.1.0", - "lodash": "^4.17.21", - "micromatch": "^4.0.5", - "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", - "tslib": "^2.4.0", - "url-loader": "^4.1.1", - "webpack": "^5.73.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-common": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-2.3.1.tgz", - "integrity": "sha512-pVlRpXkdNcxmKNxAaB1ya2hfCEvVsLDp2joeM6K6uv55Oc5nVIqgyYSgSNKZyMdw66NnvMfsu0RBylcwZQKo9A==", - "dependencies": { - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - }, - "peerDependencies": { - "@docusaurus/types": "*" - }, - "peerDependenciesMeta": { - "@docusaurus/types": { - "optional": true - } - } - }, - "node_modules/@docusaurus/utils-validation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-2.3.1.tgz", - "integrity": "sha512-7n0208IG3k1HVTByMHlZoIDjjOFC8sbViHVXJx0r3Q+3Ezrx+VQ1RZ/zjNn6lT+QBCRCXlnlaoJ8ug4HIVgQ3w==", - "dependencies": { - "@docusaurus/logger": "2.3.1", - "@docusaurus/utils": "2.3.1", - "joi": "^17.6.0", - "js-yaml": "^4.1.0", - "tslib": "^2.4.0" - }, - "engines": { - "node": ">=16.14" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-6.5.1.tgz", - "integrity": "sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-6.5.1.tgz", - "integrity": "sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-6.5.1.tgz", - "integrity": "sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-6.5.1.tgz", - "integrity": "sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-6.5.1.tgz", - "integrity": "sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-6.5.1.tgz", - "integrity": "sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/babel-preset": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-6.5.1.tgz", - "integrity": "sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^6.5.1", - "@svgr/babel-plugin-remove-jsx-attribute": "*", - "@svgr/babel-plugin-remove-jsx-empty-expression": "*", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^6.5.1", - "@svgr/babel-plugin-svg-dynamic-title": "^6.5.1", - "@svgr/babel-plugin-svg-em-dimensions": "^6.5.1", - "@svgr/babel-plugin-transform-react-native-svg": "^6.5.1", - "@svgr/babel-plugin-transform-svg-component": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/core": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-6.5.1.tgz", - "integrity": "sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/hast-util-to-babel-ast": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-6.5.1.tgz", - "integrity": "sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==", - "dependencies": { - "@babel/types": "^7.20.0", - "entities": "^4.4.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/plugin-jsx": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-6.5.1.tgz", - "integrity": "sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==", - "dependencies": { - "@babel/core": "^7.19.6", - "@svgr/babel-preset": "^6.5.1", - "@svgr/hast-util-to-babel-ast": "^6.5.1", - "svg-parser": "^2.0.4" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "^6.0.0" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/plugin-svgo": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-6.5.1.tgz", - "integrity": "sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==", - "dependencies": { - "cosmiconfig": "^7.0.1", - "deepmerge": "^4.2.2", - "svgo": "^2.8.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - }, - "peerDependencies": { - "@svgr/core": "*" - } - }, - "node_modules/@docusaurus/utils/node_modules/@svgr/webpack": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-6.5.1.tgz", - "integrity": "sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==", - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-constant-elements": "^7.18.12", - "@babel/preset-env": "^7.19.4", - "@babel/preset-react": "^7.18.6", - "@babel/preset-typescript": "^7.18.6", - "@svgr/core": "^6.5.1", - "@svgr/plugin-jsx": "^6.5.1", - "@svgr/plugin-svgo": "^6.5.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@docusaurus/utils/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/@docusaurus/utils/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/@docusaurus/utils/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@docusaurus/utils/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/@docusaurus/utils/node_modules/dom-serializer/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/@docusaurus/utils/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/@docusaurus/utils/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/@docusaurus/utils/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/@docusaurus/utils/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", - "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", - "dependencies": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@leichtgewicht/ip-codec": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", - "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==" - }, - "node_modules/@mdx-js/mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-1.6.22.tgz", - "integrity": "sha512-AMxuLxPz2j5/6TpF/XSdKpQP1NlG0z11dFOlq+2IP/lSgl11GY8ji6S/rgsViN/L0BDvHvUMruRb7ub+24LUYA==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/plugin-syntax-jsx": "7.12.1", - "@babel/plugin-syntax-object-rest-spread": "7.8.3", - "@mdx-js/util": "1.6.22", - "babel-plugin-apply-mdx-type-prop": "1.6.22", - "babel-plugin-extract-import-names": "1.6.22", - "camelcase-css": "2.0.1", - "detab": "2.0.4", - "hast-util-raw": "6.0.1", - "lodash.uniq": "4.5.0", - "mdast-util-to-hast": "10.0.1", - "remark-footnotes": "2.0.0", - "remark-mdx": "1.6.22", - "remark-parse": "8.0.3", - "remark-squeeze-paragraphs": "4.0.0", - "style-to-object": "0.3.0", - "unified": "9.2.0", - "unist-builder": "2.0.3", - "unist-util-visit": "2.0.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@mdx-js/mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@mdx-js/mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@mdx-js/mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@mdx-js/react": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-1.6.22.tgz", - "integrity": "sha512-TDoPum4SHdfPiGSAaRBw7ECyI8VaHpK8GJugbJIJuqyh6kzw9ZLJZW3HGL3NNrJGxcAixUvqROm+YuQOo5eXtg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "react": "^16.13.1 || ^17.0.0" - } - }, - "node_modules/@mdx-js/util": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/@mdx-js/util/-/util-1.6.22.tgz", - "integrity": "sha512-H1rQc1ZOHANWBvPcW+JpGwr+juXSxM8Q8YCkm3GhZd8REu1fHR3z99CErO1p9pkcfcxZnMdIZdIsXkOHY0NilA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", - "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" - }, - "node_modules/@rollup/plugin-babel": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-6.0.3.tgz", - "integrity": "sha512-fKImZKppa1A/gX73eg4JGo+8kQr/q1HBQaCGKECZ0v4YBBv3lFqi14+7xyApECzvkLTHCifx+7ntcrvtBIRcpg==", - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@rollup/pluginutils": "^5.0.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - }, - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@sideway/address": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.4.tgz", - "integrity": "sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.1.tgz", - "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.23", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", - "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/@slorber/static-site-generator-webpack-plugin": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/@slorber/static-site-generator-webpack-plugin/-/static-site-generator-webpack-plugin-4.0.7.tgz", - "integrity": "sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==", - "dependencies": { - "eval": "^0.1.8", - "p-map": "^4.0.0", - "webpack-sources": "^3.2.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@svgr/babel-plugin-add-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-attribute": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz", - "integrity": "sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-remove-jsx-empty-expression": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz", - "integrity": "sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-replace-jsx-attribute-value": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz", - "integrity": "sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-dynamic-title": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz", - "integrity": "sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-svg-em-dimensions": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz", - "integrity": "sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-react-native-svg": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz", - "integrity": "sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-plugin-transform-svg-component": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz", - "integrity": "sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/babel-preset": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/babel-preset/-/babel-preset-5.5.0.tgz", - "integrity": "sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig==", - "dependencies": { - "@svgr/babel-plugin-add-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-attribute": "^5.4.0", - "@svgr/babel-plugin-remove-jsx-empty-expression": "^5.0.1", - "@svgr/babel-plugin-replace-jsx-attribute-value": "^5.0.1", - "@svgr/babel-plugin-svg-dynamic-title": "^5.4.0", - "@svgr/babel-plugin-svg-em-dimensions": "^5.4.0", - "@svgr/babel-plugin-transform-react-native-svg": "^5.4.0", - "@svgr/babel-plugin-transform-svg-component": "^5.5.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/core": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/core/-/core-5.5.0.tgz", - "integrity": "sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ==", - "dependencies": { - "@svgr/plugin-jsx": "^5.5.0", - "camelcase": "^6.2.0", - "cosmiconfig": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/hast-util-to-babel-ast": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz", - "integrity": "sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==", - "dependencies": { - "@babel/types": "^7.12.6" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-jsx": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz", - "integrity": "sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==", - "dependencies": { - "@babel/core": "^7.12.3", - "@svgr/babel-preset": "^5.5.0", - "@svgr/hast-util-to-babel-ast": "^5.5.0", - "svg-parser": "^2.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/plugin-svgo": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz", - "integrity": "sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "deepmerge": "^4.2.2", - "svgo": "^1.2.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@svgr/webpack": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@svgr/webpack/-/webpack-5.5.0.tgz", - "integrity": "sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/plugin-transform-react-constant-elements": "^7.12.1", - "@babel/preset-env": "^7.12.1", - "@babel/preset-react": "^7.12.5", - "@svgr/core": "^5.5.0", - "@svgr/plugin-jsx": "^5.5.0", - "@svgr/plugin-svgo": "^5.5.0", - "loader-utils": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/gregberge" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", - "dependencies": { - "@types/connect": "*", - "@types/node": "*" - } - }, - "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/connect-history-api-fallback": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz", - "integrity": "sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==", - "dependencies": { - "@types/express-serve-static-core": "*", - "@types/node": "*" - } - }, - "node_modules/@types/eslint": { - "version": "8.21.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.1.tgz", - "integrity": "sha512-rc9K8ZpVjNcLs8Fp0dkozd5Pt2Apk1glO4Vgz8ix1u6yFByxfqo5Yavpy65o+93TAe24jr7v+eSBtFLvOQtCRQ==", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.0.tgz", - "integrity": "sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==" - }, - "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", - "dependencies": { - "@types/body-parser": "*", - "@types/express-serve-static-core": "^4.17.33", - "@types/qs": "*", - "@types/serve-static": "*" - } - }, - "node_modules/@types/express-serve-static-core": { - "version": "4.17.33", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", - "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", - "dependencies": { - "@types/node": "*", - "@types/qs": "*", - "@types/range-parser": "*" - } - }, - "node_modules/@types/hast": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.4.tgz", - "integrity": "sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/history": { - "version": "4.7.11", - "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" - }, - "node_modules/@types/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" - }, - "node_modules/@types/http-proxy": { - "version": "1.17.9", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.9.tgz", - "integrity": "sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" - }, - "node_modules/@types/mdast": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.10.tgz", - "integrity": "sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/mime": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", - "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" - }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==" - }, - "node_modules/@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==" - }, - "node_modules/@types/parse5": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-5.0.3.tgz", - "integrity": "sha512-kUNnecmtkunAoQ3CnjmMkzNU/gtxG8guhi+Fk2U/kOpIKjIMKnXGp4IJCgQJrXSgMsWYimYG4TGjz/UzbGEBTw==" - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==" - }, - "node_modules/@types/q": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", - "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" - }, - "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" - }, - "node_modules/@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-router": { - "version": "5.1.20", - "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", - "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*" - } - }, - "node_modules/@types/react-router-config": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.6.tgz", - "integrity": "sha512-db1mx37a1EJDf1XeX8jJN7R3PZABmJQXR8r28yUjVMFSjkmnQo6X6pOEEmNl+Tp2gYQOGPdYbFIipBtdElZ3Yg==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/react-router-dom": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", - "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", - "dependencies": { - "@types/history": "^4.7.11", - "@types/react": "*", - "@types/react-router": "*" - } - }, - "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==" - }, - "node_modules/@types/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" - }, - "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", - "dependencies": { - "@types/express": "*" - } - }, - "node_modules/@types/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", - "dependencies": { - "@types/mime": "*", - "@types/node": "*" - } - }, - "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/unist": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", - "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==" - }, - "node_modules/@types/ws": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.4.tgz", - "integrity": "sha512-zdQDHKUgcX/zBc4GrwsE/7dVdAD8JR4EuiAXiiUhhfyIJXXb2+PrGshFyeXWQPMmmZ2XxgaqclgpIC7eTXc1mg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==" - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==" - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==" - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==" - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", - "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/algoliasearch": { - "version": "4.14.3", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.14.3.tgz", - "integrity": "sha512-GZTEuxzfWbP/vr7ZJfGzIl8fOsoxN916Z6FY2Egc9q2TmZ6hvq5KfAxY89pPW01oW/2HDEKA8d30f9iAH9eXYg==", - "dependencies": { - "@algolia/cache-browser-local-storage": "4.14.3", - "@algolia/cache-common": "4.14.3", - "@algolia/cache-in-memory": "4.14.3", - "@algolia/client-account": "4.14.3", - "@algolia/client-analytics": "4.14.3", - "@algolia/client-common": "4.14.3", - "@algolia/client-personalization": "4.14.3", - "@algolia/client-search": "4.14.3", - "@algolia/logger-common": "4.14.3", - "@algolia/logger-console": "4.14.3", - "@algolia/requester-browser-xhr": "4.14.3", - "@algolia/requester-common": "4.14.3", - "@algolia/requester-node-http": "4.14.3", - "@algolia/transporter": "4.14.3" - } - }, - "node_modules/algoliasearch-helper": { - "version": "3.11.3", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.11.3.tgz", - "integrity": "sha512-TbaEvLwiuGygHQIB8y+OsJKQQ40+JKUua5B91X66tMUHyyhbNHvqyr0lqd3wCoyKx7WybyQrC0WJvzoIeh24Aw==", - "dependencies": { - "@algolia/events": "^4.0.1" - }, - "peerDependencies": { - "algoliasearch": ">= 3.1 < 6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-align/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/ansi-align/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-html-community": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", - "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", - "engines": [ - "node >= 0.8.0" - ], - "bin": { - "ansi-html": "bin/ansi-html" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", - "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/array-differ": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", - "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array-flatten": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", - "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.reduce": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/array.prototype.reduce/-/array.prototype.reduce-1.0.5.tgz", - "integrity": "sha512-kDdugMl7id9COE8R7MHF5jWk7Dqt/fs4Pv+JXoICnYwqpjjjbUurz6w5fT5IG6brLdJhv6/VoHB0H7oyIBXd+Q==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/autoprefixer": { - "version": "10.4.13", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.13.tgz", - "integrity": "sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/autoprefixer" - } - ], - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-lite": "^1.0.30001426", - "fraction.js": "^4.2.0", - "normalize-range": "^0.1.2", - "picocolors": "^1.0.0", - "postcss-value-parser": "^4.2.0" - }, - "bin": { - "autoprefixer": "bin/autoprefixer" - }, - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "0.25.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.25.0.tgz", - "integrity": "sha512-cD8FOb0tRH3uuEe6+evtAbgJtfxr7ly3fQjYcMcuPlgkwVS9xboaVIpcDV+cYQe+yGykgwZCs1pzjntcGa6l5g==", - "dependencies": { - "follow-redirects": "^1.14.7" - } - }, - "node_modules/babel-loader": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz", - "integrity": "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==", - "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" - }, - "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-apply-mdx-type-prop/-/babel-plugin-apply-mdx-type-prop-1.6.22.tgz", - "integrity": "sha512-VefL+8o+F/DfK24lPZMtJctrCVOfgbqLAGZSkxwhazQv4VxPg3Za/i40fu22KR2m8eEda+IfSOlPLUSIiLcnCQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4", - "@mdx-js/util": "1.6.22" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - }, - "peerDependencies": { - "@babel/core": "^7.11.6" - } - }, - "node_modules/babel-plugin-apply-mdx-type-prop/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-dynamic-import-node": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", - "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", - "dependencies": { - "object.assign": "^4.1.0" - } - }, - "node_modules/babel-plugin-extract-import-names": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/babel-plugin-extract-import-names/-/babel-plugin-extract-import-names-1.6.22.tgz", - "integrity": "sha512-yJ9BsJaISua7d8zNT7oRG1ZLBJCIdZ4PZqmH8qa9N5AK01ifk3fnkc98AXhtzE7UkfCsEumvoQWgoYLhOnJ7jQ==", - "dependencies": { - "@babel/helper-plugin-utils": "7.10.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/babel-plugin-extract-import-names/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/bail": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", - "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base16": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/base16/-/base16-1.0.0.tgz", - "integrity": "sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==" - }, - "node_modules/batch": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", - "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==" - }, - "node_modules/big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/bonjour-service": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.0.tgz", - "integrity": "sha512-LVRinRB3k1/K0XzZ2p58COnWvkQknIY6sf0zF2rpErvcJXpMBttEPQSxK+HEXSS9VmpZlDoDnQWv8ftJT20B0Q==", - "dependencies": { - "array-flatten": "^2.1.2", - "dns-equal": "^1.0.0", - "fast-deep-equal": "^3.1.3", - "multicast-dns": "^7.2.5" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" - }, - "node_modules/boxen": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", - "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", - "dependencies": { - "ansi-align": "^3.0.1", - "camelcase": "^6.2.0", - "chalk": "^4.1.2", - "cli-boxes": "^3.0.0", - "string-width": "^5.0.1", - "type-fest": "^2.5.0", - "widest-line": "^4.0.1", - "wrap-ansi": "^8.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-css": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", - "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/caniuse-api": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", - "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", - "dependencies": { - "browserslist": "^4.0.0", - "caniuse-lite": "^1.0.0", - "lodash.memoize": "^4.1.2", - "lodash.uniq": "^4.5.0" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001457", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", - "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/ccount": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", - "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-css": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.2.tgz", - "integrity": "sha512-JVJbM+f3d3Q704rF4bqQ5UUyTtuJ0JRKNbTKVEeujCCBoMdkEi+V+e8oktO9qGQNSvHrFTM6JZRXrUvGR1czww==", - "dependencies": { - "source-map": "~0.6.0" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/cli-boxes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", - "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table3": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.3.tgz", - "integrity": "sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==", - "dependencies": { - "string-width": "^4.2.0" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "node_modules/cli-table3/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/cli-table3/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clsx": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz", - "integrity": "sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/coa": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", - "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", - "dependencies": { - "@types/q": "^1.5.1", - "chalk": "^2.4.1", - "q": "^1.1.2" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/coa/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/coa/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/coa/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/coa/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/coa/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/collapse-white-space": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", - "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==" - }, - "node_modules/colorette": { - "version": "2.0.19", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.19.tgz", - "integrity": "sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==" - }, - "node_modules/combine-promises": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.1.0.tgz", - "integrity": "sha512-ZI9jvcLDxqwaXEixOhArm3r7ReIivsXkpbyEWyeOhzz1QS0iSgBPnWvEqvIQtYyamGCYA88gFhmUrs9hrrQ0pg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/compressible": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", - "dependencies": { - "mime-db": ">= 1.43.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/compression": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", - "dependencies": { - "accepts": "~1.3.5", - "bytes": "3.0.0", - "compressible": "~2.0.16", - "debug": "2.6.9", - "on-headers": "~1.0.2", - "safe-buffer": "5.1.2", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/compression/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/compression/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/compression/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/connect-history-api-fallback": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", - "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/consola": { - "version": "2.15.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", - "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" - }, - "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/copy-text-to-clipboard": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz", - "integrity": "sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", - "dependencies": { - "fast-glob": "^3.2.11", - "glob-parent": "^6.0.1", - "globby": "^13.1.1", - "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/copy-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/copy-webpack-plugin/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/copy-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/copy-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/core-js": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.28.0.tgz", - "integrity": "sha512-GiZn9D4Z/rSYvTeg1ljAIsEqFm0LaN9gVtwDCrKL80zHtS31p9BAjmTxVqTQDMpwlMolJZOFntUG2uwyj7DAqw==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-compat": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.28.0.tgz", - "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-js-pure": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.28.0.tgz", - "integrity": "sha512-DSOVleA9/v3LNj/vFxAPfUHttKTzrB2RXhAPvR5TPXn4vrra3Z2ssytvRyt8eruJwAfwAiFADEbrjcRdcvPLQQ==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cose-base": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", - "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", - "dependencies": { - "layout-base": "^1.0.0" - } - }, - "node_modules/cosmiconfig": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", - "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/countup.js": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/countup.js/-/countup.js-2.4.2.tgz", - "integrity": "sha512-EExCcu5rd7ffBj65B3CVNuS1HddN1Y4WuTfJEuocJXwZlNnlXZQ4sD9M/Cq32ZS0zR38F9vGMCw/iFcVImrNbw==" - }, - "node_modules/cross-fetch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.5.tgz", - "integrity": "sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==", - "dependencies": { - "node-fetch": "2.6.7" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-declaration-sorter": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz", - "integrity": "sha512-fBffmak0bPAnyqc/HO8C3n2sHrp9wcqQz6ES9koRF2/mLOVAx9zIQ3Y7R29sYCteTPqMCwns4WYQoCX91Xl3+w==", - "engines": { - "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.9" - } - }, - "node_modules/css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", - "dependencies": { - "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/css-minimizer-webpack-plugin": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-4.2.2.tgz", - "integrity": "sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==", - "dependencies": { - "cssnano": "^5.1.8", - "jest-worker": "^29.1.2", - "postcss": "^8.4.17", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "@parcel/css": { - "optional": true - }, - "@swc/css": { - "optional": true - }, - "clean-css": { - "optional": true - }, - "csso": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "lightningcss": { - "optional": true - } - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-select-base-adapter": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", - "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" - }, - "node_modules/css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", - "dependencies": { - "mdn-data": "2.0.4", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssnano": { - "version": "5.1.15", - "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.15.tgz", - "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", - "dependencies": { - "cssnano-preset-default": "^5.2.14", - "lilconfig": "^2.0.3", - "yaml": "^1.10.2" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/cssnano" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-advanced": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/cssnano-preset-advanced/-/cssnano-preset-advanced-5.3.10.tgz", - "integrity": "sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==", - "dependencies": { - "autoprefixer": "^10.4.12", - "cssnano-preset-default": "^5.2.14", - "postcss-discard-unused": "^5.1.0", - "postcss-merge-idents": "^5.1.1", - "postcss-reduce-idents": "^5.2.0", - "postcss-zindex": "^5.1.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-preset-default": { - "version": "5.2.14", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", - "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", - "dependencies": { - "css-declaration-sorter": "^6.3.1", - "cssnano-utils": "^3.1.0", - "postcss-calc": "^8.2.3", - "postcss-colormin": "^5.3.1", - "postcss-convert-values": "^5.1.3", - "postcss-discard-comments": "^5.1.2", - "postcss-discard-duplicates": "^5.1.0", - "postcss-discard-empty": "^5.1.1", - "postcss-discard-overridden": "^5.1.0", - "postcss-merge-longhand": "^5.1.7", - "postcss-merge-rules": "^5.1.4", - "postcss-minify-font-values": "^5.1.0", - "postcss-minify-gradients": "^5.1.1", - "postcss-minify-params": "^5.1.4", - "postcss-minify-selectors": "^5.2.1", - "postcss-normalize-charset": "^5.1.0", - "postcss-normalize-display-values": "^5.1.0", - "postcss-normalize-positions": "^5.1.1", - "postcss-normalize-repeat-style": "^5.1.1", - "postcss-normalize-string": "^5.1.0", - "postcss-normalize-timing-functions": "^5.1.0", - "postcss-normalize-unicode": "^5.1.1", - "postcss-normalize-url": "^5.1.0", - "postcss-normalize-whitespace": "^5.1.1", - "postcss-ordered-values": "^5.1.3", - "postcss-reduce-initial": "^5.1.2", - "postcss-reduce-transforms": "^5.1.0", - "postcss-svgo": "^5.1.0", - "postcss-unique-selectors": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/cssnano-utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-3.1.0.tgz", - "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/csso": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", - "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", - "dependencies": { - "css-tree": "^1.1.2" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==" - }, - "node_modules/cytoscape": { - "version": "3.23.0", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.23.0.tgz", - "integrity": "sha512-gRZqJj/1kiAVPkrVFvz/GccxsXhF3Qwpptl32gKKypO4IlqnKBjTOu+HbXtEggSGzC5KCaHp3/F7GgENrtsFkA==", - "dependencies": { - "heap": "^0.2.6", - "lodash": "^4.17.21" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/cytoscape-cose-bilkent": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", - "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", - "dependencies": { - "cose-base": "^1.0.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", - "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", - "dependencies": { - "cose-base": "^2.2.0" - }, - "peerDependencies": { - "cytoscape": "^3.2.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/cose-base": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", - "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", - "dependencies": { - "layout-base": "^2.0.0" - } - }, - "node_modules/cytoscape-fcose/node_modules/layout-base": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", - "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==" - }, - "node_modules/d3": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/d3/-/d3-7.8.2.tgz", - "integrity": "sha512-WXty7qOGSHb7HR7CfOzwN1Gw04MUOzN8qh9ZUsvwycIMb4DYMpY9xczZ6jUorGtO6bR9BPMPaueIKwiDxu9uiQ==", - "dependencies": { - "d3-array": "3", - "d3-axis": "3", - "d3-brush": "3", - "d3-chord": "3", - "d3-color": "3", - "d3-contour": "4", - "d3-delaunay": "6", - "d3-dispatch": "3", - "d3-drag": "3", - "d3-dsv": "3", - "d3-ease": "3", - "d3-fetch": "3", - "d3-force": "3", - "d3-format": "3", - "d3-geo": "3", - "d3-hierarchy": "3", - "d3-interpolate": "3", - "d3-path": "3", - "d3-polygon": "3", - "d3-quadtree": "3", - "d3-random": "3", - "d3-scale": "4", - "d3-scale-chromatic": "3", - "d3-selection": "3", - "d3-shape": "3", - "d3-time": "3", - "d3-time-format": "4", - "d3-timer": "3", - "d3-transition": "3", - "d3-zoom": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-array": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.2.tgz", - "integrity": "sha512-yEEyEAbDrF8C6Ob2myOBLjwBLck1Z89jMGFee0oPsn95GqjerpaOA4ch+vc2l0FNFFwMD5N7OCSEN5eAlsUbgQ==", - "dependencies": { - "internmap": "1 - 2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-axis": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", - "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-brush": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", - "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "3", - "d3-transition": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-chord": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", - "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", - "dependencies": { - "d3-path": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-color": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", - "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-contour": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", - "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", - "dependencies": { - "d3-array": "^3.2.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-delaunay": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.2.tgz", - "integrity": "sha512-IMLNldruDQScrcfT+MWnazhHbDJhcRJyOEBAJfwQnHle1RPh6WDuLvxNArUju2VSMSUuKlY5BGHRJ2cYyoFLQQ==", - "dependencies": { - "delaunator": "5" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dispatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", - "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-drag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", - "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-selection": "3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", - "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", - "dependencies": { - "commander": "7", - "iconv-lite": "0.6", - "rw": "1" - }, - "bin": { - "csv2json": "bin/dsv2json.js", - "csv2tsv": "bin/dsv2dsv.js", - "dsv2dsv": "bin/dsv2dsv.js", - "dsv2json": "bin/dsv2json.js", - "json2csv": "bin/json2dsv.js", - "json2dsv": "bin/json2dsv.js", - "json2tsv": "bin/json2dsv.js", - "tsv2csv": "bin/dsv2dsv.js", - "tsv2json": "bin/dsv2json.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-dsv/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/d3-ease": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", - "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-fetch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", - "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", - "dependencies": { - "d3-dsv": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-force": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", - "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-quadtree": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-geo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.0.tgz", - "integrity": "sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==", - "dependencies": { - "d3-array": "2.5.0 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-hierarchy": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", - "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-interpolate": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", - "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", - "dependencies": { - "d3-color": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-path": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", - "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-polygon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", - "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-quadtree": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", - "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-random": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", - "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", - "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", - "dependencies": { - "d3-array": "2.10.0 - 3", - "d3-format": "1 - 3", - "d3-interpolate": "1.2.0 - 3", - "d3-time": "2.1.1 - 3", - "d3-time-format": "2 - 4" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-scale-chromatic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz", - "integrity": "sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==", - "dependencies": { - "d3-color": "1 - 3", - "d3-interpolate": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-selection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", - "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-shape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", - "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", - "dependencies": { - "d3-path": "^3.1.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", - "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", - "dependencies": { - "d3-array": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-time-format": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", - "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", - "dependencies": { - "d3-time": "1 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-timer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", - "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", - "engines": { - "node": ">=12" - } - }, - "node_modules/d3-transition": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", - "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", - "dependencies": { - "d3-color": "1 - 3", - "d3-dispatch": "1 - 3", - "d3-ease": "1 - 3", - "d3-interpolate": "1 - 3", - "d3-timer": "1 - 3" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "d3-selection": "2 - 3" - } - }, - "node_modules/d3-zoom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", - "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", - "dependencies": { - "d3-dispatch": "1 - 3", - "d3-drag": "2 - 3", - "d3-interpolate": "1 - 3", - "d3-selection": "2 - 3", - "d3-transition": "2 - 3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/dagre-d3-es": { - "version": "7.0.8", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.8.tgz", - "integrity": "sha512-eykdoYQ4FwCJinEYS0gPL2f2w+BPbSLvnQSJ3Ye1vAoPjdkq6xIMKBv+UkICd3qZE26wBKIn3p+6n0QC7R1LyA==", - "dependencies": { - "d3": "^7.8.2", - "lodash-es": "^4.17.21" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-gateway": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", - "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", - "dependencies": { - "execa": "^5.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/default-gateway/node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/default-gateway/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/default-gateway/node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", - "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", - "dependencies": { - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/delaunator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.0.tgz", - "integrity": "sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==", - "dependencies": { - "robust-predicates": "^3.0.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detab": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", - "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/detect-node": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", - "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==" - }, - "node_modules/detect-port": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.5.1.tgz", - "integrity": "sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==", - "dependencies": { - "address": "^1.0.1", - "debug": "4" - }, - "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" - } - }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dns-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", - "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==" - }, - "node_modules/dns-packet": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.4.0.tgz", - "integrity": "sha512-EgqGeaBB8hLiHLZtp/IbaDQTL8pZ0+IvwzSHA6d7VyMDM+B9hgddEMa9xjK5oYnw0ci0JQ6g2XCD7/f6cafU6g==", - "dependencies": { - "@leichtgewicht/ip-codec": "^2.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/dom-converter": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", - "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", - "dependencies": { - "utila": "~0.4" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/dompurify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-2.4.3.tgz", - "integrity": "sha512-q6QaLcakcRjebxjg8/+NP+h0rPfatOgOzc46Fst9VAA3jF2ApfKBNKMzdP4DYTqtUMXSCd5pRS/8Po/OmoCHZQ==" - }, - "node_modules/domutils": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.0.1.tgz", - "integrity": "sha512-z08c1l761iKhDFtfXO04C7kTdPBLi41zwOZl00WS8b5eiaebNpY00HKbztwBq+e3vyqWNwWF3mP9YLUeqIrF+Q==", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.1" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", - "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dot-prop/node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" - }, - "node_modules/duplexer3": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", - "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/electron-to-chromium": { - "version": "1.4.305", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.305.tgz", - "integrity": "sha512-WETy6tG0CT5gm1O+xCbyapWNsCcmIvrn4NHViIGYo2AT8FV2qUCXdaB+WqYxSv/vS5mFqhBYnfZAAkVArjBmUg==" - }, - "node_modules/elkjs": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elkjs/-/elkjs-0.8.2.tgz", - "integrity": "sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==" - }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" - }, - "node_modules/emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/emoticon": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/emoticon/-/emoticon-3.2.0.tgz", - "integrity": "sha512-SNujglcLTTg+lDAcApPNgEdudaqQFiAbJCqzjNxJkvN9vAwCGi0uu8IUVvx+f16h+V44KCY6Y2yboroc9pilHg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.4.0.tgz", - "integrity": "sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", - "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.3", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.4", - "is-array-buffer": "^3.0.1", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.10", - "is-weakref": "^1.0.2", - "object-inspect": "^1.12.2", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.4.3", - "safe-regex-test": "^1.0.0", - "string.prototype.trimend": "^1.0.6", - "string.prototype.trimstart": "^1.0.6", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==" - }, - "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", - "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", - "dependencies": { - "get-intrinsic": "^1.1.3", - "has": "^1.0.3", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eta": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/eta/-/eta-2.0.0.tgz", - "integrity": "sha512-NqE7S2VmVwgMS8yBxsH4VgNQjNjLq1gfGU0u9I6Cjh468nPRMoDfGdK9n1p/3Dvsw3ebklDkZsFAnKJ9sefjBA==", - "engines": { - "node": ">=6.0.0" - }, - "funding": { - "url": "https://github.com/eta-dev/eta?sponsor=1" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/eval": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/eval/-/eval-0.1.8.tgz", - "integrity": "sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==", - "dependencies": { - "@types/node": "*", - "require-like": ">= 0.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/eventemitter3": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", - "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/express/node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/express/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fast-glob": { - "version": "3.2.12", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", - "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "node_modules/fast-url-parser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", - "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", - "dependencies": { - "punycode": "^1.3.2" - } - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/faye-websocket": { - "version": "0.11.4", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", - "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", - "dependencies": { - "websocket-driver": ">=0.5.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fbemitter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fbemitter/-/fbemitter-3.0.0.tgz", - "integrity": "sha512-KWKaceCwKQU0+HPoop6gn4eOHk50bBv/VxjJtGMfwmJt3D29JpN4H4eisCtIPA+a8GVBam+ldMMpMjJUvpDyHw==", - "dependencies": { - "fbjs": "^3.0.0" - } - }, - "node_modules/fbjs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-3.0.4.tgz", - "integrity": "sha512-ucV0tDODnGV3JCnnkmoszb5lf4bNpzjv80K41wd4k798Etq+UYD0y0TIfalLjZoKgjive6/adkRnszwapiDgBQ==", - "dependencies": { - "cross-fetch": "^3.1.5", - "fbjs-css-vars": "^1.0.0", - "loose-envify": "^1.0.0", - "object-assign": "^4.1.0", - "promise": "^7.1.1", - "setimmediate": "^1.0.5", - "ua-parser-js": "^0.7.30" - } - }, - "node_modules/fbjs-css-vars": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/fbjs-css-vars/-/fbjs-css-vars-1.0.2.tgz", - "integrity": "sha512-b2XGFAFdWZWg0phtAWLHCk836A1Xann+I+Dgd3Gk64MHKZO44FfoD1KxyvbSh0qZsIoXQGGlVztIY+oitJPpRQ==" - }, - "node_modules/feed": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/feed/-/feed-4.2.2.tgz", - "integrity": "sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==", - "dependencies": { - "xml-js": "^1.6.11" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/file-loader": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", - "integrity": "sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==", - "dependencies": { - "loader-utils": "^2.0.0", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/file-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", - "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flux": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/flux/-/flux-4.0.3.tgz", - "integrity": "sha512-yKAbrp7JhZhj6uiT1FTuVMlIAT1J4jqEyBpFApi1kxpGZCvacMVc/t1pMQyotqHhAgvoE3bNvAykhCo2CLjnYw==", - "dependencies": { - "fbemitter": "^3.0.0", - "fbjs": "^3.0.1" - }, - "peerDependencies": { - "react": "^15.0.2 || ^16.0.0 || ^17.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dependencies": { - "is-callable": "^1.1.3" - } - }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.2.tgz", - "integrity": "sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fraction.js": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", - "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", - "engines": { - "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/fs-monkey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", - "integrity": "sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/function.prototype.name": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", - "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.19.0", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-own-enumerable-property-symbols": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", - "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" - }, - "node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/github-slugger": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.5.0.tgz", - "integrity": "sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, - "node_modules/global-dirs": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", - "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/gzip-size": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", - "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", - "dependencies": { - "duplexer": "^0.1.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/handle-thing": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", - "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", - "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", - "dependencies": { - "get-intrinsic": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/hast-to-hyperscript": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/hast-to-hyperscript/-/hast-to-hyperscript-9.0.1.tgz", - "integrity": "sha512-zQgLKqF+O2F72S1aa4y2ivxzSlko3MAvxkwG8ehGmNiqd98BIN3JM1rAJPmplEyLmGLO2QZYJtIneOSZ2YbJuA==", - "dependencies": { - "@types/unist": "^2.0.3", - "comma-separated-tokens": "^1.0.0", - "property-information": "^5.3.0", - "space-separated-tokens": "^1.0.0", - "style-to-object": "^0.3.0", - "unist-util-is": "^4.0.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-from-parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-6.0.1.tgz", - "integrity": "sha512-jeJUWiN5pSxW12Rh01smtVkZgZr33wBokLzKLwinYOUfSzm1Nl/c3GUGebDyOKjdsRgMvoVbV0VpAcpjF4NrJA==", - "dependencies": { - "@types/parse5": "^5.0.0", - "hastscript": "^6.0.0", - "property-information": "^5.0.0", - "vfile": "^4.0.0", - "vfile-location": "^3.2.0", - "web-namespaces": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/hast-util-raw/-/hast-util-raw-6.0.1.tgz", - "integrity": "sha512-ZMuiYA+UF7BXBtsTBNcLBF5HzXzkyE6MLzJnL605LKE8GJylNjGc4jjxazAHUtcwT5/CEt6afRKViYB4X66dig==", - "dependencies": { - "@types/hast": "^2.0.0", - "hast-util-from-parse5": "^6.0.0", - "hast-util-to-parse5": "^6.0.0", - "html-void-elements": "^1.0.0", - "parse5": "^6.0.0", - "unist-util-position": "^3.0.0", - "vfile": "^4.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-raw/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "node_modules/hast-util-to-parse5": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hast-util-to-parse5/-/hast-util-to-parse5-6.0.0.tgz", - "integrity": "sha512-Lu5m6Lgm/fWuz8eWnrKezHtVY83JeRGaNQ2kn9aJgqaxvVkFCZQBEhgodZUDUvoodgyROHDb3r5IxAEdl6suJQ==", - "dependencies": { - "hast-to-hyperscript": "^9.0.0", - "property-information": "^5.0.0", - "web-namespaces": "^1.0.0", - "xtend": "^4.0.0", - "zwitch": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "bin": { - "he": "bin/he" - } - }, - "node_modules/heap": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/heap/-/heap-0.2.7.tgz", - "integrity": "sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==" - }, - "node_modules/history": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", - "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", - "dependencies": { - "@babel/runtime": "^7.1.2", - "loose-envify": "^1.2.0", - "resolve-pathname": "^3.0.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0", - "value-equal": "^1.0.1" - } - }, - "node_modules/hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dependencies": { - "react-is": "^16.7.0" - } - }, - "node_modules/hpack.js": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", - "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", - "dependencies": { - "inherits": "^2.0.1", - "obuf": "^1.0.0", - "readable-stream": "^2.0.1", - "wbuf": "^1.1.0" - } - }, - "node_modules/hpack.js/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" - }, - "node_modules/hpack.js/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/hpack.js/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/hpack.js/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/html-entities": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.3.tgz", - "integrity": "sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==" - }, - "node_modules/html-minifier-terser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", - "dependencies": { - "camel-case": "^4.1.2", - "clean-css": "^5.2.2", - "commander": "^8.3.0", - "he": "^1.2.0", - "param-case": "^3.0.4", - "relateurl": "^0.2.7", - "terser": "^5.10.0" - }, - "bin": { - "html-minifier-terser": "cli.js" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/html-minifier-terser/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "engines": { - "node": ">= 12" - } - }, - "node_modules/html-tags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", - "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-void-elements": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", - "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/html-webpack-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.5.0.tgz", - "integrity": "sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==", - "dependencies": { - "@types/html-minifier-terser": "^6.0.0", - "html-minifier-terser": "^6.0.2", - "lodash": "^4.17.21", - "pretty-error": "^4.0.0", - "tapable": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/html-webpack-plugin" - }, - "peerDependencies": { - "webpack": "^5.20.0" - } - }, - "node_modules/htmlparser2": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.1.tgz", - "integrity": "sha512-4lVbmc1diZC7GUJQtRQ5yBAeUCL1exyMwmForWkRLnwyzWBFxN633SALPMGYaWZvKe9j1pRZJpauvmxENSp/EA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "entities": "^4.3.0" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" - }, - "node_modules/http-deceiver": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", - "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-parser-js": { - "version": "0.5.8", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", - "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" - }, - "node_modules/http-proxy": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", - "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", - "dependencies": { - "eventemitter3": "^4.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-middleware": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", - "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", - "dependencies": { - "@types/http-proxy": "^1.17.8", - "http-proxy": "^1.18.1", - "is-glob": "^4.0.1", - "is-plain-obj": "^3.0.0", - "micromatch": "^4.0.2" - }, - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "@types/express": "^4.17.13" - }, - "peerDependenciesMeta": { - "@types/express": { - "optional": true - } - } - }, - "node_modules/http-proxy-middleware/node_modules/is-plain-obj": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", - "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/icss-utils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", - "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/image-size": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz", - "integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==", - "dependencies": { - "queue": "6.0.2" - }, - "bin": { - "image-size": "bin/image-size.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/immer": { - "version": "9.0.19", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.19.tgz", - "integrity": "sha512-eY+Y0qcsB4TZKwgQzLaE/lqYMlKhv5J9dyd2RhhtGhNo2njPXDqU9XPfcNfa3MIDsdtZt5KlkIsirlo4dHsWdQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A==", - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/infima": { - "version": "0.2.0-alpha.42", - "resolved": "https://registry.npmjs.org/infima/-/infima-0.2.0-alpha.42.tgz", - "integrity": "sha512-ift8OXNbQQwtbIt6z16KnSWP7uJ/SysSMFI4F87MNRTicypfl4Pv3E2OGVv6N3nSZFJvA8imYulCBS64iyHYww==", - "engines": { - "node": ">=12" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" - }, - "node_modules/inline-style-parser": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.1.1.tgz", - "integrity": "sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==" - }, - "node_modules/internal-slot": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", - "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", - "dependencies": { - "get-intrinsic": "^1.2.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/internmap": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", - "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", - "engines": { - "node": ">=12" - } - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/ipaddr.js": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.0.1.tgz", - "integrity": "sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", - "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", - "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", - "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", - "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-whitespace-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", - "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-word-character": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", - "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", - "dependencies": { - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.4.3", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/joi": { - "version": "17.8.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.8.3.tgz", - "integrity": "sha512-q5Fn6Tj/jR8PfrLrx4fpGH4v9qM6o+vDUfD4/3vxxyg34OmKcNqYZ1qn2mpLza96S8tL0p0rIw2gOZX+/cTg9w==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.1", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/khroma": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.0.0.tgz", - "integrity": "sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/layout-base": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/lilconfig": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", - "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", - "engines": { - "node": ">=10" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" - }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, - "node_modules/loader-utils": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", - "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" - }, - "node_modules/lodash.curry": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", - "integrity": "sha512-/u14pXGviLaweY5JI0IUzgzF2J6Ne8INyzAZjImcryjgkZ+ebruBxy2/JaOOkTqScddcYtakjhSaeemV8lR0tA==" - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" - }, - "node_modules/lodash.flow": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz", - "integrity": "sha512-ff3BX/tSioo+XojX4MOsOMhJw0nZoUEF011LX8g8d3gvjVbxd89cCio4BCXronjxcTUIJUoqKEUA+n4CqvvRPw==" - }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" - }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", - "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==" - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/markdown-escapes": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", - "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-zxdPn69hkQ1rm4J+2Cs2j6wDEv7O17TfXTJ33tl/+JPIoEmtV9t2ZzBM5LPHE8QlHsmVD8t3vPKCyY3oH+H8MQ==", - "dependencies": { - "unist-util-remove": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-definitions": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-4.0.0.tgz", - "integrity": "sha512-k8AJ6aNnUkB7IE+5azR9h81O5EQ/cTDXtWdMq9Kk5KcEW/8ritU5CeLg/9HhOC++nALHBlaogJ5jz0Ybk3kPMQ==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-10.0.1.tgz", - "integrity": "sha512-BW3LM9SEMnjf4HXXVApZMt8gLQWVNXc3jryK0nJu/rOXPOnlkUjmdkDlmxMirpbU9ILncGFIwLH/ubnWBbcdgA==", - "dependencies": { - "@types/mdast": "^3.0.0", - "@types/unist": "^2.0.0", - "mdast-util-definitions": "^4.0.0", - "mdurl": "^1.0.0", - "unist-builder": "^2.0.0", - "unist-util-generated": "^1.0.0", - "unist-util-position": "^3.0.0", - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", - "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" - }, - "node_modules/mdurl": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", - "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==" - }, - "node_modules/mdx-mermaid": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mdx-mermaid/-/mdx-mermaid-1.3.2.tgz", - "integrity": "sha512-8kw0tg3isKKBFzFwoe2DhIaEgKYtVeJXQtxZCCrdTPO0CTpXHnTHT0atDqsp7YkXi5iUCp/zAZPZu1cmr68T3w==", - "peerDependencies": { - "mermaid": ">=8.11.0", - "react": "^16.8.4 || ^17.0.0 || ^18.0.0", - "unist-util-visit": "^2.0.0" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memfs": { - "version": "3.4.13", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.4.13.tgz", - "integrity": "sha512-omTM41g3Skpvx5dSYeZIbXKcXoAVc/AoMNwn9TKx++L/gaen/+4TTttmu8ZSch5vfVJ8uJvGbroTsIlslRg6lg==", - "dependencies": { - "fs-monkey": "^1.0.3" - }, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/mermaid": { - "version": "9.4.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-9.4.0.tgz", - "integrity": "sha512-4PWbOND7CNRbjHrdG3WUUGBreKAFVnMhdlPjttuUkeHbCQmAHkwzSh5dGwbrKmXGRaR4uTvfFVYzUcg++h0DkA==", - "dependencies": { - "@braintree/sanitize-url": "^6.0.0", - "cytoscape": "^3.23.0", - "cytoscape-cose-bilkent": "^4.1.0", - "cytoscape-fcose": "^2.1.0", - "d3": "^7.0.0", - "dagre-d3-es": "7.0.8", - "dompurify": "2.4.3", - "elkjs": "^0.8.2", - "khroma": "^2.0.0", - "lodash-es": "^4.17.21", - "moment": "^2.29.4", - "non-layered-tidy-tree-layout": "^2.0.2", - "stylis": "^4.1.2", - "ts-dedent": "^2.2.0", - "uuid": "^9.0.0" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dependencies": { - "mime-db": "~1.33.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mini-css-extract-plugin": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.2.tgz", - "integrity": "sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==", - "dependencies": { - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/mrmime": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", - "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/multicast-dns": { - "version": "7.2.5", - "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", - "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", - "dependencies": { - "dns-packet": "^5.2.2", - "thunky": "^1.0.2" - }, - "bin": { - "multicast-dns": "cli.js" - } - }, - "node_modules/multimatch": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-4.0.0.tgz", - "integrity": "sha512-lDmx79y1z6i7RNx0ZGCPq1bzJ6ZoDDKbvh7jxr9SJcWLkShMzXrHbYVpTdnhNM5MXpDUxCQ4DgqVttVXlBgiBQ==", - "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/node-emoji": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", - "dependencies": { - "lodash": "^4.17.21" - } - }, - "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "engines": { - "node": ">= 6.13.0" - } - }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "node_modules/non-layered-tidy-tree-layout": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/non-layered-tidy-tree-layout/-/non-layered-tidy-tree-layout-2.0.2.tgz", - "integrity": "sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-range": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", - "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nprogress": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz", - "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==" - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.5.tgz", - "integrity": "sha512-yDNzckpM6ntyQiGTik1fKV1DcVDRS+w8bvpWNCBanvH5LfRX9O8WTHqQzG4RZwRAM4I0oU7TV11Lj5v0g20ibw==", - "dependencies": { - "array.prototype.reduce": "^1.0.5", - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.values": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", - "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obuf": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", - "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==" - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/open": { - "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/opener": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", - "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", - "bin": { - "opener": "bin/opener-bin.js" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", - "dependencies": { - "@types/retry": "0.12.0", - "retry": "^0.13.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/param-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", - "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parse-numeric-range": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/parse-numeric-range/-/parse-numeric-range-1.3.0.tgz", - "integrity": "sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==" - }, - "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-calc": { - "version": "8.2.4", - "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.2.4.tgz", - "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", - "dependencies": { - "postcss-selector-parser": "^6.0.9", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "postcss": "^8.2.2" - } - }, - "node_modules/postcss-colormin": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.3.1.tgz", - "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "colord": "^2.9.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-convert-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", - "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-comments": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", - "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-duplicates": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", - "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-empty": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", - "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-overridden": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", - "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-discard-unused": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-5.1.0.tgz", - "integrity": "sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-loader": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.2.tgz", - "integrity": "sha512-fUJzV/QH7NXUAqV8dWJ9Lg4aTkDCezpTS5HgJ2DvqznexTbSTxgi/dTECvTZ15BwKTtk8G/bqI/QTu2HPd3ZCg==", - "dependencies": { - "cosmiconfig": "^7.0.0", - "klona": "^2.0.5", - "semver": "^7.3.8" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "postcss": "^7.0.0 || ^8.0.1", - "webpack": "^5.0.0" - } - }, - "node_modules/postcss-merge-idents": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-5.1.1.tgz", - "integrity": "sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-longhand": { - "version": "5.1.7", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", - "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "stylehacks": "^5.1.1" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-merge-rules": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", - "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0", - "cssnano-utils": "^3.1.0", - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-font-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", - "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-gradients": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", - "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", - "dependencies": { - "colord": "^2.9.1", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-params": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", - "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", - "dependencies": { - "browserslist": "^4.21.4", - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-minify-selectors": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", - "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-modules-values": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", - "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/postcss-normalize-charset": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", - "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-display-values": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", - "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-positions": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", - "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-repeat-style": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", - "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-string": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", - "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-timing-functions": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", - "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-unicode": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", - "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", - "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", - "dependencies": { - "normalize-url": "^6.0.1", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-normalize-whitespace": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", - "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-ordered-values": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", - "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", - "dependencies": { - "cssnano-utils": "^3.1.0", - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-idents": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-5.2.0.tgz", - "integrity": "sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-initial": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", - "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", - "dependencies": { - "browserslist": "^4.21.4", - "caniuse-api": "^3.0.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-reduce-transforms": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", - "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", - "dependencies": { - "postcss-value-parser": "^4.2.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-sort-media-queries": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/postcss-sort-media-queries/-/postcss-sort-media-queries-4.3.0.tgz", - "integrity": "sha512-jAl8gJM2DvuIJiI9sL1CuiHtKM4s5aEIomkU8G3LFvbP+p8i7Sz8VV63uieTgoewGqKbi+hxBTiOKJlB35upCg==", - "dependencies": { - "sort-css-media-queries": "2.1.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "postcss": "^8.4.16" - } - }, - "node_modules/postcss-svgo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.1.0.tgz", - "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", - "dependencies": { - "postcss-value-parser": "^4.2.0", - "svgo": "^2.7.0" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/postcss-svgo/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/postcss-svgo/node_modules/css-tree": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", - "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", - "dependencies": { - "mdn-data": "2.0.14", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/postcss-svgo/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/postcss-svgo/node_modules/mdn-data": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", - "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==" - }, - "node_modules/postcss-svgo/node_modules/svgo": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", - "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^4.1.3", - "css-tree": "^1.1.3", - "csso": "^4.2.0", - "picocolors": "^1.0.0", - "stable": "^0.1.8" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/postcss-unique-selectors": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", - "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", - "dependencies": { - "postcss-selector-parser": "^6.0.5" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" - }, - "node_modules/postcss-zindex": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-5.1.0.tgz", - "integrity": "sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==", - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prettier": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", - "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-error": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", - "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", - "dependencies": { - "lodash": "^4.17.20", - "renderkid": "^3.0.0" - } - }, - "node_modules/pretty-quick": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/pretty-quick/-/pretty-quick-3.1.3.tgz", - "integrity": "sha512-kOCi2FJabvuh1as9enxYmrnBC6tVMoVOenMaBqRfsvBHB0cbpYHjdQEpSglpASDFEXVwplpcGR4CLEaisYAFcA==", - "dependencies": { - "chalk": "^3.0.0", - "execa": "^4.0.0", - "find-up": "^4.1.0", - "ignore": "^5.1.4", - "mri": "^1.1.5", - "multimatch": "^4.0.0" - }, - "bin": { - "pretty-quick": "bin/pretty-quick.js" - }, - "engines": { - "node": ">=10.13" - }, - "peerDependencies": { - "prettier": ">=2.0.0" - } - }, - "node_modules/pretty-quick/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-time": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pretty-time/-/pretty-time-1.1.0.tgz", - "integrity": "sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/prism-react-renderer": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-1.3.5.tgz", - "integrity": "sha512-IJ+MSwBWKG+SM3b2SUfdrhC+gu01QkV2KmRQgREThBfSQRoufqRfxfHUxpG1WcaFjP+kojcFyO9Qqtpgt3qLCg==", - "peerDependencies": { - "react": ">=0.14.9" - } - }, - "node_modules/prismjs": { - "version": "1.29.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz", - "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/promise": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", - "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", - "dependencies": { - "asap": "~2.0.3" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/prop-types": { - "version": "15.8.1", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", - "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", - "dependencies": { - "loose-envify": "^1.4.0", - "object-assign": "^4.1.1", - "react-is": "^16.13.1" - } - }, - "node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", - "dependencies": { - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-addr/node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pure-color": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/pure-color/-/pure-color-1.3.0.tgz", - "integrity": "sha512-QFADYnsVoBMw1srW7OVKEYjG+MbIa49s54w1MA1EDY6r2r/sTcKKYqRX1f4GYvnXP7eN/Pe9HFcX+hwzmrXRHA==" - }, - "node_modules/q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "dependencies": { - "inherits": "~2.0.3" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/range-parser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", - "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", - "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-base16-styling": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/react-base16-styling/-/react-base16-styling-0.6.0.tgz", - "integrity": "sha512-yvh/7CArceR/jNATXOKDlvTnPKPmGZz7zsenQ3jUwLzHkNUR0CvY3yGYJbWJ/nnxsL8Sgmt5cO3/SILVuPO6TQ==", - "dependencies": { - "base16": "^1.0.0", - "lodash.curry": "^4.0.1", - "lodash.flow": "^3.3.0", - "pure-color": "^1.2.0" - } - }, - "node_modules/react-countup": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/react-countup/-/react-countup-6.4.1.tgz", - "integrity": "sha512-FxQ7qaNnnbA+Px9RebOZY4Tbawa1bhgpVPlUqRemZb90mh3f3OqyHVgr1SZqnJgaRxR3uEYqgkszgkDgFVCeEw==", - "dependencies": { - "@rollup/plugin-babel": "^6.0.2", - "countup.js": "^2.4.1" - }, - "peerDependencies": { - "react": ">= 16.3.0" - } - }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", - "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dom": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", - "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==" - }, - "node_modules/react-fast-compare": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.0.tgz", - "integrity": "sha512-rtGImPZ0YyLrscKI9xTpV8psd6I8VAtjKCzQDlzyDvqJA8XOW78TXYQwNRNd8g8JZnDu8q9Fu/1v4HPAVwVdHA==" - }, - "node_modules/react-helmet-async": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", - "dependencies": { - "@babel/runtime": "^7.12.5", - "invariant": "^2.2.4", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.2.0", - "shallowequal": "^1.1.0" - }, - "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" - }, - "node_modules/react-json-view": { - "version": "1.21.3", - "resolved": "https://registry.npmjs.org/react-json-view/-/react-json-view-1.21.3.tgz", - "integrity": "sha512-13p8IREj9/x/Ye4WI/JpjhoIwuzEgUAtgJZNBJckfzJt1qyh24BdTm6UQNGnyTq9dapQdrqvquZTo3dz1X6Cjw==", - "dependencies": { - "flux": "^4.0.1", - "react-base16-styling": "^0.6.0", - "react-lifecycles-compat": "^3.0.4", - "react-textarea-autosize": "^8.3.2" - }, - "peerDependencies": { - "react": "^17.0.0 || ^16.3.0 || ^15.5.4", - "react-dom": "^17.0.0 || ^16.3.0 || ^15.5.4" - } - }, - "node_modules/react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" - }, - "node_modules/react-loadable": { - "name": "@docusaurus/react-loadable", - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-5.5.2.tgz", - "integrity": "sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==", - "dependencies": { - "@types/react": "*", - "prop-types": "^15.6.2" - }, - "peerDependencies": { - "react": "*" - } - }, - "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", - "dependencies": { - "@babel/runtime": "^7.10.3" - }, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "react-loadable": "*", - "webpack": ">=4.41.1 || 5.x" - } - }, - "node_modules/react-router": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", - "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "hoist-non-react-statics": "^3.1.0", - "loose-envify": "^1.3.1", - "path-to-regexp": "^1.7.0", - "prop-types": "^15.6.2", - "react-is": "^16.6.0", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-router-config": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", - "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", - "dependencies": { - "@babel/runtime": "^7.1.2" - }, - "peerDependencies": { - "react": ">=15", - "react-router": ">=5" - } - }, - "node_modules/react-router-dom": { - "version": "5.3.4", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", - "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", - "dependencies": { - "@babel/runtime": "^7.12.13", - "history": "^4.9.0", - "loose-envify": "^1.3.1", - "prop-types": "^15.6.2", - "react-router": "5.3.4", - "tiny-invariant": "^1.0.2", - "tiny-warning": "^1.0.0" - }, - "peerDependencies": { - "react": ">=15" - } - }, - "node_modules/react-textarea-autosize": { - "version": "8.4.0", - "resolved": "https://registry.npmjs.org/react-textarea-autosize/-/react-textarea-autosize-8.4.0.tgz", - "integrity": "sha512-YrTFaEHLgJsi8sJVYHBzYn+mkP3prGkmP2DKb/tm0t7CLJY5t1Rxix8070LAKb0wby7bl/lf2EeHkuMihMZMwQ==", - "dependencies": { - "@babel/runtime": "^7.10.2", - "use-composed-ref": "^1.3.0", - "use-latest": "^1.2.1" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==" - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", - "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "functions-have-names": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.2.tgz", - "integrity": "sha512-PC5ZysNb42zpFME6D/XlIgtNGdTl8bBOCw90xQLVMpzuuubJKYDWFAEuUNc+Cn8Z8724tg2SDhDRrkVEsqfDMg==", - "dependencies": { - "rc": "1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/relateurl": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", - "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/remark-emoji": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/remark-emoji/-/remark-emoji-2.2.0.tgz", - "integrity": "sha512-P3cj9s5ggsUvWw5fS2uzCHJMGuXYRb0NnZqYlNecewXt8QBU9n5vW3DUUKOhepS8F9CwdMx9B8a3i7pqFWAI5w==", - "dependencies": { - "emoticon": "^3.2.0", - "node-emoji": "^1.10.0", - "unist-util-visit": "^2.0.3" - } - }, - "node_modules/remark-footnotes": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/remark-footnotes/-/remark-footnotes-2.0.0.tgz", - "integrity": "sha512-3Clt8ZMH75Ayjp9q4CorNeyjwIxHFcTkaektplKGl2A1jNGEUey8cKL0ZC5vJwfcD5GFGsNLImLG/NGzWIzoMQ==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx": { - "version": "1.6.22", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-1.6.22.tgz", - "integrity": "sha512-phMHBJgeV76uyFkH4rvzCftLfKCr2RZuF+/gmVcaKrpsihyzmhXjA0BEMDaPTXG5y8qZOKPVo83NAOX01LPnOQ==", - "dependencies": { - "@babel/core": "7.12.9", - "@babel/helper-plugin-utils": "7.10.4", - "@babel/plugin-proposal-object-rest-spread": "7.12.1", - "@babel/plugin-syntax-jsx": "7.12.1", - "@mdx-js/util": "1.6.22", - "is-alphabetical": "1.0.4", - "remark-parse": "8.0.3", - "unified": "9.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-mdx/node_modules/@babel/core": { - "version": "7.12.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.9.tgz", - "integrity": "sha512-gTXYh3M5wb7FRXQy+FErKFAv90BnlOuNn1QkCK2lREoPAjrQCO49+HVSrFoe5uakFAF5eenS75KbO2vQiLrTMQ==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/generator": "^7.12.5", - "@babel/helper-module-transforms": "^7.12.1", - "@babel/helpers": "^7.12.5", - "@babel/parser": "^7.12.7", - "@babel/template": "^7.12.7", - "@babel/traverse": "^7.12.9", - "@babel/types": "^7.12.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.1", - "json5": "^2.1.2", - "lodash": "^4.17.19", - "resolve": "^1.3.2", - "semver": "^5.4.1", - "source-map": "^0.5.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/remark-mdx/node_modules/@babel/helper-plugin-utils": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz", - "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==" - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz", - "integrity": "sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.0", - "@babel/plugin-transform-parameters": "^7.12.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/@babel/plugin-syntax-jsx": { - "version": "7.12.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz", - "integrity": "sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/remark-mdx/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/remark-mdx/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remark-mdx/node_modules/unified": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.0.tgz", - "integrity": "sha512-vx2Z0vY+a3YoTj8+pttM3tiJHCwY5UFbYdiWrwBEbHmK8pvsPj2rtAX2BFfgXen8T39CJWblWRDT4L5WGXtDdg==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-parse": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-8.0.3.tgz", - "integrity": "sha512-E1K9+QLGgggHxCQtLt++uXltxEprmWzNfg+MxpfHsZlrddKzZ/hZyWHDbK3/Ap8HJQqYJRXP+jHczdL6q6i85Q==", - "dependencies": { - "ccount": "^1.0.0", - "collapse-white-space": "^1.0.2", - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-whitespace-character": "^1.0.0", - "is-word-character": "^1.0.0", - "markdown-escapes": "^1.0.0", - "parse-entities": "^2.0.0", - "repeat-string": "^1.5.4", - "state-toggle": "^1.0.0", - "trim": "0.0.1", - "trim-trailing-lines": "^1.0.0", - "unherit": "^1.0.4", - "unist-util-remove-position": "^2.0.0", - "vfile-location": "^3.0.0", - "xtend": "^4.0.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/remark-squeeze-paragraphs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/remark-squeeze-paragraphs/-/remark-squeeze-paragraphs-4.0.0.tgz", - "integrity": "sha512-8qRqmL9F4nuLPIgl92XUuxI3pFxize+F1H0e/W3llTk0UsjJaj01+RrirkMw7P21RKe4X6goQhYRSvNWX+70Rw==", - "dependencies": { - "mdast-squeeze-paragraphs": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/renderkid": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", - "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", - "dependencies": { - "css-select": "^4.1.3", - "dom-converter": "^0.2.0", - "htmlparser2": "^6.1.0", - "lodash": "^4.17.21", - "strip-ansi": "^6.0.1" - } - }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-like": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/require-like/-/require-like-0.1.2.tgz", - "integrity": "sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==", - "engines": { - "node": "*" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pathname": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/robust-predicates": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.1.tgz", - "integrity": "sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==" - }, - "node_modules/rtl-detect": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.0.4.tgz", - "integrity": "sha512-EBR4I2VDSSYr7PkBmFy04uhycIpDKp+21p/jARYXlCSjQksTBQcJ0HFUPOO79EPPH5JS6VAhiIQbycf0O3JAxQ==" - }, - "node_modules/rtlcss": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-3.5.0.tgz", - "integrity": "sha512-wzgMaMFHQTnyi9YOwsx9LjOxYXJPzS8sYnFaKm6R5ysvTkwzHiB0vxnbHwchHQT65PTdBjDG21/kQBWI7q9O7A==", - "dependencies": { - "find-up": "^5.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.3.11", - "strip-json-comments": "^3.1.1" - }, - "bin": { - "rtlcss": "bin/rtlcss.js" - } - }, - "node_modules/rtlcss/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/rtlcss/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rw": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", - "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==" - }, - "node_modules/rxjs": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.0.tgz", - "integrity": "sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" - }, - "node_modules/scheduler": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", - "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "dependencies": { - "loose-envify": "^1.1.0", - "object-assign": "^4.1.1" - } - }, - "node_modules/schema-utils": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", - "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/section-matter": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/section-matter/-/section-matter-1.0.0.tgz", - "integrity": "sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==", - "dependencies": { - "extend-shallow": "^2.0.1", - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/select-hose": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", - "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==" - }, - "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", - "dependencies": { - "node-forge": "^1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/send/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/serve-handler": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", - "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", - "dependencies": { - "bytes": "3.0.0", - "content-disposition": "0.5.2", - "fast-url-parser": "1.1.3", - "mime-types": "2.1.18", - "minimatch": "3.1.2", - "path-is-inside": "1.0.2", - "path-to-regexp": "2.2.1", - "range-parser": "1.2.0" - } - }, - "node_modules/serve-handler/node_modules/path-to-regexp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", - "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" - }, - "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", - "dependencies": { - "accepts": "~1.3.4", - "batch": "0.6.1", - "debug": "2.6.9", - "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/serve-index/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/serve-index/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" - }, - "node_modules/serve-index/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "node_modules/serve-index/node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shallowequal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", - "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sirv": { - "version": "1.0.19", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", - "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", - "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^1.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==" - }, - "node_modules/sitemap": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/sitemap/-/sitemap-7.1.1.tgz", - "integrity": "sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==", - "dependencies": { - "@types/node": "^17.0.5", - "@types/sax": "^1.2.1", - "arg": "^5.0.0", - "sax": "^1.2.4" - }, - "bin": { - "sitemap": "dist/cli.js" - }, - "engines": { - "node": ">=12.0.0", - "npm": ">=5.6.0" - } - }, - "node_modules/sitemap/node_modules/@types/node": { - "version": "17.0.45", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz", - "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/sockjs": { - "version": "0.3.24", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", - "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", - "dependencies": { - "faye-websocket": "^0.11.3", - "uuid": "^8.3.2", - "websocket-driver": "^0.7.4" - } - }, - "node_modules/sockjs/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/sort-css-media-queries": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.1.0.tgz", - "integrity": "sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==", - "engines": { - "node": ">= 6.3.0" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdy": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", - "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", - "dependencies": { - "debug": "^4.1.0", - "handle-thing": "^2.0.0", - "http-deceiver": "^1.2.7", - "select-hose": "^2.0.0", - "spdy-transport": "^3.0.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/spdy-transport": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", - "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", - "dependencies": { - "debug": "^4.1.0", - "detect-node": "^2.0.4", - "hpack.js": "^2.1.6", - "obuf": "^1.1.2", - "readable-stream": "^3.0.6", - "wbuf": "^1.7.3" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" - }, - "node_modules/stable": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", - "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", - "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" - }, - "node_modules/state-toggle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", - "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/std-env": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.3.2.tgz", - "integrity": "sha512-uUZI65yrV2Qva5gqE0+A7uVAvO40iPo6jGhs7s8keRfHCmtg+uB2X6EiLGCI9IgL1J17xGhvoOqSz79lzICPTA==" - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", - "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", - "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-object": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", - "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", - "dependencies": { - "get-own-enumerable-property-symbols": "^3.0.0", - "is-obj": "^1.0.1", - "is-regexp": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom-string": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", - "integrity": "sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/style-to-object": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-0.3.0.tgz", - "integrity": "sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==", - "dependencies": { - "inline-style-parser": "0.1.1" - } - }, - "node_modules/stylehacks": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.1.tgz", - "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", - "dependencies": { - "browserslist": "^4.21.4", - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >=14.0" - }, - "peerDependencies": { - "postcss": "^8.2.15" - } - }, - "node_modules/stylis": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.1.3.tgz", - "integrity": "sha512-GP6WDNWf+o403jrEp9c5jibKavrtLW+/qYGhFxFrG8maXhwTBI7gLLhiBb0o7uFccWN+EOS9aMO6cGHWAO07OA==" - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-parser": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/svg-parser/-/svg-parser-2.0.4.tgz", - "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==" - }, - "node_modules/svgo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", - "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", - "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", - "dependencies": { - "chalk": "^2.4.1", - "coa": "^2.0.2", - "css-select": "^2.0.0", - "css-select-base-adapter": "^0.1.1", - "css-tree": "1.0.0-alpha.37", - "csso": "^4.0.2", - "js-yaml": "^3.13.1", - "mkdirp": "~0.5.1", - "object.values": "^1.1.0", - "sax": "~1.2.4", - "stable": "^0.1.8", - "unquote": "~1.1.1", - "util.promisify": "~1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/svgo/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/svgo/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/svgo/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/svgo/node_modules/css-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", - "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^3.2.1", - "domutils": "^1.7.0", - "nth-check": "^1.0.2" - } - }, - "node_modules/svgo/node_modules/css-what": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", - "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/svgo/node_modules/dom-serializer": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", - "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", - "dependencies": { - "domelementtype": "^2.0.1", - "entities": "^2.0.0" - } - }, - "node_modules/svgo/node_modules/domutils": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", - "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", - "dependencies": { - "dom-serializer": "0", - "domelementtype": "1" - } - }, - "node_modules/svgo/node_modules/domutils/node_modules/domelementtype": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", - "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" - }, - "node_modules/svgo/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/svgo/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/svgo/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/svgo/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/svgo/node_modules/nth-check": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", - "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", - "dependencies": { - "boolbase": "~1.0.0" - } - }, - "node_modules/svgo/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.16.4", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.4.tgz", - "integrity": "sha512-5yEGuZ3DZradbogeYQ1NaGz7rXVBDWujWlx1PT8efXO6Txn+eWbfKqB2bTDVmFXmePFkoLU6XI8UektMIEA0ug==", - "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.6.tgz", - "integrity": "sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.14", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.0", - "terser": "^5.14.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/terser-webpack-plugin/node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" - }, - "node_modules/thunky": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", - "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" - }, - "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/totalist": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", - "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" - }, - "node_modules/trim": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", - "integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ==" - }, - "node_modules/trim-trailing-lines": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", - "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trough": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", - "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "engines": { - "node": ">=6.10" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/type-fest": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", - "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/ua-parser-js": { - "version": "0.7.33", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", - "integrity": "sha512-s8ax/CeZdK9R/56Sui0WM6y9OFREJarMRHqLB2EwkovemBxNQ+Bqu8GAsUnVcXKgphb++ghr/B2BZx4mahujPw==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/ua-parser-js" - }, - { - "type": "paypal", - "url": "https://paypal.me/faisalman" - } - ], - "engines": { - "node": "*" - } - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unherit": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", - "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", - "dependencies": { - "inherits": "^2.0.0", - "xtend": "^4.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "engines": { - "node": ">=4" - } - }, - "node_modules/unified": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/unified/-/unified-9.2.2.tgz", - "integrity": "sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==", - "dependencies": { - "bail": "^1.0.0", - "extend": "^3.0.0", - "is-buffer": "^2.0.0", - "is-plain-obj": "^2.0.0", - "trough": "^1.0.0", - "vfile": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unist-builder": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-2.0.3.tgz", - "integrity": "sha512-f98yt5pnlMWlzP539tPc4grGMsFaQQlP/vM396b00jngsiINumNmsY8rkXjfoi1c6QaM8nQ3vaGDuoKWbe/1Uw==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-generated": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", - "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-4.1.0.tgz", - "integrity": "sha512-ZOQSsnce92GrxSqlnEEseX0gi7GH9zTJZ0p9dtu87WRb/37mMPO2Ilx1s/t9vBHrFhbgweUwb+t7cIn5dxPhZg==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", - "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unist-util-remove/-/unist-util-remove-2.1.0.tgz", - "integrity": "sha512-J8NYPyBm4baYLdCbjmf1bhPu45Cr1MWTm77qd9istEkzWpnN6O9tMsEbB2JhNnBCqGENRqEWomQ+He6au0B27Q==", - "dependencies": { - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-remove-position": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-2.0.1.tgz", - "integrity": "sha512-fDZsLYIe2uT+oGFnuZmy73K6ZxOPG/Qcm+w7jbEjaFcJgbQ6cqjs/eSPzXhsmGpAsWPkqZM9pYjww5QTn3LHMA==", - "dependencies": { - "unist-util-visit": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-2.0.3.tgz", - "integrity": "sha512-iJ4/RczbJMkD0712mGktuGpm/U4By4FfDonL7N/9tATGIF4imikjOuagyMY53tnZq3NP6BcmlrHhEKAfGWjh7Q==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0", - "unist-util-visit-parents": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-3.1.1.tgz", - "integrity": "sha512-1KROIZWo6bcMrZEwiH2UrXDyalAa0uqzWCxCJj6lPOvTve2WkfgCytoDTPaMnodXh1WrXOq0haVYHj99ynJlsg==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-is": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unquote": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", - "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "node_modules/update-notifier/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/update-notifier/node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/update-notifier/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/uri-js/node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "engines": { - "node": ">=6" - } - }, - "node_modules/url-loader": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-4.1.1.tgz", - "integrity": "sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==", - "dependencies": { - "loader-utils": "^2.0.0", - "mime-types": "^2.1.27", - "schema-utils": "^3.0.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "file-loader": "*", - "webpack": "^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "file-loader": { - "optional": true - } - } - }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/use-composed-ref": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/use-composed-ref/-/use-composed-ref-1.3.0.tgz", - "integrity": "sha512-GLMG0Jc/jiKov/3Ulid1wbv3r54K9HlMW29IWcDFPEqFkSO2nS0MuefWgMJpeHQ9YJeXDL3ZUF+P3jdXlZX/cQ==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/use-isomorphic-layout-effect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/use-isomorphic-layout-effect/-/use-isomorphic-layout-effect-1.1.2.tgz", - "integrity": "sha512-49L8yCO3iGT/ZF9QttjwLF/ZD9Iwto5LnH5LmEdk/6cFmXddqi2ulF0edxTwjj+7mqvpVVGQWvbXZdn32wRSHA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-latest": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/use-latest/-/use-latest-1.2.1.tgz", - "integrity": "sha512-xA+AVm/Wlg3e2P/JiItTziwS7FK92LWrDB0p+hgXloIMuVCeJJ8v6f0eeHyPZaJrM+usM1FkFfbNCrJGs8A/zw==", - "dependencies": { - "use-isomorphic-layout-effect": "^1.1.1" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - } - } - }, - "node_modules/use-sync-external-store": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", - "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/util.promisify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", - "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", - "dependencies": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.2", - "has-symbols": "^1.0.1", - "object.getownpropertydescriptors": "^2.1.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/utila": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" - }, - "node_modules/utility-types": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", - "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==", - "engines": { - "node": ">= 4" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/value-equal": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/vfile": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", - "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", - "dependencies": { - "@types/unist": "^2.0.0", - "is-buffer": "^2.0.0", - "unist-util-stringify-position": "^2.0.0", - "vfile-message": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-location": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-3.2.0.tgz", - "integrity": "sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", - "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", - "dependencies": { - "@types/unist": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/wait-on": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/wait-on/-/wait-on-6.0.1.tgz", - "integrity": "sha512-zht+KASY3usTY5u2LgaNqn/Cd8MukxLGjdcZxT2ns5QzDmTFc4XoWBgC+C/na+sMRZTuVygQoMYwdcVjHnYIVw==", - "dependencies": { - "axios": "^0.25.0", - "joi": "^17.6.0", - "lodash": "^4.17.21", - "minimist": "^1.2.5", - "rxjs": "^7.5.4" - }, - "bin": { - "wait-on": "bin/wait-on" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dependencies": { - "minimalistic-assert": "^1.0.0" - } - }, - "node_modules/web-namespaces": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-1.1.4.tgz", - "integrity": "sha512-wYxSGajtmoP4WxfejAPIr4l0fVh+jeMXZb08wNc0tMg6xsfZXj3cECqIK0G7ZAqUq0PP8WlMDtaOGVBTAWztNw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" - }, - "node_modules/webpack": { - "version": "5.75.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.75.0.tgz", - "integrity": "sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==", - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-bundle-analyzer": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.8.0.tgz", - "integrity": "sha512-ZzoSBePshOKhr+hd8u6oCkZVwpVaXgpw23ScGLFpR6SjYI7+7iIWYarjN6OEYOfRt8o7ZyZZQk0DuMizJ+LEIg==", - "dependencies": { - "@discoveryjs/json-ext": "0.5.7", - "acorn": "^8.0.4", - "acorn-walk": "^8.0.0", - "chalk": "^4.1.0", - "commander": "^7.2.0", - "gzip-size": "^6.0.0", - "lodash": "^4.17.20", - "opener": "^1.5.2", - "sirv": "^1.0.7", - "ws": "^7.3.1" - }, - "bin": { - "webpack-bundle-analyzer": "lib/bin/analyzer.js" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/webpack-bundle-analyzer/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-dev-middleware": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", - "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", - "dependencies": { - "colorette": "^2.0.10", - "memfs": "^3.4.3", - "mime-types": "^2.1.31", - "range-parser": "^1.2.1", - "schema-utils": "^4.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.0.0 || ^5.0.0" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-middleware/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack-dev-middleware/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.1.tgz", - "integrity": "sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==", - "dependencies": { - "@types/bonjour": "^3.5.9", - "@types/connect-history-api-fallback": "^1.3.5", - "@types/express": "^4.17.13", - "@types/serve-index": "^1.9.1", - "@types/serve-static": "^1.13.10", - "@types/sockjs": "^0.3.33", - "@types/ws": "^8.5.1", - "ansi-html-community": "^0.0.8", - "bonjour-service": "^1.0.11", - "chokidar": "^3.5.3", - "colorette": "^2.0.10", - "compression": "^1.7.4", - "connect-history-api-fallback": "^2.0.0", - "default-gateway": "^6.0.3", - "express": "^4.17.3", - "graceful-fs": "^4.2.6", - "html-entities": "^2.3.2", - "http-proxy-middleware": "^2.0.3", - "ipaddr.js": "^2.0.1", - "open": "^8.0.9", - "p-retry": "^4.5.0", - "rimraf": "^3.0.2", - "schema-utils": "^4.0.0", - "selfsigned": "^2.1.1", - "serve-index": "^1.9.1", - "sockjs": "^0.3.24", - "spdy": "^4.0.2", - "webpack-dev-middleware": "^5.3.1", - "ws": "^8.4.2" - }, - "bin": { - "webpack-dev-server": "bin/webpack-dev-server.js" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^4.37.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-dev-server/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/webpack-dev-server/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/webpack-dev-server/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.12.1.tgz", - "integrity": "sha512-1qo+M9Ba+xNhPB+YTWUlK6M17brTut5EXbcBaMRN5pH5dFrXz7lzz1ChFSUq3bOUl8yEvSenhHmYUNJxFzdJew==", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/webpack-merge": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", - "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", - "dependencies": { - "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==" - }, - "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/webpackbar": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-5.0.2.tgz", - "integrity": "sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==", - "dependencies": { - "chalk": "^4.1.0", - "consola": "^2.15.3", - "pretty-time": "^1.1.0", - "std-env": "^3.0.1" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "webpack": "3 || 4 || 5" - } - }, - "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", - "dependencies": { - "http-parser-js": ">=0.5.1", - "safe-buffer": ">=5.1.0", - "websocket-extensions": ">=0.1.1" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/websocket-extensions": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", - "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", - "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/widest-line": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", - "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", - "dependencies": { - "string-width": "^5.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==" - }, - "node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-js": { - "version": "1.6.11", - "resolved": "https://registry.npmjs.org/xml-js/-/xml-js-1.6.11.tgz", - "integrity": "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==", - "dependencies": { - "sax": "^1.2.4" - }, - "bin": { - "xml-js": "bin/cli.js" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-1.0.5.tgz", - "integrity": "sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} From 7c1017f56936994238187b01ea76e40200bf0de0 Mon Sep 17 00:00:00 2001 From: valeriacaracciolo <71491710+valeriacaracciolo@users.noreply.github.com> Date: Wed, 16 Aug 2023 12:53:42 +0200 Subject: [PATCH 539/665] Create CoinFabrik_On_Ink_Integration_Tests.md (#1875) Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> --- .../CoinFabrik_On_Ink_Integration_Tests.md | 158 ++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 applications/CoinFabrik_On_Ink_Integration_Tests.md diff --git a/applications/CoinFabrik_On_Ink_Integration_Tests.md b/applications/CoinFabrik_On_Ink_Integration_Tests.md new file mode 100644 index 00000000000..1e485fe6191 --- /dev/null +++ b/applications/CoinFabrik_On_Ink_Integration_Tests.md @@ -0,0 +1,158 @@ +# CoinFabrik On Ink Integration Tests +- **Team Name:** CoinFabrik (Nektra S.A) +- **Payment Address:** 0xf488039EDe6B38D7689fDCC6A9FC2dd0EF39D54e (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +CoinFabrik has successfully accomplished two previous grant milestones for the development of [Scout](https://coinfabrik.github.io/scout/), an open source bug-detection tool for ink! targetted to developers and smart contract auditors. + +We have completed a [Proof of Concept](https://github.com/CoinFabrik/web3-grant ) and a [Prototype](https://github.com/CoinFabrik/scout ). + +During these iterations, we encountered certain challenges, especially while developing fuzzing detectors. These challenges included limitations in integration tests and differences with the ink! E2E testing environment. Specifically, we faced difficulties when working with functions in integration testing related to cross contract calls, storage, gas usage, and delegatecall. + +With this grant, our objective is to conduct a comprehensive analysis to identify any other missing functionalities in integration tests, and to propose and develop new testing features based on our findings. + +Our intention is to `flatten the anvil` of ink! integration testing. With a properly flattened anvil, quality tools can be built. + +### Project Details + +As mentioned before, we have already identified a number of E2E functionalities that are not present in integration tests. + +For example: +- A different implementation of storage in integration testing vs E2E testing. The same storage limitations present in E2E should also be present in integration testing. +- Inability to perform delegatecall in integration tests. +- Inability to perform cross contract calls in integration tests. +- Gas consumption is not integrated. +- Address inconsistencies. Alice and Bob addresses differ between integration and E2E tests environments. + +This list is not exhaustive, as it simply highlights some difficulties we encountered while conducting integration tests for vulnerability examples during the development of detectors for our static analyzer, [Scout](https://github.com/CoinFabrik/scout). + +The overall advantage of integration tests is that, since they are performed off-chain, they are significantly faster than E2E tests, which imply compiling and deploying the smart contract to a Substrate node. We believe that having a complete set of functionalities for integration tests will allow developers to thoroughly test their code more quickly. Particularly, we believe the impossibility to perform cross contract calls in integration tests is a limitation for developers trying to quickly assess interactions across different contracts. This can be done through E2E tests, but it takes more time. + +Our proposal is to begin our work by making a full review of the current functionalities of integration tests and E2E tests. From this revision, we will assemble a comparative table, identifying differences and proposing improvements and missing developments to be made for integration tests. For specific cases where the enhancement or missing functionality is clear, and the implementation of the enhancement is deemed feasible, code examples could be provided to show the current limitations of integration tests. + +Furthermore, we need to thoroughly analyze the complexity and feasibility of generating the necessary tests. The analysis we just mentioned will allow us to better understand which improvements will truly be possible to develop. This includes listing the missing functionalities in integration tests that are available for E2E testing, analyzing the feasibility of their implementation, and prioritizing their development order. + + + +### Ecosystem Fit + +Having a comprehensive set of functionalities available for integration tests would bring numerous benefits to the entire community, including improved reliability, code quality and maturity, and faster feedback loops. + +In the context of fuzzing detectors, integration tests are useful during their development in order to identify fuzzing parameters, and they are quicker than E2E tests. We learned this while working on fuzzing detection techniques during the [Proof of Concept of Scout](https://github.com/CoinFabrik/web3-grant), which we performed in collaboration with [researchers from the University of Buenos Aires](https://lafhis.dc.uba.ar/home). We believe that, having a complete set of functionalities for integration tests would be useful for other teams working in the development of fuzzing detectors for ink! smart contracts (e.g: [Fuzzland](https://github.com/w3f/Grants-Program/blob/master/applications/FuzzLand.md) team developing [Ityfuzz](https://github.com/fuzzland/ityfuzz), [Klevoya](https://github.com/w3f/Grants-Program/blob/master/applications/klevoya_fuzzer.md ) team). + +## Team :busts_in_silhouette: + +### Team members + +- Ariel Wassbein, Head of Research. +- Diego Kelyacoubian, Head of Program Management. +- Valeria Caracciolo, Business Development. +- CoinFabrik's development and auditing team. + + +### Contact + +- **Contact Name:** Valeria Caracciolo +- **Contact Email:** valeria.caracciolo@coinfabrik.com +- **Website:** https://www.coinfabrik.com/ + +### Legal Structure + +- **Registered Address:** Dr. Emilio Ravignani 2394, C1425 CABA, Argentina. +- **Registered Legal Entity:** Nektra S.A. + +### Team's experience +We are a research and development company specialized in Web3, with a strong background in cybersecurity. Founded in 2014, we have worked on over 200 blockchain-related projects, EVM based and also for Solana, Algorand, and Polkadot. Beyond development, we offer security audits through a dedicated in-house team of senior cybersecurity professionals, currently working on code in Substrate, Solidity, Clarity, Rust, and TEAL. + +Our team has an academic background in computer science and mathematics, with work experience focused on cybersecurity and software development, including academic publications, patents turned into products, and conference presentations. Furthermore, we have an ongoing collaboration on knowledge transfer and open-source projects with the University of Buenos Aires. + +As well, CoinFabrik has been providing Quality Assurance as a service to development teams, accumulating valuable expertise in the field for a considerable period of time. Our clients highly appreciate this service, and as a result, we are eager to expand our capabilities to the ink! ecosystem. + + +### Team Code Repos + +- https://github.com/CoinFabrik +- https://github.com/CoinFabrik/scout +- https://github.com/CoinFabrik/web3-grant + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/arielwaissbein/ +- https://www.linkedin.com/in/diego-kelyacoubian-5417613/ +- https://www.linkedin.com/in/valeriacaracciolo/ + + +## Development Status :open_book: + +We have already identified some improvements to be made in integration tests. We also identified how they are implemented in E2E tests and provide an initial level of complexity / feasibility associated to their development: + +| Issue Number | Issue Name | Description | Feasibility | References | +|--------------|------------|-------------|-------------|------------| +| 1 | Alice and Bob's addresses | Alice and Bob's addresses should match across integration and E2E tests. | Feasible | Accounts on Integration Tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/test_api.rs#L333)
Accounts on E2E tests: Addresses are used from this library [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/primitives/keyring/src/sr25519.rs#L108C38-L108C38)
Account addresses are different for both Alice and Bob. | +| 2 | Storage Limitations | The storage in the integration environment should have the same limitations as in the blockchain environment (end-to-end). | Feasible | Set_contract_storage is implemented differently in integration tests vs E2E tests.
In integration tests, set_contract_storage is implemented this way: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L185)
In E2E tests, the implementation calls the ext::set_storage function, this function is implemented in a way that checks maximum value lengths: [Link1](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/on_chain/impls.rs#L215) [Link2](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L790)
The checking of maximum value lengths through the ext::set_storage function is not implemented in integration tests. | +| 3 | Delegate call | Ability to use delegate calls in integration tests. | Complex, yet feasible. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L449)
Notice in line 460: “off-chain environment does not support delegated contract invocation"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1467) | +| 4 | Cross contract calls | Ability to perform contract-to-contract calls during integration tests. | To be evaluated. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L432)
Notice in line 446: “off-chain environment does not support contract invocation"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1412) | +| 5 | Gas usage | Gas usage in the integration environment should have the same limitations as in the blockchain environment (end-to-end). | To be evaluated. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/engine/src/ext.rs#L404)
Notice in line 405: “off-chain environment does not yet support gas_left"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1974) | + +We validated the idea of the analysis and development described in this application with Sam Ruberti from the ink! Ecosystem and David Hawig from Web3 Foundation, who encouraged us to apply for this grant. + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 weeks +- **Full-Time Equivalent (FTE):** 2.5 FTE +(0.25 Project Manager, +0.25 Tech Lead, +1 Full time Sr. Rust Developer, +1 Full Time SemiSr. Rust Developer) +- **Total Costs:** 13,500 USD + + +### Milestone 1: Analysis +- **Estimated duration:** 2 weeks +- **FTE:** 2.5 +- **Costs:** 13,500 USD + +| Number | Deliverable | Specification | +| ----- | ----------- | ------------- | +| 0a. | License | MIT +| 0b. | Documentation | Create a comprehensive report that compares the functionalities of integration tests and E2E (End-to-End) tests. The report's focus is to identify what can be accomplished in E2E tests but not currently in integration tests, as well as any inconsistencies. If applicable, we will provide suggestions that are not covered by either test type. +| 0c. | Testing and Testing Guide | No tests will be produced at this stage. +| 0d. | Docker | Does not apply at this stage. +| 0e. | Article | We will prepare a summary report and publish it on our blog https://blog.coinfabrik.com/ + **1** | Analyze | Study and compare Integration and E2E (End-to-End) tests in ink!. + **2** | Evaluate | Assign a complexity level to each finding based on the difficulty of implementing the missing or enhanced functionality. + **3** | Estimate | Indicate an order of priority under which the missing functionalities shall be developed during the next milestone, where the functionalities are effectively implemented for integration tests. + + +## Future Plans + +After finishing Milestone 1: Analysis, and having a good understanding of which missing functionalities in the integration testing environment can be developed, as well as an estimation of the effort required to develop them, we will submit a new grant proposal for a second milestone. The intention of this second milestone is to effectively implement these missing features. We detail in the table bellow its deliverables; its estimated duration is to be defined upon the delivery of the initial Analysis milestone. + +| Number | Deliverable | Specification | +| ----- | ----------- | ------------- | +| 0a. | License | MIT +| 0b. | Documentation | We will update our previous report. This includes the current status of identified use cases. +| 0c. | Testing and Testing Guide | We will develop the missing functionalities identified, and submit a pull request to the corresponding repository. The newly developed functionalities will be documented and a testing guide will be included. +| 0d. | Docker | Does not apply at this stage. +| 0e. | Article | We will publish an updated report in our blog at https://blog.coinfabrik.com/. + **1** | Develop | Build the necessary improvements and missing tests for the identified use cases outlined in the first milestone. + **2** | Analyze and Estimate | If applicable, suggest additional tests for this or next milestones. + +Moving forward, we have two projects in mind: +1. Research and develop an advanced testing automation solution for ink! smart contracts. +2. Improve our open source bug-detection tool [Scout](https://coinfabrik.github.io/scout/) +## Referral Program (optional) :moneybag: + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Richard Casey from Parity brought this program to our attention, and we have already successfully delivered two applications as a result. + +During our inquiries for this application, we briefly consulted Sam Ruberti from the ink! Team and David Hawig from the Web3 Foundation. Their encouragement motivated us to proceed with this presentation. + From 1f60587df4e65f41a2c771b9b52f44532b1a0807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 16 Aug 2023 13:51:29 +0200 Subject: [PATCH 540/665] Update CoinFabrik_On_Ink_Integration_Tests.md Fix HTML tags --- applications/CoinFabrik_On_Ink_Integration_Tests.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/applications/CoinFabrik_On_Ink_Integration_Tests.md b/applications/CoinFabrik_On_Ink_Integration_Tests.md index 1e485fe6191..df2ba2e1c0d 100644 --- a/applications/CoinFabrik_On_Ink_Integration_Tests.md +++ b/applications/CoinFabrik_On_Ink_Integration_Tests.md @@ -92,11 +92,11 @@ We have already identified some improvements to be made in integration tests. We | Issue Number | Issue Name | Description | Feasibility | References | |--------------|------------|-------------|-------------|------------| -| 1 | Alice and Bob's addresses | Alice and Bob's addresses should match across integration and E2E tests. | Feasible | Accounts on Integration Tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/test_api.rs#L333)
Accounts on E2E tests: Addresses are used from this library [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/primitives/keyring/src/sr25519.rs#L108C38-L108C38)
Account addresses are different for both Alice and Bob. | -| 2 | Storage Limitations | The storage in the integration environment should have the same limitations as in the blockchain environment (end-to-end). | Feasible | Set_contract_storage is implemented differently in integration tests vs E2E tests.
In integration tests, set_contract_storage is implemented this way: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L185)
In E2E tests, the implementation calls the ext::set_storage function, this function is implemented in a way that checks maximum value lengths: [Link1](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/on_chain/impls.rs#L215) [Link2](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L790)
The checking of maximum value lengths through the ext::set_storage function is not implemented in integration tests. | -| 3 | Delegate call | Ability to use delegate calls in integration tests. | Complex, yet feasible. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L449)
Notice in line 460: “off-chain environment does not support delegated contract invocation"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1467) | -| 4 | Cross contract calls | Ability to perform contract-to-contract calls during integration tests. | To be evaluated. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L432)
Notice in line 446: “off-chain environment does not support contract invocation"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1412) | -| 5 | Gas usage | Gas usage in the integration environment should have the same limitations as in the blockchain environment (end-to-end). | To be evaluated. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/engine/src/ext.rs#L404)
Notice in line 405: “off-chain environment does not yet support gas_left"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1974) | +| 1 | Alice and Bob's addresses | Alice and Bob's addresses should match across integration and E2E tests. | Feasible | Accounts on Integration Tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/test_api.rs#L333)
Accounts on E2E tests: Addresses are used from this library [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/primitives/keyring/src/sr25519.rs#L108C38-L108C38)
Account addresses are different for both Alice and Bob. | +| 2 | Storage Limitations | The storage in the integration environment should have the same limitations as in the blockchain environment (end-to-end). | Feasible | Set_contract_storage is implemented differently in integration tests vs E2E tests.
In integration tests, set_contract_storage is implemented this way: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L185)
In E2E tests, the implementation calls the ext::set_storage function, this function is implemented in a way that checks maximum value lengths: [Link1](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/on_chain/impls.rs#L215) [Link2](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L790)
The checking of maximum value lengths through the ext::set_storage function is not implemented in integration tests. | +| 3 | Delegate call | Ability to use delegate calls in integration tests. | Complex, yet feasible. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L449)
Notice in line 460: “off-chain environment does not support delegated contract invocation"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1467) | +| 4 | Cross contract calls | Ability to perform contract-to-contract calls during integration tests. | To be evaluated. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/env/src/engine/off_chain/impls.rs#L432)
Notice in line 446: “off-chain environment does not support contract invocation"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1412) | +| 5 | Gas usage | Gas usage in the integration environment should have the same limitations as in the blockchain environment (end-to-end). | To be evaluated. | Not implemented in integration tests: [Link](https://github.com/paritytech/ink/blob/c2af39883aab48c71dc09dac5d06583f2e84dc54/crates/engine/src/ext.rs#L404)
Notice in line 405: “off-chain environment does not yet support gas_left"
In E2E tests, it is implemented here: [Link](https://github.com/paritytech/substrate/blob/28e906dffcaa91e85f59aff628d953ebeb036ae2/frame/contracts/src/wasm/runtime.rs#L1974) | We validated the idea of the analysis and development described in this application with Sam Ruberti from the ink! Ecosystem and David Hawig from Web3 Foundation, who encouraged us to apply for this grant. From 48a6c296274277308d3033945f1a7e17fe64546e Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 16 Aug 2023 14:15:42 +0200 Subject: [PATCH 541/665] Update index.md Add CoinFabrik --- applications/index.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/applications/index.md b/applications/index.md index c083904e114..6142ba33f9a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -56,6 +56,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Eiger](https://www.eiger.co/) | [Storage solution on Polkadot](./Eiger_Storage_on_Polkadot_1.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang Playground](Solang_Playground.md) | [GitHub](https://github.com/salaheldinsoliman) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [P2P data platform](data_platform_with_deep_indexed_data_and_staking_reports.md) | [GitHub](https://github.com/p2p-org) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☐ | ☐ | + [🔝](#2023) From 5a30ab5de63953e4197a443057843b04e19db42d Mon Sep 17 00:00:00 2001 From: Kutsal Kaan Bilgin Date: Thu, 17 Aug 2023 01:38:55 +0300 Subject: [PATCH 542/665] Amendment for Chainviz v1 application. (#1906) --- applications/chainviz.md | 156 +++++++++++++++++---------------------- 1 file changed, 68 insertions(+), 88 deletions(-) diff --git a/applications/chainviz.md b/applications/chainviz.md index d5e34c04e8f..2cee28506e6 100644 --- a/applications/chainviz.md +++ b/applications/chainviz.md @@ -1,4 +1,4 @@ -# ChainViz v1 +# Chainviz v1 - **Team Name:** Helikon Labs - **Payment Address:** `bc1qxjy7sw0ffvpq86t6hj3mmqhnfz2hxt6pk7zdz0` (BTC) @@ -8,9 +8,13 @@ ### Overview -ChainViz Alpha web application, available at [alpha.chainviz.app](https://alpha.chainviz.app), is an [open-source](https://github.com/helikon-labs/chainviz) real-time 3D visualization of the Kusama relay chain block production process. +Chainviz web application alpha version, available at [alpha.chainviz.app](https://alpha.chainviz.app), is an [open-source](https://github.com/helikon-labs/chainviz) real-time 3D visualization of the Kusama relay chain block production process. -![](https://raw.githubusercontent.com/helikon-labs/chainviz/development/readme_files/screenshot_01.png) +

+ +
+ Chainviz alpha version +

Application in its current alpha version provides the following features: @@ -23,9 +27,9 @@ Application in its current alpha version provides the following features: - Active validator list and search over identity/address - Validator details panel upon click on a validator in the 3D model, or the validator list -**This application is to fund the building of the first major version of ChainViz**, with the following features/visualizations: +**This application is to fund the building of the first major version of Chainviz**, with the following features/visualizations: -- Complete rebuild of the the existing functionality with improved UI/UX and WebGL models, shaders and animations +- Complete rebuild of the the existing functionality with improved UI/UX and WebGL models and animations - Additional support for Polkadot - New visualizations - Parachains @@ -33,22 +37,22 @@ Application in its current alpha version provides the following features: - XCM messages between parachains, or from parachains to relay chains - Block content - Author - - Extrinsics and arguments - - Events and arguments + - Extrinsics + - Events -With these additional features, ChainViz is going to become a **complete real-time visualization** of the Polkadot and Kusama relay chains and their parachains. +With these additional features, Chainviz is going to become a **complete real-time visualization** of the Polkadot and Kusama relay chains and their parachains. ### Project Details #### Organization -ChainViz v1 upgrade is a collaboration between [Helikon Labs](https://helikon.io) and [Klad](https://klad.design), carried out under the management of Helikon Labs. +Chainviz v1 upgrade is a collaboration between [Helikon Labs](https://helikon.io) and [Klad](https://klad.design), carried out under the management of Helikon Labs. #### System Architecture ##### Current System -ChainViz Alpha currently utilizes [SubVT backend services](https://github.com/helikon-labs/subvt-backend) and Polkadot JS API as follows. +Chainviz alpha version currently utilizes [SubVT backend services](https://github.com/helikon-labs/subvt-backend) and Polkadot JS API as follows. - SubVT active validator list [service](https://github.com/helikon-labs/subvt-backend/tree/development/subvt-validator-list-server) - List of all active validators @@ -70,54 +74,46 @@ ChainViz Alpha currently utilizes [SubVT backend services](https://github.com/he - Utilized to display the block production animation - Identify uncle blocks and visualize them -Current ChainViz Alpha system architecture can be illustrated as follows. +Current Chainviz alpha version system architecture can be illustrated as follows.

- +
- Figure 1 ChainViz Alpha system architecture + Figure 1 Chainviz alpha system architecture

##### Proposed Upgrade Proposed upgrade to the first major version requires the following additional data: -- Block details - - Extrinsic list and parameters - - XCM messages (`XcmPallet` extrinsics) - - Event list and parameters -- Validator details +- Block content + - Extrinsic list + - Event list +- Parachains +- XCM messages Proposed system architecture for the upgrade can be illustrated as follows.

- +
- Figure 2 ChainViz v1 proposed system architecture + Figure 2 Chainviz v1 proposed system architecture

-Upgraded system utilizes the **to-be-developed** SubVT `Block Details Service` to access the block content (i.e. extrinsics and events), and the **existing** SubVT `Validator Details Service` for any necessary validator data that is not available through the validator list service. - -##### Block Details Service +Upgraded system utilizes: -A new addition to the [SubVT Backend](https://github.com/helikon-labs/subvt-backend), `Block Details Service` is going to be a websockets subscription service that pushes in JSON format at every new block to a subscribed client: - -- Block hash, parent block hash -- Block number -- Block author and its on-chain identity (if exists) -- Block contents - - Extrinsics, their module names and arguments - - Events, their module names and arguments - -This service is going to be utilized in both displaying the block contents and cross-chain messages as extracted from the `XcmPallet` extrinsics and events. +- Polkadot JS API to access block content and parachains, and subscriptions for new and finalized block headers +- SubVT Polkadot and Kusama `Active Validator List Service`s for the list and summary data for active validators +- SubVT Polkadot and Kusama `Network Status Service`s for live network data +- [Polkaholic XCM API](https://docs.polkaholic.io/#xcm) for the live display of XCM messages and their summaries #### UI/UX Upgrades -We're going to implement a number of UI/UX upgrades, as explained below. +We're going to implement a number of UI/UX upgrades, as follows: - Improvement of the overall aesthetics and visual coherence of the application -- A better depiction of the block production process that's easier to comprehend for a wider range of users from the technically informed to the newly-introduced -- Display of block contents (i.e. hash, number, author, extrinsics and events) on hover and click +- A better depiction of the block production process that is easier to comprehend for a wider range of users from the technically informed to the newly-introduced +- Display of block contents (i.e. hash, number, author, extrinsics and events) on click - Responsive design for a range of screen sizes - A better utilization of the 3D space to allow for parachain visualization and preparation for future upgrades - Display of parachains, their assigned validators and the cross-chain messaging process @@ -126,23 +122,23 @@ UI/UX upgrade implementation consists of 3 core components: - Visual guidelines - Application UI/UX upgrades -- WebGL graphics development, shaders and motion design upgrades +- WebGL graphics development and motion design upgrades -Development of the **visual guidelines** aims to bring visual coherency to ChainViz. From a functional perspective, this component serves as a core visual guide and foundation for all future UI/UX components and 3D graphics development. +Development of the **visual guidelines** aims to bring visual coherency to Chainviz. From a functional perspective, this component serves as a core visual guide and foundation for all future UI/UX components and 3D graphics development. **UI/UX upgrades** aim to elevate the project from a draft look to an efficient, performant, user-appealing, scalable web application. Visually, it will be based on the current project aesthetics while ensuring its responsiveness and accessibility. Through this work, we aim to increase usability and ensure application scalability in terms of functionality growth. -Third component of the visual upgrades, the development of the **upgraded WebGL graphics, shaders and motion**, faces a set of challenges that we aim to solve, including effective visualization of the block production and cross-chain messaging process. When we use the term effective visualization, we primarily mean one that: +Third component of the visual upgrades, the development of the **upgraded WebGL graphics and motion**, faces a set of challenges that we aim to solve, including effective visualization of the block production and cross-chain messaging process. When we use the term effective visualization, we primarily mean one that: - Can show the depicted processes in a simple yet systematic manner - Can be engaging and valuable for users with different levels of expertise ### Ecosystem Fit -There is currently no direct match in the Dotsama ecosystem of the features offered by ChainViz. ChainViz Alpha got [shared on Twitter](https://twitter.com/gavofyork/status/1491480880245874708) by Gavin Wood upon initial release, and received a lot of praise from various Dotsama ecosystem members. +There is currently no direct match in the Dotsama ecosystem of the features offered by Chainviz. Chainviz Alpha got [shared on Twitter](https://twitter.com/gavofyork/status/1491480880245874708) by Gavin Wood upon initial release, and received a lot of praise from various Dotsama ecosystem members.

- +

There are currently two other projects that visualize certain aspects of the Dotsama blockspace: @@ -150,7 +146,7 @@ There are currently two other projects that visualize certain aspects of the Dot 1. [Kusamaverse by Odyssey](https://odyssey.org/kusamaverse), which is closer to a metaverse space for Kusama, focuses more on the interaction of the actors in the ecosystem. 2. [XCM Dashboard](https://polkadot.subscan.io/xcm_dashboard) by the Subscan team, which is a fairly static visualization of the active cross-chain messaging channels between parachains. -ChainViz is unique in that it focuses on a very clear real-time visualization of the internals of the Dotsama machine. As we're going to explain in the Future Plans section, it also has the potential to have educational, entertainment and functional value through future development. +Chainviz is unique in that it focuses on a very clear real-time visualization of the internals of the Dotsama machine. As we're going to explain in the Future Plans section, it also has the potential to have educational, entertainment and functional value through future development. ## Team :busts_in_silhouette: @@ -186,18 +182,18 @@ A crypto-native software development company based in Istanbul. Founded by [Kuts - [SubVT Backend](https://github.com/helikon-labs/subvt-backend) - [SubVT Data Swift](https://github.com/helikon-labs/subvt-data-swift) - [SubVT Data Android](https://github.com/helikon-labs/subvt-data-android) - - Alpha Testing - - [SubVT iOS](https://github.com/helikon-labs/subvt-ios) + - [SubVT iOS](https://subvt.io) ([source](https://github.com/helikon-labs/subvt-ios)) - Under Development - [SubVT Android](https://github.com/helikon-labs/subvt-ios) - [Received](https://github.com/w3f/Grants-Program/blob/master/applications/subvt-telegram-bot.md) and [delivered](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/subvt_telegram_bot-milestones-1-and-2.md) a W3F Level-1 Open Grant for the [SubVT Telegram Bot](https://github.com/helikon-labs/subvt-backend/tree/development/subvt-telegram-bot) for [Kusama](https://t.me/subvt_kusama_bot) and [Polkadot](https://t.me/subvt_polkadot_bot). - Member of both Polkadot and Kusama Thousand Validators programs. - Running two Kusama validators, and one Polkadot validator on owned hardware in a colocation center in Istanbul. - Active governance participation. +- Professional member of the [Infrastructure Builders Program (IBP)](https://ibp.network). #### Kutsal Kaan Bilgin -Founder of Helikon Labs. Software developer with a BS in Computer Science and 20 years of experience in software development and leadership in diverse fields such as fintech, defense industry, interactive art installations and GIS. Focusing on user-friendly, aesthetically pleasing and creative blockchain application development since late 2019. Dotsama native since early 2021. Developer of SubVT (please see above), [ChainViz Alpha](https://alpha.chainviz.app) and [ChainSynth Alpha](https://alpha.chainsynth.app). Presenter of a Substrate Seminar [episode](https://www.youtube.com/watch?v=e-o_hTj3UFk&t=6119s&ab_channel=ParityTech) on blockchain UI application development. +Founder of Helikon Labs. Software developer with a BS in Computer Science and 20 years of experience in software development and leadership in diverse fields such as fintech, defense industry, interactive art installations and GIS. Focusing on user-friendly, aesthetically pleasing and creative blockchain application development since late 2019. Dotsama native since early 2021. Developer of SubVT (please see above), [Chainviz Alpha](https://alpha.chainviz.app) and [ChainSynth Alpha](https://alpha.chainsynth.app). Presenter of a Substrate Seminar [episode](https://www.youtube.com/watch?v=e-o_hTj3UFk&t=6119s&ab_channel=ParityTech) on blockchain UI application development. #### Egor Zmaznev @@ -219,16 +215,16 @@ Ksenia is a co-founder and leading UI/UX designer at Klad. She has 15 years of e Lena is a co-founder and 3D & motion designer at Klad. She has over seven years of experience and has participated in various crypto projects providing supporting 3D materials, including interactive validator 3D models for SubVT. Lena brings volume and movement to brands, allowing for spectacular immersive digital experiences. -### Team Code Repos +### Team Code Repositories - [Helikon Labs](https://github.com/helikon-labs) - - [ChainViz](github.com/helikon-labs/chainviz) - - [ChainSynth](github.com/helikon-labs/chainsynth) - - [SubVT Backend](github.com/helikon-labs/subvt-backend) - - [SubVT iOS](github.com/helikon-labs/subvt-ios) - - [SubVT Android](github.com/helikon-labs/subvt-android) - - [SubVT Data - Swift](github.com/helikon-labs/subvt-data-swift) - - [SubVT Data - Android](github.com/helikon-labs/subvt-data-android) + - [Chainviz](https://github.com/helikon-labs/chainviz) + - [ChainSynth](https://github.com/helikon-labs/chainsynth) + - [SubVT Backend](https://github.com/helikon-labs/subvt-backend) + - [SubVT iOS](https://github.com/helikon-labs/subvt-ios) + - [SubVT Android](https://github.com/helikon-labs/subvt-android) + - [SubVT Data - Swift](https://github.com/helikon-labs/subvt-data-swift) + - [SubVT Data - Android](https://github.com/helikon-labs/subvt-data-android) - Team Members - Kutsal Kaan Bilgin [@kukabi](https://github.com/kukabi) - Egor Zmaznev [@Zmaznevegor](https://github.com/Zmaznevegor) @@ -247,47 +243,31 @@ Lena is a co-founder and 3D & motion designer at Klad. She has over seven years ## Development Status :open_book: -[Alpha version](https://alpha.chainviz.app) of ChainViz has been live since February 2022 as detailed under the Project Details section. There hasn't been any development for the first major version proposed by this document. +[Alpha version](https://alpha.chainviz.app) of Chainviz has been live since February 2022 as detailed under the Project Details section. There hasn't been any development for the first major version proposed by this document. ## Development Roadmap :nut_and_bolt: ### Overview -- **Total Estimated Duration:** 2 months -- **Full-Time Equivalent (FTE):** 1.0 +- **Total Estimated Duration:** 8 months +- **Full-Time Equivalent (FTE):** 0.2 - **Total Costs:** 22,000 USD -### Milestone 1 — Block Details WS Service, Implementation of Upgrades for Existing Functionality - -- **Estimated duration:** 1 month -- **FTE:** 1.0 -- **Costs:** 11,000 USD - -| Number | Deliverable | Specification | -| -----: | ----------- | ------------- | -| 0a. | License | GPLv3 | -| 0b. | Documentation | Milestone progress report and inline code documentation. GitHub README that explains how to run an instance of the application. | -| 0c. | Testing Guide | Separate markdown in the GitHub repository that documents the complete backend test cases for the Block Details WS Service and the application Typescript code and how to run them. | -| 0d. | Docker | Necessary Docker/compose files necessary to run the backend services and the application. | -| 0e. | Video Article | A YouTube video accompanied by an article on Helikon website or another blog site that documents the milestone development/design process and the outcome. | -| 0f. | Block Details WS Service Specification | Complete specification of the websockets service. | -| 1. | Block Details WS Service | Implementation of the service as part of [SubVT Backend](https://github.com/helikon-labs/subvt-backend), deployed and available on the SubVT test server. | -| 2. | Complete Upgrade of the Existing Functionality Available at [chainviz.app](https://chainviz.app) | Implementation of UI/UX upgrades for validator space and models, block production, network status panel, validator list panel and validator details panel. | - -### Milestone 2 - Rest of the Application Features: Block Details, Parachains, Paravalidators, XCM - -- **Estimated Duration:** 1 month -- **FTE:** 1.0 -- **Costs:** 11,000 USD - -| Number | Deliverable | Specification | -| -----: | ----------- | ------------- | -| 0a. | License | GPLv3 | -| 0b. | Documentation | Milestone progress report and inline code documentation. GitHub README that explains how to run an instance. | -| 0c. | Testing Guide | Separate markdown in the GitHub repository that documents the complete application test cases and how to run them. | -| 0d. | Docker | Necessary Docker/compose files necessary to run the backend services and the application. | -| 0e. | Video Article | A YouTube video accompanied by an article on Helikon website or another blog site that documents the milestone development/design process and the outcome. | -| 1. | Complete Web Application with New Features | Web application live at [chainviz.app](https://chainviz.app), with additional real-time visualizations as documented above: complete block details on hover or click, parachains, parachain validator groups and their assignments, cross-chain messages. | +### Milestone 1 — Complete Web Application Implementation + +- **Estimated duration:** 8 months +- **FTE:** 0.2 +- **Costs:** 22,000 USD + +| Number | Deliverable | Specification | +|-------:|---------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | GPLv3 | +| 0b. | Documentation | Milestone delivery report and inline code documentation. Separate markdown document that explains how to run an instance of the application. | +| 0c. | Testing Guide | Markdown document in the GitHub repository that documents the complete list of test cases for application Typescript code and how to run them. | +| 0d. | Docker | Necessary Docker/compose files necessary to run the application. | +| 0e. | Video Article | A YouTube video accompanied by an article on Helikon website or another blog site that documents the milestone development/design process and the outcome. | +| 1a. | Web Application Source Code | Complete source code of the application available at the Chainviz GitHub repository. Documentation delivered as part of `0b` is going to have the simple instructions to run the software. | +| 1b. | Web Application Live Deployment with New Features | Web application live at [chainviz.app](https://chainviz.app), with additional real-time visualizations as documented above: complete block details on hover or click, parachains, parachain validators and their assignments, cross-chain messages. | ## Future Plans @@ -295,7 +275,7 @@ Lena is a co-founder and 3D & motion designer at Klad. She has over seven years - Replayable voice recordings attached to the various components and processes for the users who would like to learn more about the internals of the Dotsama machine. - Text and visual augmentation. - Animated explainers and hints that give better understanding of the technology and processes. -- Validator spaces and staking through ChainViz. Support for validators to claim and update their spaces. +- Validator spaces and staking through Chainviz. Support for validators to claim and update their spaces. - iOS and Android phone, table and watch applications. - Exploration of VR and AR possibilities. - Creating a wiki for validator operators, supporting pull requests. From 052bb9b3b6e0055e8831e9b0fb6a5a858dd1163b Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 18 Aug 2023 01:50:39 -0400 Subject: [PATCH 543/665] Update index.md (#1916) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 6142ba33f9a..dd42f05758a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -201,7 +201,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Coong Team](https://coong.xyz/) | [Coong Wallet](coong_wallet.md) | [GitHub](https://github.com/CoongCrafts) | ☐ | ☒ | ☒ | | OCamlMyCaml | [PrivaDEX: Cross-Chain DEX Aggregator MVP](PrivaDEX_aggregator.md) | [GitHub](https://github.com/kapilsinha/privadex) | ☐ | ☒ | ☒ | | [Aband-Network](https://a.band/) | [Substrate Parachain PoS Template](substrate-parachain-PoS-template.md) | [GitHub](https://github.com/Aband-Network/substrate-parachain-PoS-template) | ☐ | ☒ | ☒ | -| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☐ | +| [MangoBOX labs](https://www.mangobox.xyz/) | [MangoSale Protocol](MangoSale_Protocol.md) | [GitHub](https://github.com/Mangoboxlabs) | ☐ | ☒ | ☒ | [🔝](#2023) From e909ae238b545b7e7696803a9890201d022603ea Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 18 Aug 2023 12:34:19 -0300 Subject: [PATCH 544/665] Update index.md (#1918) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index dd42f05758a..3f9faca051c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -100,7 +100,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Davanti](https://github.com/liangjh) | [Dot-ETL Project](dot_etl.md)| [GitHub](https://github.com/liangjh) | ☐ | ☐ | ☐ | -| [ParaSpell](https://github.com/paraspell) | [LightSpell: XCM API](LightSpell-proposal.md)| [GitHub](https://github.com/paraspell) | ☐ | ☐ | ☐ | +| [ParaSpell](https://github.com/paraspell) | [LightSpell: XCM API](LightSpell-proposal.md)| [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | [🔝](#2023) From 93296d3fc21b571a8246ae262b02baf9ef11dd4b Mon Sep 17 00:00:00 2001 From: gmajor <63032554+gmajor-encrypt@users.noreply.github.com> Date: Mon, 21 Aug 2023 16:39:24 +0800 Subject: [PATCH 545/665] Update m2, remove xcmp and reduce the costs (#1917) --- applications/xcm-tools.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/applications/xcm-tools.md b/applications/xcm-tools.md index 9670cf4cb0b..8b939b9fe46 100644 --- a/applications/xcm-tools.md +++ b/applications/xcm-tools.md @@ -42,14 +42,12 @@ myself. and [scale.go](https://github.com/itering/scale.go) 2. Send xcm messages between relay chain and parachain and between parachain and parachain, support VMP(UMP & DMP), - HRMP,XCMP(XCM V3) and supports the following methods + HRMP and supports the following methods * `LimitedReserveTransferAssets` * `LimitedTeleportAssets` * `TeleportAssets` -* `ReserveWithdrawAssets` -* `LimitedReserveWithdrawAssets` -* `Execute` +* `ReserveTransferAssets` * `Sent` 3. Get the execution result and the block_hash (block_num) of the execution after sending xcm @@ -114,7 +112,7 @@ Not yet ### Overview * **Total Estimated Duration:** 4.5 months -* **Total Costs:** 28500 USDC +* **Total Costs:** 25000 USDC ### Milestone 1 @@ -140,7 +138,7 @@ and [scale.go](https://github.com/itering/scale.go), support signed & send trans * **Estimated duration:** 9 week * **FTE:** 1 -* **Costs:** 13500 USDC +* **Costs:** 10000 USDC | Number | Deliverable | Specification | |-------:|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -151,7 +149,7 @@ and [scale.go](https://github.com/itering/scale.go), support signed & send trans | 1. | Send UMP message | support [UMP](https://wiki.polkadot.network/docs/learn-xcm-transport#vmp-vertical-message-passing) message send | | 2. | Send DMP message | support [DMP](https://wiki.polkadot.network/docs/learn-xcm-transport#vmp-vertical-message-passing) message send | | 3. | Send HRMP message | support [HRMP](https://wiki.polkadot.network/docs/learn-xcm-transport#hrmp-xcmp-lite) message send | -| 4. | Send XCMP message(XCM V3) | support [XCMP](https://wiki.polkadot.network/docs/learn-xcm-transport#xcmp-cross-chain-message-passing) message send | + ### Milestone 3 From e03a3e760846bfaf44352cb17a6763ff0fcf1a94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 21 Aug 2023 16:26:44 +0200 Subject: [PATCH 546/665] FAQ update --- docs/faq.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index 6d54fbfd1b1..996e9d5b3f7 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -7,9 +7,13 @@ title: 🙋 FAQ ## 🧭 General +### How do I apply? + + Please refer to the ["How to Apply" section](Process/how-to-apply.md) in our documentation. + ### How much can I ask for? - Please refer to the [section on grant levels in our README](Introduction/levels.md) for funding limits. + Generally, there is no upper limit to grant amounts. However, the higher the requested amount, the stricter the review. For guidance, please refer to the [grant levels section](Introduction/levels.md) in our documentation. ### What activities/positions do you fund? @@ -17,15 +21,15 @@ title: 🙋 FAQ ### Can anyone apply? - Projects for which a token sale has been or is being conducted are not eligible for a Web3 Foundation grant. Other than that, there are no restrictions. + Projects for which a token sale has been or is being conducted are not eligible for a Web3 Foundation grant. Also, we do not fund projects that actively encourage gambling, illicit trade, money laundering or criminal activities in general. See also the [application guidelines](Introduction/intro.md) in our documentation. ### Can I get an upfront payment? - No. + The W3F Grants Program does not offer upfront payment. If you absolutely require upfront payment, have a look at our list of [alternative funding programs](funding.md), some of which allow upfront payment. ### When do I get paid? - Payments are issued once a milestone has been successfully delivered. By ‘successful’, we mean that our Grants team has reviewed _and officially accepted_ your submission. + Payments are issued once a milestone has been successfully delivered. Successful delivery requires that you have submitted the milestone as per our delivery guidelines _and_ that the Grants team has reviewed _and officially accepted_ your submission. ### Can I reuse someone else’s open-source code? @@ -88,7 +92,7 @@ title: 🙋 FAQ ### How do I submit a milestone? - For details, please refer to the [milestone delivery guidelines](Support%20Docs/milestone-deliverables-guidelines.md) for the respective grants program. Generally speaking, the most important part of a delivery is a list of **the same deliverables listed in the application** with links to their implementation/realisation (ideally pointing to a specific commit or tag, so you can continue working on your repository without messing up your delivery and complicating our evaluation) and any additional notes you might have. The list of deliverables for each of your milestones should be defined in your grant agreement. + For details, please refer to the [milestone delivery guidelines](Support%20Docs/milestone-deliverables-guidelines.md). Generally speaking, the most important part of a delivery is a list of **the same deliverables listed in the application** with links to their implementation/realisation (ideally pointing to a specific commit or tag, so you can continue working on your repository without messing up your delivery and complicating our evaluation) and any additional notes you might have. The list of deliverables for each of your milestones should be defined in your grant agreement. ### Can I submit two or more milestones at once? From 82b99906c91eb627ccf8a32e49c6a2e920e4f286 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 21 Aug 2023 16:31:26 +0200 Subject: [PATCH 547/665] FAQ update --- docs/faq.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index 996e9d5b3f7..bd146744556 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -29,7 +29,7 @@ title: 🙋 FAQ ### When do I get paid? - Payments are issued once a milestone has been successfully delivered. Successful delivery requires that you have submitted the milestone as per our delivery guidelines _and_ that the Grants team has reviewed _and officially accepted_ your submission. + Payments are issued once a milestone has been successfully delivered. Successful delivery requires that you have submitted the milestone as per our delivery guidelines _and_ that the Grants team has reviewed _and officially accepted_ your submission. Payment is made within 14 days after approval. ### Can I reuse someone else’s open-source code? @@ -66,6 +66,8 @@ title: 🙋 FAQ For special cases that do not fit the regular grants structure, we provide [a form](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). You can provide all application data by submitting this form, or submit the form with a reference to a pull request with data you are willing to make public. + Our [application template](https://github.com/w3f/Grants-Program/blob/e03a3e760846bfaf44352cb17a6763ff0fcf1a94/.github/pull_request_template.md?plain=1#L21) also offers the possibility to make the application public, but to keep its discussion private. + ## 🥳 After Approval ### When can I apply for a follow-up grant? From 1b51bb6b4957e154f2a9daab495304e3da197a27 Mon Sep 17 00:00:00 2001 From: Tom Date: Tue, 22 Aug 2023 02:29:49 -0400 Subject: [PATCH 548/665] Treasury Tracker (#1900) * Treasury Tracker * Treasury Tracker - Assets * Treasury Tracker - Assets Update * Treasury Tracker - Update * Treasury Tracker - Update * Treasury Tracker - Update * Treasury Tracker - Update * Treasury Tracker - Update * Treasury Tracker * Assets update * Update architecture * Treasury Tracker Update * Treasury Tracker Update * Treasury Tracker Update * Treasury Tracker Update * Treasury Tracker Update * Treasury Tracker Update * Treasury Tracker Update --- applications/TreasuryTracker.md | 196 ++++++++++++++++++++++++++++++++ 1 file changed, 196 insertions(+) create mode 100644 applications/TreasuryTracker.md diff --git a/applications/TreasuryTracker.md b/applications/TreasuryTracker.md new file mode 100644 index 00000000000..372dfdbbb36 --- /dev/null +++ b/applications/TreasuryTracker.md @@ -0,0 +1,196 @@ +# TreasuryTracker + +- **Team Name:** Stake Plus Inc +- **Payment Address:** 0x06737F4137E244DBc46c6044E5051A66074F3f87 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +### Problem Statement + +The community is plunging into collectives without any established budgeting mechanisms. This absence of financial oversight is compounded by misunderstandings and a general lack of clarity concerning the specifics of different operations within the ecosystem. Without a clear grasp of current spending on categorized requests, it's impossible to set up appropriate budgets, resulting in a lack of control and potential misallocation of resources. + +### Overview + +TreasuryTracker is an innovative analytics portal designed to provide comprehensive insights into the OpenGovernance referenda on Polkadot and Kusama. Through intuitive charts, tables, and reports, the platform aims to track, analyze, and present vital data, allowing the community to understand areas of treasury funding and obtain a holistic overview of the governance process. + +Our interest in creating this project comes from a shared vision of providing the community with the tools needed to actively engage in the governance process, ensure efficient utilization of treasury funds, and create a more accountable and transparent ecosystem. + + +### Project Details + +#### Mockups/Designs of UI Components + +Mockups have been created to display essential features, including interactive charts, tables, and reporting tools. The main dashboard will include an intuitive navigation menu and provide visualizations of various metrics related to the OpenGovernance referenda on Polkadot and Kusama. + +Within the following grant, we plan to implement following two analytics: + +- A Weekly Cumulative Overview: Tracking New Referenda by Project Categories + +![1](https://raw.githubusercontent.com/stake-plus/Grants-Program/master/assets/pic%201.png) + +- A Weekly Overview Of Approved Referenda Relative to Referenda Tracks and Requested DOT Fundings + +![2](https://raw.githubusercontent.com/stake-plus/Grants-Program/master/assets/pic%202.png) + + + +The following examples are mockups of the future platform functionality and are NOT part of this grant. They present the prior research and the work showing the long-term vision for the platform and guide development beyond the initial phase, ensuring alignment with the defined goals after delivering a functional platform. + +The summary table with all relevant data will be available to download in several formats. + + +- A Weekly Overview Of OpenGov Referenda Status and Referenda Tracks + +![3](https://raw.githubusercontent.com/stake-plus/Grants-Program/master/assets/pic%203.png) + +- A Weekly Overview Of OpenGov Referenda Results % + +![4](https://raw.githubusercontent.com/stake-plus/Grants-Program/master/assets/pic%204.png) + +- Example of future extended analytics + +![5](https://raw.githubusercontent.com/stake-plus/Grants-Program/master/assets/pic%205.png) + +Figma mock ups of the website + +![Figma1](https://raw.githubusercontent.com/stake-plus/Grants-Program/master/assets/figma1.png) +![Figma2](https://raw.githubusercontent.com/stake-plus/Grants-Program/master/assets/figma2.png) + + +#### Core Components, protocols, architecture + +The governance website is built using Node.js for the backend and CakePHP for web application. Data is managed with MySQL or MariaDB, while the front-end utilizes JavaScript libraries like Chart.js and jQuery. + +- [Database Specification](https://github.com/stake-plus/Grants-Program/blob/master/assets/database_specification.pdf) + +![System Architecture](https://github.com/stake-plus/Grants-Program/blob/master/assets/architecture.png) + +### Ecosystem Fit + +TreasuryTracker fits within the non-core infrastructure category of the Polkadot and Kusama ecosystem, with a specialized focus on OpenGovernance referendums. In particular, the platform focuses on referenda that are seeking funds from the treasury offering automated data collection, analytics, and long-term oversight over treasury activities. + +The target audience for our platform includes token holders interested in the long-term success and ROI of treasury-funded projects, active OpenGov participants seeking an overview of the types of projects and amount of funding allocated and the new projects requiring oversight over similar past projects, their funding, and voting success. + +While there are no projects in the ecosystem that address treasury components and provide the same level of analytics as our proposed platform, there are a few with related functionalities: + +- [doTreasury](https://www.dotreasury.com/dot/) focuses solely on treasury statistics, lacking the wider analytical range that our project aims to offer +- [Grant Management Web Application RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/grant_management_webapp.md) are focused on the W3F grants UI and are not including the analytics component our platform intends to deliver. + + + +## Team :busts_in_silhouette: + +### Team members + +- Tom S. +- Thomas T. +- CoinStudio + +### Contact + +- **Contact Name:** Tom S. +- **Contact Email:** tom@stake.plus +- **Website:** https://stake.plus + +### Legal Structure + +- **Registered Address:** 254 Chapman Rd, Ste 208 #8779, Newark, Delaware 19702 USA +- **Registered Legal Entity:** Stake Plus Inc + +### Team's experience + +With over two decades of combined experience, we have honed our expertise in web2 application development, encompassing significant data-warehousing initiatives and front-end projects like a billing system for an FTTH ISP. Our entrepreneurial journey includes the successful launch and subsequent acquisition of four startups. + +### Team Code Repos + +Company: +- https://github.com/stake-plus + +Team: +- https://github.com/senseless +- https://github.com/Bluespottedfrog + +Reference: https://github.com/orgs/ibp-network/repositories + +### Team LinkedIn Profiles (if available) + +We no longer use LinkedIn but can provide CV privately if required. + +## Development Status :open_book: + +At the current stage of the project, extensive research and preparatory work have been carried out to lay the foundation for successful grant application. Below is a detailed description of the work conducted before applying for the grant: + +UI Mockups and Functionality: +Prior to the proposal, careful planning and design were undertaken to create UI mockups that accurately represent the intended functionality of the platform. These mockups serve as a guide for the development process, ensuring that user experience and visual aesthetics align with the project's objectives and future plans. + +On-Chain Data Reading: +Initial testing and development of functions for reading on-chain data have been performed. This represents a crucial step in achieving the project's goals, as it allows for accurate and real-time retrieval of referenda and treasury data directly from the blockchain. + +Research and Community outreach: +Comprehensive research has been conducted to understand the needs of the community, the gaps in existing solutions, and the potential challenges in implementing the project. + + + +## Development Roadmap :nut_and_bolt: + + +### Overview + +- **Total Estimated Duration:** 1 month +- **Full-Time Equivalent (FTE):** 1.25 +- **Total Costs:** 10,000 USD + +### Milestone 1 Example � Basic functionality + +> :exclamation: **The default deliverables 0a-0d below are mandatory for all milestones**, and deliverable 0e at least for the last one. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT / Unlicense | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can use the application and its various features. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that explains what was done/achieved as part of the grant | +| 1. | Backend Development | A node module that allows the CakePHP framework to pull the relevant data directly from the blockchain via WSS/RPC. | +| 2. | Frontend Development | A CakePHP framework that interacts with database contents rendering some pages and providing API results to portions of the javascript elements for dynamic rendering. | +| 3. | Integration and Testing | The final milestone is focused on integrating the backend with the frontend, and conducting extensive testing to ensure everything functions as intended. | + +### Features Included + +- Referenda Details: Covering aspects like ID, Proposal Title, Proposer's ID, Address, Origin track, Project Category, Proposal URL, and Status. +- Financial Insights: Offering information on the Payment Schedule, Requested Amounts (in DOT and USD), Received Amount in USD, and financial variances such as the Difference in USD and Reimbursements. +- Voting Statistics: Provides a deep dive into Referenda Submission dates, Start and End dates, the dynamics of Votes (Aye, Nay, Total), Votes Casted and Delegated, and their consequential distribution percentages. Moreover, it delves into the Final Vote Results and the Controversy Index. +- Voter Analysis: Incorporates a broad range of data, from numbers of Voters for Aye, Nay, and Abstain to metrics about Voter delegation, distribution, and final results. +- Time-Defined Data: An organized view according to Quarters, Months, and Weeks for when Referenda were Submitted, Began, and Concluded. + + +## Future Plans + +The TreasuryTracker analytics portal is set to bring a significant change to how OpenGovernance data is tracked, analyzed, and presented. However, the development of a proof of concept (POC) under this grant proposal represents only the first phase in our strategic roadmap for the platform. We have a comprehensive set of short and long-term plans intended to maximize the potential of this project: + +### Short-Term Plans + +After delivering a working POC, we plan to work on extensive user feedback collection and rigorous testing to further enhance and refine the platform. We aim to make necessary modifications and improvements based on this feedback to ensure the platform aligns with the needs and expectations of the community. Promotion and support will be crucial at this stage, and we intend to conduct extensive outreach to raise awareness about the project and encourage its use among our target audience. + +### Long-Term Plans + +As for the long-term vision, we plan to further expand the data collected and the analytical capabilities of the platform. This expansion will provide a broader range of data analytics. A particular focus will be put on enhancing the user interface and overall user experience inspired by our existing graphical mockups. The focus will be on presenting platform data in a more modern and user-friendly UI to enhance user interaction and understanding. This redesign process will prioritize clarity, ease-of-use, and intuitive navigation to best serve the platform's diverse audience. + +In addition to the live analytics side, we're exploring the idea of producing periodic reports (e.g., quarterly or annually) that provide a comprehensive review of the OpenGovernance referenda on Polkadot and Kusama networks. These reports can serve as invaluable resources for the community, giving in-depth insights into trends and significant happenings in the ecosystem. + +Ultimately, our goal is to make TreasuryTracker a go-to platform for all OpenGovernance data analysis and reporting needs. As the platform grows and matures, we'll continue to identify and explore new opportunities to further its reach and impact within the Polkadot and Kusama ecosystems. + +### Additional Features + +- Project Management Factors: This would encompass the Proposed Timeline, detailed Milestones and Deliverables, Start and End Dates, and an updated Current Status. +- Social Engagement Metrics: This would capture the Number of Comments, Likes, and Shares associated with each proposal, complemented by Sentiment Analysis for deeper insights. +- Evaluation Factors: Here, we would look at the Implementation Success, the punctuality of On-Time Delivery, Deviations from the initial Proposal, and the existence of an Audit Report and External Reviews. Moreover, we'd highlight any Corrective Actions taken post-review. +- Proposer's History and Feedback: Incorporating a history of Previous Proposals by the Proposer, Inter-Proposal Dependencies, and any Feedback Given to the Proposer. +- Team and Geographical Data: Offering deeper insights into Team Information, the Proposer's Country or Region, and potential Secondary Effects of the proposal. +- Risk Management: Highlighting Identified Risks and the Responses or strategies to mitigate said risks. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** Web3 Foundation Website and personal recommendation \ No newline at end of file From 139874cb327b9d5973ce2316362591f777704a48 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 22 Aug 2023 08:33:33 +0200 Subject: [PATCH 549/665] Update index.md Add Treasury Tracker --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 3f9faca051c..32ffa5f0f53 100644 --- a/applications/index.md +++ b/applications/index.md @@ -57,6 +57,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang Playground](Solang_Playground.md) | [GitHub](https://github.com/salaheldinsoliman) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [P2P data platform](data_platform_with_deep_indexed_data_and_staking_reports.md) | [GitHub](https://github.com/p2p-org) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☐ | ☐ | +| [Stake Plus Inc](https://stake.plus) | [Treasury Tracker](TreasuryTracker.md) | [GitHub](https://github.com/stake-plus) | ☐ | ☐ | ☐ | [🔝](#2023) From 87376fd768014d8953b8b6c681ef01bfc4cbe289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Brand=C3=A3o=2C=20PhD?= Date: Tue, 22 Aug 2023 03:59:37 -0300 Subject: [PATCH 550/665] Adding application: Polkadot Analytics Platform (#1883) * Adding polkadot_analytics_platform.md The Polkadot Analytics Platform aims at building a comprehensive data analysis and visualization tool for the Polkadot ecosystem. This is a follow-up grant application for the project: https://github.com/w3f/Grants-Program/pull/1420 * Update polkadot_analytics_platform.md * Update polkadot_analytics_platform.md --- applications/polkadot_analytics_platform.md | 338 ++++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 applications/polkadot_analytics_platform.md diff --git a/applications/polkadot_analytics_platform.md b/applications/polkadot_analytics_platform.md new file mode 100644 index 00000000000..607059f2a25 --- /dev/null +++ b/applications/polkadot_analytics_platform.md @@ -0,0 +1,338 @@ +# Polkadot Analytics Platform: Stage 1 + +- **Team Name:** MOBR Systems + +- **Payment Address:** 0x10F40DE77B7D2cDEe35De46B521e0c93bA9C3b36 (USDC ERC20) + +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This proposal is aligned to the [RFP: Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/data_analysis_tools.md). + +Our R&D roadmap was conceived and kick-started before the creation of this RFP, which was presented to us during the course of our previous [research grant](https://github.com/w3f/Grants-Program/pull/1420). Nevertheless, we believe the proposed application (Polkadot Analytics Platform) is aligned with the RFP's requirements and main goals. Both aim at providing data analysis in a way that advanced non-technical users can consume, without requiring programming skills. + + +This is a follow-up grant application for the project [A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem](https://github.com/w3f/Grants-Program/pull/1420) + + +### Overview + +> tag line +Empowering the Polkadot community with a comprehensive analytics platform that provides natural language querying, supported by formal knowledge representations, and customizable dashboards for holistic data analyses. + +> A brief description of your project. +The Polkadot Analytics Platform aims at building a comprehensive data analysis and visualization tool for the Polkadot ecosystem. The platform will allow users to retrieve and analyze data from various Polkadot-related sources (e.g., different parachains and components such as browser wallets), aligned with the POnto ontology [1, 2, 3]. Users will be able to specify their queries using a controlled natural language (CNL), and the platform will provide a query engine to process these queries. Additionally, the platform will provide a UI to support constructing queries and visualizing informative artifacts that represent query results. As well as support for composing customizable dashboards using these artifacts. + +[1] POnto source code: https://github.com/mobr-ai/POnto +[2] POnto documentation: https://www.mobr.ai/ponto +[3] POnto scientific paper: https://github.com/mobr-ai/POnto/raw/main/deliverables/milestone3/article.pdf + + + +> An indication of how your project relates to / integrates into Substrate / Polkadot / Kusama. +The Polkadot Analytics Platform will use the Substrate blockchain framework and Polkadot ecosystem components to extract, store, structure and process data in order to present it in a user-friendly manner. It will leverage the POnto ontology to enable efficient knowledge organization and retrieval. A CNL querying engine will facilitate natural language queries on the ecosystem's data, making it accessible to a broader target audience. + + +> An indication of why your team is interested in creating this project. +Our team is committed to research and develop Web3 technologies, supporting the growth of the Polkadot community. By building the Polkadot Analytics Platform, we aim to provide valuable insights, enhance user experience, and enable seamless data exploration for developers, users, and stakeholders. We are enthusiastic about creating user-centric solutions and pushing the boundaries of knowledge-oriented approaches in the blockchain space. + + + + +### Project Details + +> Mockups/designs of any UI components + +Figure 1 presents an overview of how the Polkadot Analytics Platform main components are integrated with its UI and how users can interact with it. + +The user interaction begins with building a query in a controlled natural language format in the platform. For example, the user may enter a query like "How many transactions happened between July 4th and 8th in the Moonbeam parachain?". + +The platform utilizes NLP mechanisms to parse the query and extract key entities, relationships, and actions mentioned. This step involves understanding the user's intent and mapping it to the corresponding concepts in the POnto ontology. This mapping helps establish a semantic understanding of the user query and allows for effective retrieval. + +The results are structured as informative artifacts, enriched with charts to enhance the user's understanding. The summarized query results are presented to the user through a dashboard UI where they can analyze the queried data, refine their queries, and further explore the insights provided. + +Users have the opportunity to provide feedback or refine their queries based on the presented results. The platform may incorporate user feedback to the knowledge base, enhancing future query processing and improving the system's performance and relevance. + +The platform comprises information extraction processes capable of constructing the knowledge base with Polkadot’s ecosystem data, aligned with the POnto ontology. The platform architecture and its components are detailed in the next sections. + +Figure 1 - Mockup of how the Polkadot Analytics Platform main components are integrated with its UI + +> Data models / API specifications of the core functionality +Data model will reflect the POnto structure. Extracted data will be transformed and injected in a triplestore database. + +The API specifications will provide a standardized way for users to interact with the Polkadot Analytics Platform, allowing them to query specific data, create visualizations, and manage their dashboards effectively. The API will be designed to interact with the knowledge base (i.e. underlying triplestore database), allowing users to access and query the data based on the POnto ontology. The endpoints will provide information about ontology entities (e.g., blocks, extrinsics, etc.), querying support, dashboard setup, informative artifacts, and others. + + +> An overview of the technology stack to be used +**Data processing**: Python and Apache Airflow +**Triplestore database**: Apache Jena and Fuseki +**Knowledge representation and querying**: OWL, RDF and SPARQL +**Information extraction, NLP, and other backend pipelines**: Python, NLTK +**UI and client-side integration**: Node.js, JavaScript, and Angular/React +**Interaction with relay chains and parachains**: Substrate interfaces like Polkadot{.js} + + +> Documentation of core components, protocols, architecture, etc. to be deployed + + +The platform's architecture (see Figure 2) will follow a modular and scalable design to accommodate future expansions and improvements. + + +Figure 2 - Polkadot Analytics Platform architecture. + +The architecture includes the following core components: + +==== +Client layer + +API: This component structures an API for external applications to interact with the platform. + +Frontend: This component offers a user-friendly interface for users to create and execute queries, visualize data, and manage their dashboards. + +==== +Engine layer + +Controlled Natural Language (CNL) Engine: This component will define the controlled natural language grammar and syntax that users can use to query the data based on the POnto ontology. CNL Engine parses natural language queries and assists query completion. + +Query Engine: The query engine uses the CNL engine to get a structured query to retrieve the corresponding data from the triplestore database. + +Informative Artifacts Engine: Informative artifacts will be created based on query results or on query specification, representing visualizations such as strings, tables, line charts, bar graphs, or other data visualizations. + +Dashboard Engine: This component will allow users to create, customize, and manage their dashboards by integrating and composing multiple informative artifacts. + +==== +Data layer + +Data Extraction: This component foresees data extraction workflows to deal with the dynamicity of various data sources within the ecosystem. The component will be responsible for extracting data from the Polkadot ecosystem, according to the entities defined in the POnto ontology, including blocks, transactions, and other relevant information. + +Knowledge Management: This component comprises the mechanisms to build and maintain the knowledge representation according to the data extracted and aligned with the POnto ontology, ensuring structured representation and organization. It also comprises the triplestore database where the knowledge representation will be stored. + +==== +Ecosystem layer + +The Polkadot ecosystem has in its core a decentralized network of interconnected blockchains (aka Parachains), and it consists of multiple components. Each component generates data related to blocks, transactions, events, and other relevant information. The proposed platform will interact with the available tools, libraries and SDK to access and manage ecosystem data. + + +> PoC/MVP or other relevant prior work or research on the topic +Prior to this application, the team has conducted scientific research to create an ontology [1, 2, 3, 4] that represents the main concepts and relationships of the Polkadot Ecosystem. This ontology will support the building of the proposed data analysis platform. + +[1] POnto source code: https://github.com/mobr-ai/POnto +[2] POnto documentation: https://www.mobr.ai/ponto +[3] POnto scientific paper: https://github.com/mobr-ai/POnto/raw/main/deliverables/milestone3/article.pdf +[4] Grant Application - A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem: https://github.com/w3f/Grants-Program/pull/1420 + + +> What your project is _not_ or will _not_ provide or implement +This project is not focused on tokenomics, marketing, or business-oriented activities. It will not involve creating tokens or launching a separate business venture. + +> This is a place for you to manage expectations and to clarify any limitations that might not be obvious +This is only the first stage in the roadmap to build the platform, which comprises a subset of the platform components. Specifically: + +| **1.** | POnto Evolution | New version of POnto ontology, addressing aspects from RFP and Substrate-ETL. | +| **2.** | KB Bootstrap | Python code with KB endpoints that interact with Jena triplestore database through fuseki-server. Implementation of an initial API to handle knowledge representation. Along with, scripts to inject the knowledge representation required to bootstrap the KB. | + +The next stages in our roadmap, which are not in the scope of this application grant are: +Stage 2: Semantic ETL workflows +The primary objective of this stage is to structure and develop processing workflows to gather raw data from the Polkadot Ecosystem. The knowledge base will dynamically maintain a formal representation of extracted data aligned with the POnto ontology. + +Stage 3: Controlled Natural Language (CNL) Engine +In this stage, the roadmap foresees a controlled natural language (CNL) specification to leverage the POnto ontology. CNL is a simplified form of natural language designed to be easily understood by both humans and machines. The CNL specification will allow users to interact with the Polkadot Analytics Platform using natural language queries, making the platform more user-friendly and accessible. + +Stage 4: Query Engine +This stage will focus on the development of a query engine to support the execution of CNL-based queries on the knowledge base. The query engine will be responsible for processing user queries, retrieving relevant data from the knowledge base, and providing users with query results. + +Stage 5: Visualization +The final stage focuses on delivering a UI where users will be able to integrate multiple informative artifacts to compose their custom dashboards, facilitating personalized data exploration and analysis. + + + +The Polkadot Analytics Platform will be an analytics tool. While it will provide valuable data insights, it is not designed to be used as a trading tool and will not offer financial advice or recommend investment strategies. + +### Ecosystem Fit + +> Where and how does your project fit into the ecosystem? +The Polkadot Analytics Platform will fill a critical gap in the ecosystem by providing users with a comprehensive analytics solution. It integrates with Substrate to access blockchain data and aligns it with the POnto ontology. The CNL querying engine enhances user experience by enabling natural language-based queries. The provision of customizable dashboards and informative visualization artifacts enhances data communication, making it easier for users to track key metrics, monitor trends, and construe valuable insights. + +> Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? +The proposed platform has a broad target audience, including developers, designers, analysts, researchers, and users within the Polkadot ecosystem. We aim to support both technical and non-technical users, providing easy access to meaningful data insights. + +> What need(s) does your project meet? +The Polkadot Analytics Platform addresses the need for comprehensive and accessible data within the ecosystem. It enhances data integration, querying, and visualization, enabling users to gain deeper insights into the Polkadot ecosystem. + +> Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + +To the best of our knowledge, there are no projects in the ecosystem that provide a holistic and human-centered approach to ease data access and analysis similar to our proposed platform. We are aware of three projects tackling the RFP referred to in this proposal ([PR 1716](https://github.com/w3f/Grants-Program/pull/1716/), [PR 1768](https://github.com/w3f/Grants-Program/pull/1768/), [PR 1837](https://github.com/w3f/Grants-Program/pull/1837/)). However, none of them combines in a broad knowledge-oriented approach, a CNL querying engine, and composable informative artifacts as an integrated analytics platform for Polkadot. + + +> If so, how is your project different? +The Polkadot Analytics Platform stands out by integrating knowledge-oriented approaches, formal ontology, and natural language querying to provide an intuitive and efficient analytics experience. Its composable informative artifacts enable users to create customized dashboards tailored to their specific analysis needs. The proposed platform enables both technical and non-technical users to access data and perform deep analysis. + + +## Team :busts_in_silhouette: + +### Team members + +> Name of team leader +**Dr. Marcio Moreno**, marcio@mobr.ai, Co-Founder, Research Scientist and CEO at MOBR Systems (https://www.mobr.ai). + +> Names of team members +**Dr. Rafael Brandao**, rafael@mobr.ai, Co-Founder, Research Scientist and COO at MOBR Systems (https://www.mobr.ai). + + + +### Contact + +- **Contact Name:** Rafael Brandao + +- **Contact Email:** rafael@mobr.ai + +- **Website:** https://www.mobr.ai + +### Legal Structure + +- **Registered Address:** +Av Paulista, 1106 Sala 01 / ANDAR 16 - Bairro: Bela Vista, Sao Paulo - SP CEP 01310914 + +- **Registered Legal Entity:** +MOBR SYSTEMS LTDA + +### Team's experience + +The applicants were co-authors of the POnto ontology previously funded by the W3F [1, 2, 3]. The previous research grant [4] was delivered by MOBR, their co-founded tech startup. Before founding their company, both applicants worked as Research Scientists at IBM for 7 years. Earlier, Dr. Moreno (LinkedIn on [5]) was a postdoctoral researcher at CWI (Centrum Wiskunde & Informatica) in the Netherlands, and worked at the Pontifical Catholic University of Rio (PUC-Rio) in Brazil. Dr. Brandão (LinkedIn on [6]) worked at the TecGraf Institute, from PUC-Rio, during his doctoral studies. The team has published multiple research papers and patents, their background includes Web3, AI, Knowledge Engineering, Distributed and Decentralized Systems, Multimedia and Hypermedia Systems, Human-Centered Computing, among other research topics. + +[1] POnto source code: https://github.com/mobr-ai/POnto +[2] POnto documentation: https://www.mobr.ai/ponto +[3] POnto scientific paper: https://github.com/mobr-ai/POnto/raw/main/deliverables/milestone3/article.pdf +[4] Grant Application - A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem: https://github.com/w3f/Grants-Program/pull/1420 +[5] Dr. Moreno LinkedIn profile: https://linkedin.com/in/marcio-moreno-phd-598a459a/ +[6] Dr. Brandao LinkedIn profile: https://linkedin.com/in/rafaelrmb/ + +For a complete list of peer-reviewed published papers and granted patents, please visit the following google scholar links +- Marcio Moreno, PhD: https://scholar.google.com/citations?user=PfdmrPUAAAAJ +- Rafael Brandao, PhD: https://scholar.google.com/citations?user=3ta0InEAAAAJ + +### Team Code Repos + +MOBR Systems: + +- https://github.com/mobr-ai + + +Our personal repos: + +- https://github.com/mfmoreno +- https://github.com/rbrandao + + +### Team LinkedIn Profiles (if available) + +- https://linkedin.com/in/marcio-moreno-phd-598a459a/ +- https://linkedin.com/in/rafaelrmb/ + + +## Development Status :open_book: + +> links to improvement proposals or [RFPs](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) (requests for proposal), + +This proposal is aligned to the [RFP: Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/data_analysis_tools.md). + +Our R&D roadmap was conceived and kick-started before the creation of this RFP, which was presented to us during the course of our previous [research grant](https://github.com/w3f/Grants-Program/pull/1420). Nevertheless, we believe the proposed application (Polkadot Analytics Platform) is aligned with the RFP's requirements and main goals. Both aim at providing data analysis in a way that advanced non-technical users can consume, without requiring programming skills. + + +> academic publications relevant to the problem, + +https://github.com/mobr-ai/POnto/raw/main/deliverables/milestone3/article.pdf + +> references to conversations you might have had related to this project with anyone from the Web3 Foundation, + +Medium publications about the Polkadot Analytics Platform initiative: +https://medium.com/@mobrsys/unlocking-the-future-of-distributed-ledger-data-analysis-a-step-forward-with-polkadot-4ba21e56bc34 + + +We had the following conversations: + +Feedback from diogo@web3.foundation during his evaluation [1] led us to the Polkadot forum, where we found interesting discussions [2,3] regarding analytic tools and similar desired features. +Feedback from sebastian@web3.foundation regarding our competency questions and the SQL queries already existent in the Substrate-ETL project. We will investigate these queries, to address as many as possible as defined in a deliverable in Milestone 1. +As part of our roadmap in our previous research grant, we had a collab session with participants from the W3F grants team. We created a set of activities in Mural, engaging with domain experts to inspire a discussion around POnto modeling, as well as to gather their view around a prospective data analysis tool and its requirements. + +[1] https://github.com/w3f/Grant-Milestone-Delivery/blob/master/evaluations/MOBR-Knowledge-Oriented-Framework_2_dsm-w3f.md +[2] https://forum.polkadot.network/t/dune-analytics-style-data-service-for-polkadot-kusama/271 +[3] https://forum.polkadot.network/t/select-from-polkadot/2593/7 +[4] https://github.com/w3f/Grant-Milestone-Delivery/pull/931 + + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 1 month + +We expect to conclude the proposed project in 1 month + +- **Full-Time Equivalent (FTE):** 0.85 FTE + +- **Total Costs:** 10,000 USD + +The total budget requested is US$ 10000 for two PhDs dedicating about 10 days of work each during a 1 month project. Considering the average PhD **daily** rate of US$500 to design and develop a project. + +### Milestone 1 — Knowledge-Base bootstrap + +In this milestone, the focus is on constructing the foundation of the analytics platform by creating a knowledge base. The goal is to define and implement the base components for the dev environment that will be the basis for the proposed platform. This includes evolving with POnto to address queries from the [Data Analysis Tools for Substrate-based Blockchains](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/data_analysis_tools.md) RFP and the Substrate-ETL project. An initial KB component (including triplestore database and basic API endpoint) will be developed to handle operations over POnto entities. + + +- **Estimated Duration:** 1 month +- **FTE:** 0,85 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | Apache 2.0 | +| **0b.** | Documentation/Tutorial | Documentation of the new version of the POnto Ontology, as well as the KB API. | +| **0c.** | Testing and Testing Guide | Testing the KB API. A guide on how to query the KB. | +| **0d.** | Docker | Docker image for the KB Bootstrap. | +| **0e.** | Article | Medium post about the proposed platform roadmap and what we achieved so far. | +| **1.** | POnto Evolution | New version of POnto ontology, addressing aspects from RFP and Substrate-ETL. | +| **2.** | KB Bootstrap | Python code with KB endpoints that interact with Jena triplestore database through fuseki-server. Implementation of an initial API to handle knowledge representation. Along with, scripts to inject the knowledge representation required to bootstrap the KB. | + + +## Future Plans + + +> how you intend to use, enhance, promote and support your project in the short term, and + +The next stages in our roadmap, which are not in the scope of this application grant are: +Stage 2: Semantic ETL workflows +The primary objective of this stage is to structure and develop processing workflows to gather raw data from the Polkadot Ecosystem. The knowledge base will dynamically maintain a formal representation of extracted data aligned with the POnto ontology. + +Stage 3: Controlled Natural Language (CNL) Engine +In this stage, the roadmap foresees a controlled natural language (CNL) specification to leverage the POnto ontology. CNL is a simplified form of natural language designed to be easily understood by both humans and machines. The CNL specification will allow users to interact with the Polkadot Analytics Platform using natural language queries, making the platform more user-friendly and accessible. + +Stage 4: Query Engine +This stage will focus on the development of a query engine to support the execution of CNL-based queries on the knowledge base. The query engine will be responsible for processing user queries, retrieving relevant data from the knowledge base, and providing users with query results. + +Stage 5: Visualization +The final stage focuses on delivering a UI where users will be able to integrate multiple informative artifacts to compose their custom dashboards, facilitating personalized data exploration and analysis. + +The Polkadot Analytics Platform will be an analytics tool. While it will provide valuable data insights, it is not designed to be used as a trading tool and will not offer financial advice or recommend investment strategies. + +## Additional Information :heavy_plus_sign: + +> Work you have already done. + +Prior to this application, the team has conducted scientific research to create an ontology [1, 2, 3, 4] that represents the main concepts and relationships of the Polkadot Ecosystem. This ontology will support the building of the proposed data analysis platform. + +In addition, we have WiP assets being developed in our recently founded [startup](https://mobr.ai). + +We also previously developed a technology that became widely adopted within IBM Research. It is a toolset to deal with knowledge engineering and ontology construction. + +[1] POnto source code: https://github.com/mobr-ai/POnto +[2] POnto documentation: https://www.mobr.ai/ponto +[3] POnto scientific paper: https://github.com/mobr-ai/POnto/raw/main/deliverables/milestone3/article.pdf +[4] Grant Application - A Knowledge-Oriented Approach to Enhance Integration and Communicability in the Polkadot Ecosystem: https://github.com/w3f/Grants-Program/pull/1420 +[5] https://github.com/ibm-hyperknowledge +[6] https://ibm-hyperknowledge.github.io/possibility-link-demo-iswc2022/ + +> Previous grants you may have applied for. + +https://github.com/w3f/Grants-Program/pull/1420 From 1eb44b48a647e69255140be16aab0da57e77e251 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 22 Aug 2023 09:02:41 +0200 Subject: [PATCH 551/665] Update index.md Add Polkadot Analytics Platform --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 32ffa5f0f53..b62153ce5f6 100644 --- a/applications/index.md +++ b/applications/index.md @@ -58,6 +58,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [P2P.ORG](http://p2p.org/) | [P2P data platform](data_platform_with_deep_indexed_data_and_staking_reports.md) | [GitHub](https://github.com/p2p-org) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☐ | ☐ | | [Stake Plus Inc](https://stake.plus) | [Treasury Tracker](TreasuryTracker.md) | [GitHub](https://github.com/stake-plus) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | [🔝](#2023) From 04d7c8388bb3a8b7f5c682c3c9823214b8a4c4c6 Mon Sep 17 00:00:00 2001 From: Alexander Tishin Date: Tue, 22 Aug 2023 17:41:39 +0400 Subject: [PATCH 552/665] Validator monitoring service Update Milestones (#1923) During the development of Milestone 1, we decided to slightly change the order of tasks. The reason lies in the development process during which we decided to more focus on tg bot updates because all the following tasks (that we moved to Milestone 2) require a fully working tg bot. The overall number of deliverables remains unchanged. As suggested by evaluator @dsm-w3f in the evolution: https://github.com/w3f/Grant-Milestone-Delivery/blob/master/evaluations/validator_monitoring_service_1_dsm-w3f.md we open an amendment request. --- applications/Validator_Monitoring_Service.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/Validator_Monitoring_Service.md b/applications/Validator_Monitoring_Service.md index a2ccdb01c73..3bd08b0e02c 100644 --- a/applications/Validator_Monitoring_Service.md +++ b/applications/Validator_Monitoring_Service.md @@ -158,9 +158,8 @@ By utilizing our Telegram bot, users can easily interact with our monitoring too | 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to run events exporter locally, set up Grafana instance, and auto-removing tool. | | 1. | Events exporter | We will create an events exporter (all on-chain events) to show events in the dashboard related to the selected validator addresses. This feature will track all on-chain events and present related events in the user's dashboard for their selected validator addresses. | -| 2. | Improve UX Dashboard | We plan to streamline Grafana's interface by removing surplus controls, enhancing the quality of our charts, and implementing Kiosk mode. We aim to bolster security through provisioning measures, such as enforcing password changes for users. | +| 2. | Telegram bot UI + support chat upgrades | We aim to rebuild user inference of a bot to add more interaction opportunities with the service. As well as we will improve communication with support. Instead of the current one-message ticket system, we will implement a more interactive conversation mode allowing for multiple messages dialog. | | 3. | Create a landing page | We will create a landing page to ease user onboarding to the service. | -| 4. | Auto-remove instances | We will develop a system that identifies and removes inactive Grafana instances. | ### Milestone 2 — Expand the functionality @@ -176,8 +175,9 @@ By utilizing our Telegram bot, users can easily interact with our monitoring too | 0d. | Docker | We will provide a Dockerfile(s) that can be used to self-host the telegram bot and check the functionality. | | 0e. | Article | We will publish an article that explains the user flow of our system and promotes using monitoring for validators operators. | | 1. | Telegram bot adding alerting based on events | We will introduce a feature that allows users to subscribe to specific events. This means users can opt to receive Telegram notifications when their chosen validators receive rewards, are elected into the active set, and more. | -| 2. | Telegram bot UI + support chat upgrades | We aim to rebuild user inference of a bot to add more interaction opportunities with the service. As well as we will improve communication with support. Instead of the current one-message ticket system, we will implement a more interactive conversation mode allowing for multiple messages dialog. | +| 2. | Improve UX Dashboard | We plan to streamline Grafana's interface by removing surplus controls, enhancing the quality of our charts, and implementing Kiosk mode. We aim to bolster security through provisioning measures, such as enforcing password changes for users. | | 3. | Cover monitoring for parachains | We will add the support of the most popular parachains such as Moonbeam, Moonriver, Acala, Karura, Astar, Shiden | +| 4. | Auto-remove instances | We will develop a system that identifies and removes inactive Grafana instances. | ## **Referral Program (optional) 💰** From db3b49c37a3987e2a1c8a9be13283c0b588fc9fc Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 23 Aug 2023 02:22:24 -0400 Subject: [PATCH 553/665] Update RFPs (#1924) * update rfp * Rename social-recovery-wallet.md to social-recovery-wallet.md * update rfp * Rename ISO_8583.md to ISO_8583.md * update rfp * update * update * update * Rename validator-setup-maintenance.md to validator-setup-maintenance.md * Update IDE_for_ink_Smart_Contracts.md --- .../{Under Development => Closed}/social-recovery-wallet.md | 2 +- .../validator-setup-maintenance.md | 3 ++- docs/RFPs/Open/xcm-tool.md | 2 +- docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md | 2 +- docs/RFPs/{Open => Under Development}/ISO_8583.md | 2 +- .../Under Development/ink_smart_contract_block_explorer.md | 2 +- docs/RFPs/Under Development/validator-selection-algorithm.md | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) rename docs/RFPs/{Under Development => Closed}/social-recovery-wallet.md (89%) rename docs/RFPs/{Under Development => Closed}/validator-setup-maintenance.md (92%) rename docs/RFPs/{Open => Under Development}/ISO_8583.md (88%) diff --git a/docs/RFPs/Under Development/social-recovery-wallet.md b/docs/RFPs/Closed/social-recovery-wallet.md similarity index 89% rename from docs/RFPs/Under Development/social-recovery-wallet.md rename to docs/RFPs/Closed/social-recovery-wallet.md index 579b05d5bd0..22cddad44cd 100644 --- a/docs/RFPs/Under Development/social-recovery-wallet.md +++ b/docs/RFPs/Closed/social-recovery-wallet.md @@ -1,6 +1,6 @@ # Social Recovery Wallet -* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/Plus-social-recovery-wallet.md), [Implemented](https://github.com/hypha-dao/hashed-wallet), [Under Development 3](https://github.com/w3f/Grants-Program/blob/master/applications/keysafe_network.md) +* **Status:** [Implemented 1](https://github.com/w3f/Grants-Program/blob/master/applications/Plus-social-recovery-wallet.md), [Implemented 2](https://github.com/hypha-dao/hashed-wallet), [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/dauth_network.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/RFPs/Under Development/validator-setup-maintenance.md b/docs/RFPs/Closed/validator-setup-maintenance.md similarity index 92% rename from docs/RFPs/Under Development/validator-setup-maintenance.md rename to docs/RFPs/Closed/validator-setup-maintenance.md index 933cd2b180f..7dabd5bfd1f 100644 --- a/docs/RFPs/Under Development/validator-setup-maintenance.md +++ b/docs/RFPs/Closed/validator-setup-maintenance.md @@ -1,6 +1,6 @@ # polkadot-validator-setup maintenance -* **Status:** [See Polkadot Validation Node Ansible Setup](https://github.com/polkachu/polkadot-validator) +* **Status:** [Closed](https://github.com/polkachu/polkadot-validator) * **Teams/People that could deliver the RFP:** @melozo, @pmensik, @tylerztl, @bLd75 ## Project Description :page_facing_up: @@ -8,6 +8,7 @@ One of the more accessible ways of spinning up validator nodes is by using the [`polkadot-validator-setup`](https://github.com/w3f/polkadot-validator-setup) repository, which uses a mix of terraform and ansible tools to create a server, adjust its configuration and install the necessary packages needed for running a substrate node. This RFP aims at providing maintenance to that repository and add some small features. +**UPDATE:** This repo has been archived. ## Deliverables :nut_and_bolt: diff --git a/docs/RFPs/Open/xcm-tool.md b/docs/RFPs/Open/xcm-tool.md index 8198519b580..85a7525194c 100644 --- a/docs/RFPs/Open/xcm-tool.md +++ b/docs/RFPs/Open/xcm-tool.md @@ -1,6 +1,6 @@ # XCM library & tools -* **Status:** Open +* **Status:** [Implemented](https://github.com/keeganquigley/Grants-Program/blob/master/applications/ParaSpell_follow-up2.md), [Under Development 1](https://github.com/keeganquigley/Grants-Program/blob/master/applications/xcm-tools.md), [Under Development 2](https://github.com/keeganquigley/Grants-Program/blob/master/applications/xcm-domain-service.md) * **Proposer:** [Bryan Chen](https://github.com/xlc) * **Projects you think this work could be useful for** : Every parachain. diff --git a/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md b/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md index 97e828261a2..d00e9afc75e 100644 --- a/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md +++ b/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md @@ -1,6 +1,6 @@ # Browser based IDE for ink! Smart Contracts -* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/ink-playground-ide-improvements.md) +* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/ink-playground-ide-improvements.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/sandox.md) * **Proposer:** [David Hawig](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/RFPs/Open/ISO_8583.md b/docs/RFPs/Under Development/ISO_8583.md similarity index 88% rename from docs/RFPs/Open/ISO_8583.md rename to docs/RFPs/Under Development/ISO_8583.md index a910d2a595c..1312749da23 100644 --- a/docs/RFPs/Open/ISO_8583.md +++ b/docs/RFPs/Under Development/ISO_8583.md @@ -1,6 +1,6 @@ # RFP: ISO 8583 -* **Status:** Open +* **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/Integrating-ISO8583.md), [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/ISO-8583-implementation.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md b/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md index 5d1b73c750e..fae0d22e091 100644 --- a/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md +++ b/docs/RFPs/Under Development/ink_smart_contract_block_explorer.md @@ -1,6 +1,6 @@ # RFP: ink! block explorer -* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_explorer.md) +* **Status:** [Implemented 1](https://github.com/w3f/Grants-Program/blob/master/applications/epirus_substrate_explorer.md), [Implemented 2](https://github.com/w3f/Grants-Program/blob/master/applications/ink-explorer.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: diff --git a/docs/RFPs/Under Development/validator-selection-algorithm.md b/docs/RFPs/Under Development/validator-selection-algorithm.md index 24766965e0b..5956cce6d10 100644 --- a/docs/RFPs/Under Development/validator-selection-algorithm.md +++ b/docs/RFPs/Under Development/validator-selection-algorithm.md @@ -1,6 +1,6 @@ # RFP: Validator Selection Algorithm -* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/validators_selection.md) +* **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/validators_selection.md) * **Proposer:** [jonasW3F](https://github.com/jonasW3F) ## Project Description From 673e6da58909438061a57beb0f1d3332f5de945d Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 23 Aug 2023 09:10:45 +0200 Subject: [PATCH 554/665] update resolutions --- package.json | 4 +++- yarn.lock | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 716100c6219..8c878feac96 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,9 @@ "url-loader": "^4.1.1" }, "resolutions": { - "semver": "^7.5.4" + "semver": "^7.5.4", + "trim":"^0.0.3", + "got@":"11.8.5" }, "browserslist": { "production": [ diff --git a/yarn.lock b/yarn.lock index 3c76bd6bc6c..81bb326c07f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8018,10 +8018,10 @@ trim-trailing-lines@^1.0.0: resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz#bd4abbec7cc880462f10b2c8b5ce1d8d1ec7c2c0" integrity sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ== -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ== +trim@0.0.1, trim@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.3.tgz#05243a47a3a4113e6b49367880a9cca59697a20b" + integrity sha512-h82ywcYhHK7veeelXrCScdH7HkWfbIT1D/CgYO+nmDarz3SGNssVBMws6jU16Ga60AJCRAvPV6w6RLuNerQqjg== trough@^1.0.0: version "1.0.5" From 80ea9c149cd19c311704883f5746eb64f1c279fe Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 23 Aug 2023 09:18:01 +0200 Subject: [PATCH 555/665] fix resolutions --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8c878feac96..789c4095c82 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "resolutions": { "semver": "^7.5.4", "trim":"^0.0.3", - "got@":"11.8.5" + "got":"13.0.0" }, "browserslist": { "production": [ From 3a7353da8201f8e477f3859f0aa067a6f8ec06ae Mon Sep 17 00:00:00 2001 From: Federico Cicciarella <58514549+FedeC87p@users.noreply.github.com> Date: Wed, 23 Aug 2023 14:46:41 +0200 Subject: [PATCH 556/665] Update with new time-table and milestones (#1915) --- applications/tracking_chain.md | 65 ++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 11 deletions(-) diff --git a/applications/tracking_chain.md b/applications/tracking_chain.md index 895dd9c9697..64182b5403a 100644 --- a/applications/tracking_chain.md +++ b/applications/tracking_chain.md @@ -2,7 +2,7 @@ - **Team Name:** Federico Cicciarella - **Payment Address:** 15ofeBpTMQ7MNbqViRRRbkVz2y3eQt8SCgBy6yVVfsTKhMn2 (USDT) -- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: @@ -44,7 +44,7 @@ The application will handle all the necessary infrastructure setup for transacti ### Project Details -The project will consist of 8 microservices, each with a well-defined task. +The project will consist of 9 microservices, each with a well-defined task. ![TrackingChainSchema](https://github.com/FedeC87p/PublicImage/assets/58514549/74186f4f-ac66-4ac6-afc1-90f19c9b479d) @@ -75,9 +75,12 @@ The project will consist of 8 microservices, each with a well-defined task. 7. Frontend Registry: - Purpose: Provides a user-friendly visualization of all tracked codes with direct links for on-chain verification. -8. Web Application Triage: +8. Web Application: - Purpose: Give the possibility to enter or view the status of onchain traced codes. (it will be fundamental for the demo that will have to lead us users to use the blockchain). +9. Tx Monitor Worker: + - Purpose: Monitor the status of transactions to proceed with any automatic actions or to launch alerts in the event of transactions that cannot be managed automatically. + ![Screenshot_Insert](https://github.com/FedeC87p/TrackingChainGrant/assets/58514549/2e850a3b-1375-4889-a371-8593410b3282) ### **Overview of the technology stack to be used** @@ -124,6 +127,7 @@ I'm working on a project for a censorship-resistant decentralized video platform - https://github.com/TrackingChains/TrackingChain - https://github.com/TrackingChains/EVMTrackingChain +- https://github.com/TrackingChains/InkTrackingChain - https://github.com/FedeC87p ### Team LinkedIn Profiles (if available) @@ -134,9 +138,9 @@ I'm working on a project for a censorship-resistant decentralized video platform ### Overview -- **Total Estimated Duration:** 4 month +- **Total Estimated Duration:** 6.5 month - **Full-Time Equivalent (FTE):** 1 -- **Total Costs:** 10.000 USD +- **Total Costs:** 16.500 USD ### Milestone 1 — Basic functionality @@ -161,7 +165,7 @@ I'm working on a project for a censorship-resistant decentralized video platform | 7. | Ink! Smart contracts. | We will deliver a set of Ink! smart contracts that will able to track the key values. In particular, it will take care of saving in a dictionary key-value formed by a "Key" byte32 and the "Value" a list of bytes. A get call will also be available, which given a "Key" byte32 returns the entire "Value" list of Bytes saved over time, also providing the block number in which the transaction was carried out. It will also include the C# function that the "Tx Generator Worker" service will have to do to write onchain and the read call that will be used by the "Tx Watcher Worker" service. The implementation will partially reuse the [C# SubstrateGaming library](https://github.com/SubstrateGaming) | | 8. | EVM Smart contracts | We will deliver a set of EVM smart contracts that will able to track the key values. In particular, it will take care of saving in a dictionary key-value formed by a "Key" byte32 and the "Value" a list of bytes. A get call will also be available, which given a "Key" byte32 returns the entire "Value" list of Bytes saved over time, also providing the block number in which the transaction was carried out. It will also include the C# function that the "Tx Generator Worker" service will have to do to write onchain and the read call that will be used by the "Tx Watcher Worker" service. The implementation will partially reuse the [C# Nethereum library](https://nethereum.com/) | -### Milestone 2 — Monitor and Recovery functionality +### Milestone 2 — FrontEnd UI - **Estimated duration:** 1 month - **FTE:** 1 @@ -171,14 +175,50 @@ I'm working on a project for a censorship-resistant decentralized video platform | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License | MIT | -| **0b.** | Documentation | We will provide a basic **tutorial** that explains how a user can use a frontend to easily configure profile, watch the transaction status and use recovery tool for failed transactions. | +| **0b.** | Documentation | We will provide a basic **tutorial** that explains how a user can use a frontend to easily configure profile and usage. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will publish an **article**/workshop that explains how to use. | -| 1. | Tx Recovery Worker | Written in C#, The Tx Recovery Worker will used to managed all transaction in failed status. It takes care of trying to re-process any transactions that have ended in error. in case of a new error, the transaction will be cancelled | -| 2. | Frontend Admin Tools | Written in Asp.Net MVC, The frontend for manage all configuration like smart contract used, wallet used, profile association. | -| 3. | Frontend Transaction Monitor | Written in Asp.Net MVC, The monitor to watch all tracking request. A graphical tool that allows you to display the status of all queues on screen. For example showing how many Triage there are, how many Pending, how many failed transactions. | -| 4. | Frontend Registry | Written in Asp.Net MVC, The frontend for user friendly graph of specific product tracked onchain. For each value Key will be show all data Values insured and in wich block/time was performed | +| 1. | Frontend Admin Tools | Written in Asp.Net MVC, The frontend for manage all configuration like smart contract used, wallet used, profile association. | +| 2. | Frontend Transaction Monitor | Written in Asp.Net MVC, The monitor to watch all tracking request. A graphical tool that allows you to display the status of all queues on screen. For example showing how many Triage there are, how many Pending, how many failed transactions. Including the detail of each single Tx within the Triage, Pool, pending and Registry | +| 3. | Frontend Registry | Written in Asp.Net MVC, The frontend for user friendly graph of specific product tracked onchain. For each value Key will be show all data Values insured and in wich block/time was performed | + +### Milestone 3 — Monitor and Recovery functionality + +- **Estimated duration:** 1.5 month +- **FTE:** 1 +- **Costs:** 4.500 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide a basic **tutorial** that explains how watch the transaction status and use recovery tool for failed transactions. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains how to use. | +| 1. | Tx Generator/Watcher Worker | It will be improved to handle any errors that may arise and to retry the process for a configurable number of times. Once the maximum number has been exceeded, it will go into error status and the Watcher will manage the next phase which may be an attempt to re-enter the transaction again starting from the pool or put it definitively in permanent error status so as to be able to process the subsequent elements that were pending of the completely of the Transaction failed | +| 2. | Tx Recovery/Monitor Worker | Written in C#, The Tx Recovery/Monitor Worker will used to managed all transaction in failed status. It takes care of trying to re-process any transactions that have ended in error. in case of a new error, the transaction will be cancelled. It will also take care of generating alerts to be sent by email whenever a something goes wrong | +| 3. | Tx Cleaner Worker | Written in C#, The Tx Cleaner Worker will used to delete all transactions in status Completed from the Triage, PEnding and Pool to make the database lighter, The history will be present in the Registry | +| 4. | Tx Unlocker Worker | Written in C#, The Tx Unlocker Worker will used to to unlock any transactions left Unlocked due to unhandled errors or system crashes that cause a server restart. (very remote hypothesis but very important to manage in order not to lead to a block of all transactions due to unmanaged Unlocks) | +| 5. | Frontend Admin Tools | Improvements to decide which failed Tx's to try to reprocess or mark them as permanently failed and possibility of marking as Aborted the Tx present in the Triage but not yet in Pool status | + +### Milestone 4 — Ink Generation Call Improvement + +- **Estimated duration:** 1 month +- **FTE:** 1 +- **Costs:** 2.000 USD + + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide a basic **tutorial** that explains how configure the transaction with this improvement enable. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article**/workshop that explains how to use. | +| 1. | Tx Generator Worker | Improvement to wait for the transaction to be finalized in order to skip the "Tx Watcher Phase" (this mode will be an option present in the configuration) it's will also allow for better support for chains that don't have access to subscans. To achieve this we will listen via socket in order to wait for the finalization of the generated Tx | +| 2. | Frontend Registry | Improvement that allows you to view not only the data present in the Registry but also to take directly from the data saved in the onchain smart contract | ## Future Plans @@ -186,6 +226,7 @@ I'm working on a project for a censorship-resistant decentralized video platform - Continue meetings with customers interested in entering the web3 and onboard other customers. - Participate in events to be able to demonstrate how our demo works, also showing the portfolio of customers who have already chosen to use it. - Integration DID with Kilt +- Resolve all open [issues](https://github.com/TrackingChains/TrackingChain/issues) - Continue development of other features - Dynamic smart contract data instead of single key-value pairs - Support message bus (like RabbitMQ) @@ -213,3 +254,5 @@ I'm working on a project for a censorship-resistant decentralized video platform - No, all "Future Plans" will be covered by new clients or carried forward by me. 3. Have you applied for other grants so far? - No + + From d97b980938309c33fb0dfac4ca4b7496e828abfd Mon Sep 17 00:00:00 2001 From: David Semakula Date: Wed, 23 Aug 2023 16:06:42 +0300 Subject: [PATCH 557/665] fix RFP links (#1926) --- docs/RFPs/Open/xcm-tool.md | 2 +- docs/suggesting.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/RFPs/Open/xcm-tool.md b/docs/RFPs/Open/xcm-tool.md index 85a7525194c..252516cbede 100644 --- a/docs/RFPs/Open/xcm-tool.md +++ b/docs/RFPs/Open/xcm-tool.md @@ -1,6 +1,6 @@ # XCM library & tools -* **Status:** [Implemented](https://github.com/keeganquigley/Grants-Program/blob/master/applications/ParaSpell_follow-up2.md), [Under Development 1](https://github.com/keeganquigley/Grants-Program/blob/master/applications/xcm-tools.md), [Under Development 2](https://github.com/keeganquigley/Grants-Program/blob/master/applications/xcm-domain-service.md) +* **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/ParaSpell_follow-up2.md), [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/xcm-tools.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/xcm-domain-service.md) * **Proposer:** [Bryan Chen](https://github.com/xlc) * **Projects you think this work could be useful for** : Every parachain. diff --git a/docs/suggesting.md b/docs/suggesting.md index b545e6b72d3..22a8b084131 100644 --- a/docs/suggesting.md +++ b/docs/suggesting.md @@ -18,7 +18,7 @@ If you have an idea for a project or would like to highlight an area in which yo Ideas generally have better chances of being implemented if they're presented in a project outline format that can be picked up straight away by a team, so if you have a good concept of the milestones required to bring your project to life, you can follow the process below and directly submit an RFP: 1. [Fork](https://github.com/w3f/Grants-Program/fork) this repository. -2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md)) inside the [`rfps`](https://github.com/keeganquigley/Grants-Program/tree/master/docs/RFPs) folder. Make sure you create a new file and copy the [contents](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ +2. In the newly created fork, create a copy of the suggestion template ([`rfps/suggestion-template.md`](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md)) inside the [`rfps`](https://github.com/w3f/Grants-Program/tree/master/docs/RFPs) folder. Make sure you create a new file and copy the [contents](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/suggestion-template.md) of the template into the new one, and _do not modify the template file directly._ 3. Name the file after your idea: `project_name.md`. 4. Fill out the template with the project details. Please include as many details as possible. 5. Once you're done, create a pull request in **our** main [Grants-Program repository](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/README.md). The pull request should only contain _one new file_—the Markdown file you created from the template. From 161d8adf34b21033048ef1b9b37d3146ebd0a34d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 23 Aug 2023 15:19:07 +0200 Subject: [PATCH 558/665] Update README.md Add Nikhil Ranjan to the committee --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index dc3e8fce4b3..585de809276 100644 --- a/README.md +++ b/README.md @@ -94,6 +94,7 @@ In cases where a niche expert opinion is desirable, one of the committee members - [Sebastian Müller](https://github.com/semuelle) - [Bill Laboon](https://github.com/laboon) - [Keegan Quigley](https://github.com/keeganquigley) +- [Nikhil Ranjan](https://github.com/nikw3f) - [Raul Romanutti](https://github.com/rrtti) - [Seraya Takahashi](https://github.com/takahser) - [Benjamin Weiß](https://github.com/BenWhiteJam) From 6235be74d7a9226dea4b22e1b062bf243c9c7f80 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 23 Aug 2023 15:20:48 +0200 Subject: [PATCH 559/665] Update team.md Add Nikhil Ranjan --- docs/Introduction/team.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/Introduction/team.md b/docs/Introduction/team.md index 041476e1fda..a267b0379dd 100644 --- a/docs/Introduction/team.md +++ b/docs/Introduction/team.md @@ -18,6 +18,7 @@ In cases where a niche expert opinion is desirable, one of the committee members - [Sebastian Müller](https://github.com/semuelle) - [Bill Laboon](https://github.com/laboon) - [Keegan Quigley](https://github.com/keeganquigley) +- [Nikhil Ranjan](https://github.com/nikw3f) - [Raul Romanutti](https://github.com/rrtti) - [Seraya Takahashi](https://github.com/takahser) - [Benjamin Weiß](https://github.com/BenWhiteJam) @@ -31,6 +32,7 @@ Evaluators are individuals able to evaluate the technology delivered as a result - [Diogo Mendonça](https://github.com/dsm-w3f) - [Sebastian Müller](https://github.com/semuelle) - [Keegan Quigley](https://github.com/keeganquigley) +- [Nikhil Ranjan](https://github.com/nikw3f) - [Seraya Takahashi](https://github.com/takahser) ## W3F Operations Team From 778efc33e81696aab33b8e6a3941f0a6441ff824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 23 Aug 2023 21:26:30 +0200 Subject: [PATCH 560/665] Update index.md Move System Pallet M1 and complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index b62153ce5f6..84c69084e04 100644 --- a/applications/index.md +++ b/applications/index.md @@ -100,7 +100,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | | [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | -| [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | +| [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☒ | ☒ | | [Davanti](https://github.com/liangjh) | [Dot-ETL Project](dot_etl.md)| [GitHub](https://github.com/liangjh) | ☐ | ☐ | ☐ | | [ParaSpell](https://github.com/paraspell) | [LightSpell: XCM API](LightSpell-proposal.md)| [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | From f105168ced447a5bd4cd2e87b6a7e9c500f0b585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 23 Aug 2023 21:28:46 +0200 Subject: [PATCH 561/665] Update index.md Cryptex M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 84c69084e04..951e2aaeec2 100644 --- a/applications/index.md +++ b/applications/index.md @@ -94,7 +94,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | -| [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☐ | ☐ | +| [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | From bca9d0ee09b08a4f1ff4cf76fcf6d2952001fbd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 24 Aug 2023 10:31:16 +0200 Subject: [PATCH 562/665] Create cla.yml (#1925) --- .github/workflows/cla.yml | 43 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 .github/workflows/cla.yml diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml new file mode 100644 index 00000000000..617549ab8a1 --- /dev/null +++ b/.github/workflows/cla.yml @@ -0,0 +1,43 @@ +name: "CLA Assistant" +on: + issue_comment: + types: [created] + pull_request_target: + types: [opened,closed,synchronize] + +# explicitly configure permissions, in case your GITHUB_TOKEN workflow permissions are set to read-only in repository settings +permissions: + actions: write + contents: write + pull-requests: write + statuses: write + +jobs: + CLAAssistant: + runs-on: ubuntu-latest + steps: + - name: "CLA Assistant" + if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read and hereby sign the Contributor License Agreement.') || github.event_name == 'pull_request_target' + uses: contributor-assistant/github-action@v2.3.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # the below token should have repo scope and must be manually added by you in the repository's secret + # This token is required only if you have configured to store the signatures in a remote repository/organization + PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + with: + path-to-signatures: 'signatures/version1/cla.json' + path-to-document: 'https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md' + # branch should not be protected + branch: 'master' + allowlist: semuelle,takahser,Noc2,nikw3f,dsm-w3f,keeganquigley,laboon,github-actions[bot] + + # the followings are the optional inputs - If the optional inputs are not given, then default values will be taken + remote-organization-name: w3f + remote-repository-name: grants-cla + #create-file-commit-message: 'For example: Creating file for storing CLA Signatures' + #signed-commit-message: 'For example: $contributorName has signed the CLA in $owner/$repo#$pullRequestNo' + custom-notsigned-prcomment: 'Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our [Contributor License Agreement](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) before we can accept your contribution.' + custom-pr-sign-comment: 'I have read and hereby sign the Contributor License Agreement.' + #custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.' + lock-pullrequest-aftermerge: false # if you don't want this bot to automatically lock the pull request after merging (default - true) + #use-dco-flag: true - If you are using DCO instead of CLA From 149ef987649c235ae406baff0b7106eea33b789e Mon Sep 17 00:00:00 2001 From: Tania Date: Thu, 24 Aug 2023 19:27:02 +0800 Subject: [PATCH 563/665] =?UTF-8?q?Hyperdot=20-=20Powerful=20data=20analys?= =?UTF-8?q?is=20and=20creations=20platform=20=E2=80=94=20RFP=20(#1815)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add hyperdot rfc * fix: milestone compatibility and delivery shared dashboards * update: changed somethings in the rfc --------- Co-authored-by: alloctor --- applications/Hyperdot.md | 192 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 192 insertions(+) create mode 100644 applications/Hyperdot.md diff --git a/applications/Hyperdot.md b/applications/Hyperdot.md new file mode 100644 index 00000000000..3abc771e9c3 --- /dev/null +++ b/applications/Hyperdot.md @@ -0,0 +1,192 @@ +# Hyperdot - Powerful data analysis and creation platform — RFP + +- **Team Name:** Infra3 +- **Payment Address:** [0xDc2c1814639f113C6EB51b3D8d871372Da9e116A](https://etherscan.io/address/0xDc2c1814639f113C6EB51b3D8d871372Da9e116A) (Ethereum ERC20 USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview 📄 + +This is a response for the [Analytics Website/Data Platform](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/analysis-website-and-data-platform.md) RFP. + +### Overview + +Crypto data is growing rapidly, and large data companies are not consider integrating them into their systems. However, multi-chain crypto data is of significant value to users. The hyperdot is a on-chain data platform for querying, analyzing, and creations, written in Rust. It provides users with powerful capabilities for data querying, analysis, and creations. + +With hyperdot, users can easily query and analyze crypto data from **Polkadot**, **Kusama**, and other **parallel chains built on the Substrate Runtime**. Hyperdot separates the indexing and computation of on-chain crypto data from the off-chain data storage, analysis, and querying, addressing scalability issues present in many data analysis platforms. Hyperdot offers multiple data engines to adapt to different scenarios. + +Hyperdot provides a dashboard similar to [Dune Analytics](https://dune.com/browse/dashboards) and [Chainbase](https://chainbase.com/), offering powerful data analysis and visualization features currently. Users can create queries using different data engines and generate visual data dashboards. Importantly, Hyperdot is dedicated to building a data analysis creations community where data engineers and data scientists can create and share their work based on Hyperdot's data, fostering collaboration and knowledge exchange. + + +### Project Details + + +#### The System Overview + +The Hyperdot project consists of two main system: hyperdot-node and hyperdot-frontend-end. + +hyperdot-Node will ideally integrate the data source of [substrate-etl](https://github.com/colorfulnotion/substrate-etl) to provide an crypto-data query api on the chain + +hyperdot-frontend-end is built using [tailwind css](https://tailwindcss.com/) and [next.js](https://nextjs.org/), creating a modern web dashboard. While it works similar to Dune Analytics, it has its own unique features. Hyperdot-Frontend connects to Hyperdot-Node to provide users with user-friendly chain data analysis capabilities. Moreover, it aims to establish a data analysis community where data engineers and data scientists can create and share insights based on the data provided by Hyperdot. + +#### The System Architecutre + +Hyperdot will consider the success of the existing work of the integration community, for example, on the data source, we will choose to integrate [substrate-etl](https://github.com/colorfulnotion/substrate-etl) as the data of hyperdot-node-front engine, at the same time, in order to maintain good scalability, hyperdot-node will also retain other options. + + +![Hyperdot System Architecture](https://raw.githubusercontent.com/Infra3-Network/hyperdot/dev/docs/imgs/hyperdot-arch2.drawio.png) + +The system is mainly divided into three parts +1. substrate-etl provides the relevant data warehouse, other ecosystems allow us to customize the index, and we will integrate their data as the data source of the system on demand +2. hyperdot-Node will integrate data from common bins provided by substrate etl and provide apis for hyperdot-front-end +3. hyperdot-fronted-end provides a user-friendly front-end interface for data analysis, exploration, and collaborative data analysis creation. It is built using modern front-end technologies. The interaction between hyperdot-fronted-end and hyperdot primarily utilizes HTTP, while GraphQL is used for handling complex data queries. WebSockets are employed for subscription-based data updates. + +#### The Live Demo + +We have deployed a small [live demo](https://playground.infra-3.xyz/) that you can play directly with. + +Querying westend testnet block data + +![query1](https://raw.githubusercontent.com/Infra3-Network/hyperdot-front-end/main/docs/imgs/playground.png) + +Querying the westend block data uses the index + +![query2](https://raw.githubusercontent.com/Infra3-Network/hyperdot-front-end/main/docs/imgs/query.png) + +### Ecosystem Fit + +hyperdot will integrate data from Polkadot, Kusama, and Substrate networks by utilizing the infrastructure of substrate, substrate-etl, and other Parity technology communities. It will support multi-chain and multi-runtime environments. hyperdot will provide a dashboard that enables users to easily query on-chain crypto data using SQL language. Additionally, it will establish a community for data querying, analysis, creation, and sharing, allowing users to exchange insights. + +hyperdot is a data querying, analysis, creation, and sharing platform targeting a wide range of users, including data analysts, data scientists, project managers, and anyone interested in analyzing on-chain crypto data using hyperdot. + +Currently, we have not found similar projects in the Substrate/Polkadot/Kusama ecosystems. Moreover, data analysis systems that support multi-chain, multi-data engine integration with good scalability are rare in other ecosystems as well. We firmly believe that hyperdot will bring significant value to the community. + + + +### QA + +**Q:** Come up with a value proposition to make it viable: "how would the project stay sustainable and capture value?" to sustain operating costs + +**A:** + +- **Sustainability:** First, technically, we have a team with a good web3 background, so we don't get stuck with technical issues. Second, we were able to reduce our storage costs by relying on other projects' data warehouses, which allowed our projects to grow healthier. + +- **Capture value:** We believe that the ecosystem needs a "dune for substrate, but better" project that enables more powerful analytics for all users. + +**Q:** Interview a few parachains/ecosystem teams & researchers on the top 3 "dashboards" or interactive data use cases they'd like to see and include how you would solve that as part of the analysis and data platform RFP. + +**A:** We can't give a precise answer to this question, but we did a deep dive last week into existing data analytics projects in the ecosystem and, similarly, they always present data that users expect on top3. hyperdot is a little different, + +1. hyperdot allows anyone to create analytics dashboards using data provided by the substrate-etl repository, so the top3 ranking is not actually controlled by hyperdot +2. However, we provide a favorites ranking for each dashboard, which can accurately show which data analytics dashboards are widely used by the community based on favorites + + + +## Team + +### Team members + +- **Ryan Xiao** + +- **Ming Dai** + +- **Tania** + + +### Contact +- **Contact Name:** Tania +- **Contact Email:** tania.infra3@gmail.com +- **Website:** https://network.infra-3.xyz + +### Legal Structure + +- **Registered Address:** N/A +- **Registered Legal Entity:** N/A + +### Team's experience + +**Ryan Xiao** is a contributor to the Tendermint-rs and Postgres communities and. With nearly 10 years of software development experience, Ryan Xiao is an expert in Rust and C++ programming languages. He specializes in decentralized systems, large-scale distributed data systems, and cloud computing system development. Ryan Xiao has been involved in the development of the Tendermint-rs community and decentralized data systems based on Tendermint-rs and Postgres FDW. He has also contributed to multiple research-oriented databases at CMU, showcasing a deep understanding of databases. Ryan Xiao has conducted extensive research on Web3 consensus protocols and the Substrate framework, published several articles on Substrate development, and organized related presentations. He has been dedicated to helping more technologists become familiar with and understand Web3 development through Substrate. + +**Ming Dai** has been working in decentralized exchanges for the past few years, focusing on data security. He has a strong passion for Rust and Substrate and has conducted extensive research on Substrate pallet and runtime development, backed by rich practical experience. Ming Dai has studied the design and implementation of Dune and has implemented a data analysis system for the company based on Ethereum's chain. Additionally, Ming Dai is familiar with smart contracts, dApps, frontend design, and developm + +**Tania** has been involved in security audits and operational work at exchanges. She is also an excellent UI designer, dApp creator, and technical document writer. Tania has a deep love for Substrate and ink! and has been exploring the use of ink! to refactor previous smart contracts. + +### Team Code Repos + +- https://github.com/Infra3-Network/hyperdot +- https://github.com/Infra3-Network/hyperdot-fronted-end +- https://github.com/Infra3-Network/hyperdot-data-playground + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/pidb +- https://github.com/bytesleak +- https://github.com/cattania + + +## Development Status 📖 + +In 2022, Ryan started exploring Substrate and The Graph, and at that time, he attempted to add support for Substrate data on The Graph for private chains. This effort lasted for approximately six months. + +Starting from March of this year, Ryan and Ming were inspired by Dune and Chainbase, and they thoroughly studied the architecture design and implementation of these projects. Subsequently, we discussed the feasibility of building a multi-chain, multi-runtime, multi-data engine, scalable platform for web3 data analysis, creation, and a community of web3 data enthusiasts. + +We began designing and implementing Hyperdot, with Tania providing us with a simple data playground. Currently, we have achieved an MVP (Minimum Viable Product) validation of the core components, and they are functioning well. It is estimated that it will take another three months to make them work properly. Therefore, now is the time to apply for a W3F grant and introduce the work we have done to the entire Substrate community. + +## Development Roadmap 🔩 + +### Overview +- Total Estimated Duration: 3 months +- Full-Time Equivalent (FTE): 3 FTEs +- Total Costs: 19,000 USD + + +### Milestone 1 — Completion of all components and core functionalities of hyperdot-node +- **Estimated duration:** 5 weeks +- **FTE:** 3 +- **Costs:** 9,000 USD + +| Number | Deliverable | Specification | +| ------: | ------------------------- | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | +| **1.** | SQL Query API | We will use the bigquery client to integrate substrate-etl from the data sources provided by substrate-etl and creating a data query api using the bigquery client and substrate-etl, including

1. We will integrate the table schema provided by substrate etl to create interfaces for different query capabilities we provide, such as chain information, transaction information, etc.
2. Show the table-scheme of the associated chain
3. Run and save sql queries | +| **2.** | Dashboard Editor | The apis needed to implement the dashboard, including
1. Edit the visualization dashboard page by loading sql
2. Save the dashboard you've edited | +| **3.** | Discovery | We will implement the apis required by the discovery feature for data analytics dashboards and data query sharing, including
1. The dashboards list api
2. dashboards item Detail api. Each dashboard item is clicked to show the user's previously edited dashboard
3. queries List api
4. queries item details api. After clicking each query item, it displays the sql data tables and other information that the user has saved and run before | + + + + + +### Milestone 2 — Completion of all components and core functionalities of hyperdot-fronted-end +- Estimated duration: 7 weeks +- FTE: 3 +- Costs: 10,000 USD + +| Number | Deliverable | Specification | +| ------: | ------------------------------ | ------------------------------------------------------------ | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| **0e.** | Article | We will publish an **article**/workshop that explains [...] (what was done/achieved as part of the grant). (Content, language and medium should reflect your target audience described above.) | +| **1.** | Page Layout | We will provide the basic layout, which will
1. A basic header navigation and routing
2. Dashboard, Queries | +| **2.** | Data Creation - New Query Page | We will provide data analysis querying and creation on the Data Creation Page, and an interactive data analysis querying experience on the New Query Page:

1. New Query Page: This page will display the supported data engines and the associated tables for each engine.
2. Playground Editor: Users will be able to input SQL queries in an interactive manner using the Playground Editor.
3. Dynamic Table: The results of data analysis will be presented using a dynamic table.
4. Visual Chat: We will incorporate a visual chat feature to enhance the objectivity of the data.
5. Save and tag created data queries: Users will have the ability to save their created data queries and add tags to them. | +| **3.** | Data Creation - New Dashboard | New Dashboard allows users to create shareable dashboards that it will
1. Create a Dashboard form
2. Visualize the Query created by the user in the New Query Page | +| **4.** | Discovery - Queries | The Discovery Queries section will showcase data analysis queries created by users in the community. Each creation can be clicked to access the details, where the Playground Editor will explain the SQL syntax and display relevant visualized data tables. | +| **5.** | Discovery - Dashboards | The Discovery Dashboards section will show shared visual dashboards created by users in the community. You can click on each creation to access the details, and once inside you can load a dynamic dashboard based on your query. | + + +## Future Plans + +After completing hyperdot and releasing the first version, we will integrate more data engines, including time series data engines (influxdb), OLAP analytics engines (Clickhouse), and distributed query engines (Spark). + +We will consider indexing more types of data, not just raw chain data, but also decoded dex and not data, as well as additional extrinsic data. Additionally, we plan to establish a mechanism where developers can propose data models they want to index through GitHub or the community. Once adopted, these data models will be incorporated into our data engines. + +We will also consider **integrating ChatGPT to provide natural language querying capabilities (we are think it's something that's going to get the whole community excited about)**. Specifically, users will no longer need to be proficient in SQL and can run queries using natural language prompts. + +We will introduce a P2P structure for storage nodes to make them decentralized. We also plan to optimize and upgrade the UI based on user feedback, such as adding more dashboards and improving the data creation process. Additionally, we will explore integrating Grafana for better data visualization dashboards. + +Lastly, we expect to collaborate with foundations to promote our platform and showcase its value to more users. We will also engage with the community through platforms such as Twitter, YouTube, Medium, and others to introduce hyperdot. + From f6f61fe027c0fcead63cd5b8f4342c9f95901ab7 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 24 Aug 2023 13:56:39 +0200 Subject: [PATCH 564/665] Update index.md Add Hyperdot --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 951e2aaeec2..3731e5ad1f7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -59,7 +59,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☐ | ☐ | | [Stake Plus Inc](https://stake.plus) | [Treasury Tracker](TreasuryTracker.md) | [GitHub](https://github.com/stake-plus) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | - +| [Infra3](https://network.infra-3.xyz) | [Hyperdot - Powerful data analysis and creations platform](Hyperdot.md) | [GitHub](https://github.com/Infra3-Network/hyperdot) | ☐ | ☐ | ☐ | [🔝](#2023) From 751a1689faa23b8517c8aa0b0b111efdaaa8df76 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 25 Aug 2023 02:35:13 -0400 Subject: [PATCH 565/665] Update rfps.md (#1927) --- docs/rfps.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/rfps.md b/docs/rfps.md index b677a114da8..d735537adac 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -53,14 +53,13 @@ If you find an open RFP here that you think you can address, feel free to [submi | [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | | [implementation-benchmarking.md](RFPs/Under%20Development/implementation-benchmarking.md) | 06.06.2023 | | [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 05.07.2021 | -| [ISO_8583.md](RFPs/Open/ISO_8583.md) | 31.05.2022 | +| [ISO_8583.md](RFPs/Under%20Development/ISO_8583.md) | 31.05.2022 | | [move_smart_contract_pallet.md](RFPs/Under%20Development/move_smart_contract_pallet.md) | 02.08.2023 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 23.11.2021 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 27.05.22 | | [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 23.05.2023 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 30.05.2022 | | [Static-Analysis-for-Runtime-Pallets.md](RFPs/Under%20Development/Static-Analysis-for-Runtime-Pallets.md) | 05.07.2023 | -| [validator-setup-maintenance.md](RFPs/Under%20Development/validator-setup-maintenance.md) | 27.04.2023 | | [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 07.12.2022 |
@@ -79,9 +78,10 @@ If you find an open RFP here that you think you can address, feel free to [submi | [php-api.md](RFPs/Closed/php-api.md) | 27.05.2022 | | [php-scale.md](RFPs/Closed/php-scale.md) | 23.11.2022 | | [polkadot-collator-setup.md](RFPs/Closed/polkadot-collator-setup.md) | 22.03.2023 | -| [social-recovery-wallet.md](RFPs/Under%20Development/social-recovery-wallet.md) | 03.03.2023 | +| [social-recovery-wallet.md](RFPs/Closed/social-recovery-wallet.md) | 03.03.2023 | | [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 20.07.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 01.01.2023 | +| [validator-setup-maintenance.md](RFPs/Closed/validator-setup-maintenance.md) | 24.08.2023 | | [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 09.03.2023 |
From c0a761fa0abe29806edc09f0fe7720713189c276 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 25 Aug 2023 12:44:44 +0200 Subject: [PATCH 566/665] Update cla.yml Fix instructions --- .github/workflows/cla.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml index 617549ab8a1..61e24dd3ebc 100644 --- a/.github/workflows/cla.yml +++ b/.github/workflows/cla.yml @@ -36,7 +36,7 @@ jobs: remote-repository-name: grants-cla #create-file-commit-message: 'For example: Creating file for storing CLA Signatures' #signed-commit-message: 'For example: $contributorName has signed the CLA in $owner/$repo#$pullRequestNo' - custom-notsigned-prcomment: 'Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our [Contributor License Agreement](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) before we can accept your contribution.' + custom-notsigned-prcomment: 'Thank you for your submission, we really appreciate it. Like many open source projects, we ask that you sign our [Contributor License Agreement](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/T%26Cs.md) before we can accept your contribution. Please submit the following text as a separate comment:' custom-pr-sign-comment: 'I have read and hereby sign the Contributor License Agreement.' #custom-allsigned-prcomment: 'pull request comment when all contributors has signed, defaults to **CLA Assistant Lite bot** All Contributors have signed the CLA.' lock-pullrequest-aftermerge: false # if you don't want this bot to automatically lock the pull request after merging (default - true) From 87f430d5faab09a9ab8ebb3d2848b158a53cb1b0 Mon Sep 17 00:00:00 2001 From: David Semakula Date: Fri, 25 Aug 2023 18:12:00 +0300 Subject: [PATCH 567/665] Add ink! analyzer (phase 2) (#1904) * Add ink! analyzer (phase 2) * Remove IntelliJ plugin, add more details for scope of core features and add links to VS Code extension user interface demos * update intro for ink! analyzer (phase 2) * fix typo for ink! analyzer (phase 2) --- applications/ink-analyzer-phase-2.md | 309 +++++++++++++++++++++++++++ 1 file changed, 309 insertions(+) create mode 100644 applications/ink-analyzer-phase-2.md diff --git a/applications/ink-analyzer-phase-2.md b/applications/ink-analyzer-phase-2.md new file mode 100644 index 00000000000..29ee9781693 --- /dev/null +++ b/applications/ink-analyzer-phase-2.md @@ -0,0 +1,309 @@ +# ink! Analyzer (Phase 2) + +- **Team Name:** David Semakula +- **Payment Address:** 0x5c1D926f62B61C9cf62167474111385ff7393c61 (USDC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +This application is for a follow-up grant for ink! Analyzer. +- [Previous grant application](https://github.com/w3f/Grants-Program/blob/master/applications/ink-analyzer.md) +- [Previous merged PR](https://github.com/w3f/Grants-Program/pull/1615) + +### Overview + +ink! analyzer is a collection of modular and reusable libraries and tools for semantic analysis of [ink!](https://use.ink/) smart contract code. + +#### Objective + +ink! analyzer aims to improve [ink!](https://use.ink/) language support in [integrated development environments (IDEs)](https://en.wikipedia.org/wiki/Integrated_development_environment), [source code editors](https://en.wikipedia.org/wiki/Source-code_editor) and other development tools by providing modular and reusable building blocks for implementing language features (e.g. diagnostic errors, quick fixes, code completion suggestions, code/intent actions and hover content e.t.c) for the [ink! programming language](https://use.ink/) which is used for writing smart contracts for blockchains built on [Substrate](https://substrate.io/). + +#### Problem + +ink! is an [Embedded Domain Specific Language (eDSL)](https://wiki.haskell.org/Embedded_domain_specific_language) that you can use to write [WebAssembly](https://webassembly.org) based smart contracts in the [Rust](https://www.rust-lang.org/) programming language. +In fact, ["ink! is just standard Rust in a well-defined "contract format" with specialized `#[ink(…)]` attribute macros"](https://use.ink/getting-started/creating-an-ink-project). + +This allows ink! developers to leverage Rust tooling like [clippy](https://doc.rust-lang.org/clippy/), [cargo](https://doc.rust-lang.org/cargo/), [crates.io](https://crates.io/) and excellent IDE/code editor support via [rust-analyzer](https://rust-analyzer.github.io/) and [IntelliJ Rust](https://www.jetbrains.com/rust/). + +However, relying on only generic Rust language support in IDEs, code editors and other development tools has some significant limitations for the developer experience including: + +- No language support (e.g. diagnostic errors/warnings and quick fixes) for ink!'s domain specific semantic rules for smart contracts (e.g. exactly one `#[ink(storage)]` struct, at least one `#[ink(message)]` method and the same for `#[ink(constructor)]`, ink! attributes should be applied to items of the correct type e.t.c). +- Inconsistent editor experience with issues like no code completion and/or hover content for some ink! attribute arguments (e.g `#[ink(payable)]`) because [macro expansion/name resolution and trait resolution are hard problems for generic IDE/code editor tools](https://rust-lang.github.io/compiler-team/working-groups/rls-2.0/#scope-and-purpose) (see also [https://rust-analyzer.github.io/blog/2021/11/21/ides-and-macros.html](https://rust-analyzer.github.io/blog/2021/11/21/ides-and-macros.html)). +- No language support (e.g. go to definition, find references and rename/refactor) for [ink! specific syntax like paths in ink! attribute argument values (e.g. `env` values)](https://github.com/paritytech/ink/blob/v4.2.1/crates/ink/ir/src/ast/mod.rs#L19-L25). + +#### Solution + +To solve the above challenges and improve ink! language support in IDEs, code editors and other development tools, ink! analyzer created two main components: +- [A modular domain-specific semantic analysis library for ink!](https://github.com/ink-analyzer/ink-analyzer/tree/master/crates/analyzer) built on a resilient and lossless parser. +- A [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) [implementation](https://github.com/ink-analyzer/ink-analyzer/tree/master/crates/lsp-server) built on top of the aforementioned semantic analysis library. + +These two components can be reused to add ink! language support to multiple IDEs, code editors and other development tools. + +In particular, a large number of IDEs and code editors support LSP servers either via configurable LSP clients or robust LSP client libraries/APIs/modules, including [Visual Studio Code, Visual Studio, Vim / Neovim, Emacs, Atom, Sublime Text, Acme, Lapce, Eclipse and many more](https://microsoft.github.io/language-server-protocol/implementors/tools/). + +This project makes it relatively easy for: +- Users to enable ink! language support for their IDE, code editor or other development tool if it has either a native/built-in or third-party LSP client that can be configured to launch an LSP server using an executable command (i.e. the path to an [installed ink! Language Server binary](https://github.com/ink-analyzer/ink-analyzer/tree/master/crates/lsp-server#installation)) and can use stdio (standard in/standard out) as the message transport. +- Developers to either build extensions/plugins/integrations that add ink! language support to any tool with robust LSP client libraries/APIs/modules, or add first-class ink! language support to an existing LSP client (e.g. an open-source extension/plugin/integration). + +In addition to [distributing compiled ink! Language Server (`ink-lsp-server`) binaries for a few platforms](https://github.com/ink-analyzer/ink-analyzer/releases), +ink! analyzer additionally distributes a [Visual Studio Code extension](https://marketplace.visualstudio.com/items?itemName=ink-analyzer.ink-analyzer) that ships with a bundled ink! Language Server as a showcase and [reference implementation](https://github.com/ink-analyzer/ink-vscode) for the latter use case. + +The latter option typically provides a better user experience as the user doesn't have to manually install (and update) the ink! Language Server as it can be bundled by the extension/plugin/integration. + +For IDEs, code editors and other development tools that don't have robust LSP client libraries/APIs/modules, extensions/plugins/integrations can either implement their own LSP client middleware or use the semantic analyzer directly. + +This stage of the project will improve ink! language support features across all components by adding: + +- Quick fixes for all existing diagnostic errors and warnings. +- ink_e2e macro support (i.e diagnostics, quickfixes, completions, code actions and hover content). +- Command for creating an ink! project and code/intent actions for inserting code stubs/snippets for relevant ink! entities. +- Go to definition, find references and rename/refactor support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`). +- Diagnostics that verify that the value of `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` are `impl Environment` as well as quick fixes to `impl Environment` for the target item where necessary. +- Inlay hints and signature help/parameter hints for ink! attribute arguments. +- Code/intent actions for "flattening" ink! attributes. + +#### Observation + +In the context of smart contracts and the blockchain ecosystem, [static code analysis](https://en.wikipedia.org/wiki/Static_program_analysis) tends to be closely associated with security and vulnerability detection. +This project uses the narrower term "semantic analysis" because its primary goal (at this stage) is to improve ink! language support in IDEs, code editors and other development tools. +Therefore, for now, ink! analyzer will not provide any features related to security and vulnerability detection. +However, such functionality will be added in the future. + +### Project Details + +#### Architecture Diagram + +![ink! Analyzer - LSP based Architecture Diagram](https://davidsemakula.com/static/images/ink-analyzer/w3f/architecture.png "ink! Analyzer - LSP based Architecture Diagram") +*Figure 1: ink! Analyzer - LSP based Architecture Diagram* + +#### Architecture Components + +##### 1. [Semantic Analyzer](https://github.com/ink-analyzer/ink-analyzer/tree/master/crates/analyzer) + +The semantic analyzer is responsible for parsing the smart contract code, analyzing it based on ink!'s semantic rules for smart contracts and returning semantic information for other components to consume. + +It is written in [Rust](https://www.rust-lang.org/) and uses rust-analyzer's [ra_ap_syntax](https://docs.rs/ra_ap_syntax/latest/ra_ap_syntax/) crate for generating the syntax tree of the smart contract code that it analyzes. + +It uses [ra_ap_syntax](https://docs.rs/ra_ap_syntax/latest/ra_ap_syntax/) instead of other Rust parsing and syntax tree libraries because ink! analyzer has similar [design goals](https://github.com/rust-lang/rust-analyzer/blob/master/docs/dev/syntax.md#design-goals) to rust-analyzer. +The most important being that parsing should be: +- resilient (even if the input is invalid, parser tries to see as much syntax tree fragments in the input as it can). +- lossless (even if the input is invalid, the tree produced by the parser represents it exactly). + +As a concrete example, while ink!'s [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/) crate includes syntax tree and intermediate representation (IR) modules, it uses [syn](https://docs.rs/syn/latest/syn/) as its parser. +[Syn](https://docs.rs/syn/latest/syn/) however, (being ["geared toward use in Rust procedural macros"](https://docs.rs/syn/latest/syn/)) [assumes "that all input to it is well-formed"](https://github.com/rust-lang/rfcs/pull/2256#issuecomment-353753261). +So for the ink!/Rust code snippet below that contains only one invalid line, [syn](https://docs.rs/syn/latest/syn/) simply returns an error while [ra_ap_syntax](https://docs.rs/ra_ap_syntax/latest/ra_ap_syntax/) still generates a lossless syntax tree with errors represented by "error nodes", thus allowing analysis to still be performed on the rest of the valid code. +```rust +#[ink::contract] +mod flipper { + + #[ink(storage)] + pub struct Flipper { + value: bool, + } + + bad statement; // This is an invalid line +} +``` +This makes [syn](https://docs.rs/syn/latest/syn/) (and by extension ink!'s [ink_ir](https://docs.rs/ink_ir/latest/ink_ir/) crate) unsuitable for our IDE/code editor use case. + +##### 2. [Language Server](https://github.com/ink-analyzer/ink-analyzer/tree/master/crates/lsp-server) + +The language server implements the [Language Server Protocol (LSP)](https://microsoft.github.io/language-server-protocol/) and acts as a backend that provides language support features like diagnostic errors, code completion suggestions, code/intent actions and hover content to IDEs, code editors and other development tools. +It uses the semantic analyzer as the engine for providing ink! language support features by: +- translating LSP requests into semantic analyzer interface calls. +- translating semantic analysis results into corresponding LSP types. + +It can be reused by multiple IDEs, code editors and other development tools that support LSP servers either via native/built-in LSP clients or third-party LSP client extensions/plugins/integrations. + +It is written in [Rust](https://www.rust-lang.org/) and uses: +- rust-analyzer's [lsp-server](https://docs.rs/lsp-server/latest/lsp_server/) crate to handle LSP protocol handshaking and parsing messages +- the [lsp-types](https://docs.rs/lsp-types/latest/lsp_types/) crate for LSP type definitions. + +##### 3. Extension/Plugin/Integration + +Extensions/plugins/integrations add ink! language support to a specific IDE, code editor or development tool by communicating with the language server running as a separate process using the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/) via [JSON-RPC](https://www.jsonrpc.org/). + +Only a [VS Code extension](https://marketplace.visualstudio.com/items?itemName=ink-analyzer.ink-analyzer) is currently [implemented](https://github.com/ink-analyzer/ink-vscode). +The VS Code extension is written in [TypeScript](https://www.typescriptlang.org/) using VS Code's [extension API](https://code.visualstudio.com/api) and [language server client library](https://www.npmjs.com/package/vscode-languageclient). + +#### Technology Stack + +[Rust](https://www.rust-lang.org/) - is used for implementing the semantic analyzer and language server components. + +[TypeScript](https://www.typescriptlang.org/) - is used for implementing the VS Code extension. + +### Ecosystem Fit + +This project provides building blocks for improving ink! language support in IDEs, code editors and other development tools thus improving the developer experience for ink! smart contract developers. +It additionally already implements an extension for VS Code, [one of the most popular code editors for developers](https://survey.stackoverflow.co/2022/#section-most-popular-technologies-integrated-development-environment), that also serves as a showcase and reference implementation for using ink! analyzer components to add ink! language support to IDEs and code editors with [robust LSP client libraries/APIs/modules](https://www.npmjs.com/package/vscode-languageclient). + +I'm not currently aware of any similar projects in the Substrate / Polkadot / Kusama ecosystem. +However, for [Solidity](https://docs.soliditylang.org/en/v0.8.19/) and the [Ethereum](https://ethereum.org/) ecosystem, there are: +- many IDE and code editor extensions/plugins/integrations (e.g. [this](https://marketplace.visualstudio.com/items?itemName=JuanBlanco.solidity), [this](https://marketplace.visualstudio.com/items?itemName=NomicFoundation.hardhat-solidity) and [this](https://marketplace.visualstudio.com/items?itemName=AckeeBlockchain.tools-for-solidity) for [Visual Studio Code](https://code.visualstudio.com/) and [Solidity plugin for IntelliJ](https://plugins.jetbrains.com/plugin/9475-solidity)), +- a few language server implementations (e.g. [this](https://github.com/NomicFoundation/hardhat-vscode/tree/development/server) and [this](https://ackeeblockchain.com/woke/docs/devel/language-server/) which are both used by their respective VS Code extensions) +- a [compiler frontend/semantic analyzer](https://github.com/NomicFoundation/slang) being built specifically for "code analysis and developer tooling" (i.e. IDEs, code editors, linters e.t.c) with [similar goals for editing experience as rust-analyzer and ink! analyzer](https://medium.com/nomic-foundation-blog/slang-rethnet-2ad465fd7880). + +## Team :busts_in_silhouette: + +### Team members + +- David Semakula [davidsemakula](https://github.com/davidsemakula) + +### Contact + +- **Contact Name:** David Semakula +- **Contact Email:** hello@davidsemakula.com +- **Website:** https://davidsemakula.com + +### Legal Structure + +I'll be working as an individual. + +- **Registered Address:** N/A +- **Registered Legal Entity:** N/A + +### Team's experience + +I'm an independent Software Engineer & Systems Architect with over 10 years of experience. +I've worked as a technical lead on projects for [HubSpot](https://www.hubspot.com/), [Permobil](https://www.permobil.com/), [Pressboard](https://www.pressboardmedia.com/), [Grindery](https://www.grindery.io/), [InboundLabs](https://w.inboundlabs.co/), [Tunga](https://tunga.io/), [ButterflyWorks](https://www.butterflyworks.org/), [Telegraaf Media Groep (TMG)](https://www.telegraaf.nl/) and many more companies. +I hold a Bachelor of Science in Computer Science degree from [Makerere University, Kampala, Uganda](https://cis.mak.ac.ug/). +You can find my full profile at [https://davidsemakula.com](https://davidsemakula.com). + +### Team Code Repos + +- [https://github.com/davidsemakula](https://github.com/davidsemakula) +- [https://github.com/ink-analyzer/ink-analyzer](https://github.com/ink-analyzer/ink-analyzer) +- [https://github.com/ink-analyzer/ink-vscode](https://github.com/ink-analyzer/ink-vscode) +- [https://github.com/wamutech/wamu-rs](https://github.com/wamutech/wamu-rs) +- [https://github.com/wamutech/wamu-spec](https://github.com/wamutech/wamu-spec) +- [https://github.com/davidsemakula/substrate-vault](https://github.com/davidsemakula/substrate-vault) +- [https://github.com/mukutu-tech/mukutu-safe](https://github.com/mukutu-tech/mukutu-safe) + +### Team LinkedIn Profiles (if available) + +- https://davidsemakula.com (I use my own website for my profile) + +## Development Status :open_book: + +I've delivered implementations of the [semantic analyzer](https://github.com/ink-analyzer/ink-analyzer/tree/master/crates/analyzer), [language server](https://github.com/ink-analyzer/ink-analyzer/tree/master/crates/lsp-server) and [VS Code extension](https://github.com/ink-analyzer/ink-vscode) in the first W3F grant application for this project: +- [First grant application for ink! analyzer](https://github.com/w3f/Grants-Program/blob/master/applications/ink-analyzer.md) and [merged PR](https://github.com/w3f/Grants-Program/pull/1615) +- Semantic analyzer deliveries + - [First delivery](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ink-analyzer-milestone-1.md) + - [Second delivery](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ink-analyzer-milestone-2.md) +- [Language server delivery](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ink-analyzer-milestone-3.md) +- [VS Code extension delivery](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/ink-analyzer-milestone-4.md) + +The VS Code extension is published in the VS Code Marketplace at [https://marketplace.visualstudio.com/items?itemName=ink-analyzer.ink-analyzer](https://marketplace.visualstudio.com/items?itemName=ink-analyzer.ink-analyzer). + +ink! analyzer has also been added to the official ink! documentation portal at [https://use.ink/getting-started/ink-analyzer](https://use.ink/getting-started/ink-analyzer) (under "Third Party Tools and Libraries"). + +You can find a full list of available resources in the [introductory blog post for ink! analyzer](https://analyze.ink/blog/introducing-ink-analyzer#diving-deeper). + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** ~6.75 months +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 48,000 USD + +### Milestone 1 — Semantic analyzer: Quick fixes, ink_e2e macro support, project creation command and code/intent actions for inserting code stubs/snippets for relevant ink! entities + +- **Estimated duration:** ~5-6 weeks +- **FTE:** 1 +- **Costs:** 10,800 USD + +| Number | Deliverable | Specification | +|--------:|-----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | MIT or Apache 2.0 | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust crate update: Quick fixes for all existing diagnostic errors and warnings | I will update the semantic analyzer crate by updating the existing interface that accepts ink! smart contract code as input and returns diagnostic errors and warnings to additionally return quick fixes (suggested edits/code actions) for [all existing diagnostics](https://github.com/ink-analyzer/ink-analyzer/blob/analyzer-v0.7.1/crates/analyzer/src/analysis/diagnostics.rs). I will leverage the existing [methodology for extracting ink! semantic rules](https://github.com/ink-analyzer/ink-analyzer/blob/analyzer-v0.7.1/crates/analyzer/src/analysis/diagnostics.rs#L1-L18) that was used to extract the existing [(more than 74)](https://github.com/search?q=repo%3Aink-analyzer%2Fink-analyzer+%22Diagnostic+%7B%22&type=code) diagnostics errors and warnings to determine the relevant quick fix(es) for each diagnostic based on the related semantic rules and context. The high-level methodology can be summarized as: 1) remove and/or replace ink! attribute for ink! attributes applied to the wrong Rust item (e.g. for `#[ink(storage)]` attribute applied to anything other than a struct, a quick fix to remove the ink! attribute and another to add a relevant ink! attribute, e.g `#[ink::contract]` if the original attribute was applied to a `mod` and no other ink! contracts are defined in the current file e.t.c) 2) remove and/or add/replace Rust invariants for ink! entities that don't satisfy ink! semantic rules based on expected Rust item invariants (e.g. add a self reference - i.e. `&self` or `&mut self` - to an `#[ink(message)]` whose `fn` item's parameters don't include a self reference, or remove a self reference from an `#[ink(constructor)` whose `fn` item's parameters include a self reference, or rename the associated type for a chain extension to `ErrorCode` if no other associated type named `ErrorCode` exists e.t.c) 3) move ink! entities to the appropriate "scope" (e.g. move ink! constructors and ink! messages implemented in the root of the ink! contract module to either the first non-trait `impl` block or create a new `impl` block to for them e.t.c). 4) update order of ink! attributes so that the "primary" attribute comes first (e.g. refactor `#[ink(payable)]\n#[ink(message)]` to `#[ink(message)]\n#[ink(message)]` or `#[ink(anonymous, event)]` to `#[ink(event, anonymous)]` e.t.c). This methodology should not be considered exhaustive at this point as more patterns may be found during actual implementation, in which case, they will be documented. | +| 2. | Rust crate update: ink_e2e macro support | I will update the semantic analyzer crate to return diagnostics, quickfixes, completions, code/intent actions and hover content for the ink_e2e macro via the existing interfaces for all the aforementioned features. Diagnostics and quick fixes will be extracted using the existing [methodology for extracting ink! semantic rules](https://github.com/ink-analyzer/ink-analyzer/blob/analyzer-v0.7.1/crates/analyzer/src/analysis/diagnostics.rs#L1-L18) with the difference being the use of the [ink_e2e_macro crate](https://github.com/paritytech/ink/blob/v4.2.1/crates/e2e/macro/src/lib.rs) (instead of the [ink_macro crate](https://github.com/paritytech/ink/blob/v4.2.1/crates/ink/macro/src/lib.rs)) as the entry point. Completions, code/intent actions (for adding the attribute macro and/or attribute arguments) and hover content will be added for the `#[ink_e2e::test]` macro as well as its associated attribute arguments (i.e. `additional_contracts`, `environment` and `keep_attr`). | +| 3. | Rust crate update: Command for creating a new ink! project with a contract stub | I will update the semantic analyzer crate to provide an interface that accepts a name as input and returns an ink! smart contract code stub/snippet similar to those created by `cargo contract new`. | +| 4. | Rust crate update: Code/intent actions for inserting code stubs/snippets for relevant ink! entities | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns code/intent actions for inserting code stubs/snippets for relevant ink! entities for the current context (e.g. in the context of the root of an ink! contract `mod`, code actions for inserting ink! storage - if an ink! storage struct isn't already defined - and/or ink! event code stubs/snippets which would wrap an edit that adds a `struct` annotated with the relevant ink! attribute e.g `#[ink(event)]` e.t.c). This applies to all ink! entities (i.e. contract, storage, constructor, message, event, trait definition, chain extension, storage item e.t.c.) that would be relevant for any given context - context being determined by the parent/ancestor ink! attribute annotations for the current cursor position. | + +### Milestone 2 — Semantic Analyzer: Inlay hints, signature help/parameter hints and attribute "flattening" + +- **Estimated duration:** ~3-4 weeks +- **FTE:** 1 +- **Costs:** 6,800 USD + +| Number | Deliverable | Specification | +|--------:|--------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | MIT or Apache 2.0 | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust crate update: Inlay hints for ink! attribute argument values | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code as input and returns inlay hints for ink! attribute argument values (e.g. `u32 \| _` for `selector` values, `u32` for `extension` values, `&str (a valid Rust identifier for)` for namespace values, `&str (a comma separated list)` for `keep_attr` values, `Path` for `env` and `environment` values e.t.c). Inlay hints will be provided for all ink! attribute arguments that require values (i.e `env`, `keep_attr`, `namespace`, `selector`, `extension`, `handle_status`, `derive`, `additional_contracts`, `environment` e.t.c). | +| 2. | Rust crate update: Signature help/parameter hints for ink! attribute arguments | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns signature help/ parameter hints for relevant ink! attribute arguments. Signature help/parameter hints will be provided for all ink! attribute macros with associated ink! attribute arguments (e.g. `env` and `keep_attr` for `#[ink::contract()]`, `namespace` and `keep_attr` for `#[ink::trait_definition()]`, `derive` for `#[ink::storage_item()]` e.t.c) and "primary" ink! attribute arguments that can be combined with other ink! attribute arguments (e.g. `anonymous` for `#[ink(event)]`, `payable`, `selector` and `default` for `#[ink(message)]`, `selector` and `default` for `#[ink(constructor)]`, `handle_status` for `#[ink(extension)]` e.t.c). | +| 3. | Rust crate update: Code/intent actions for "flattening" ink! attributes | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns code/intent actions for "flattening" relevant ink! attributes and arguments (e.g. converting `#[ink(event)]\n#[ink(anonymous)]` to `#[ink(event, anonymous)]`, or `#[ink(message)]\n#[ink(payable)]\n#[ink(selector = 1)]` to `#[ink(message, payable, selector = 1)]` e.t.c). "Flattening" will be supported for all ink! attribute arguments that can be combined to form "compound" ink! attributes (e.g. `event` and `anonymous` for ink! events, `message`, `payable`, `default` and `selector` for ink! messages, `impl` and `namespace` for ink! `impl`, `extension` and `handle_status` for ink! extensions e.t.c) and for erroneously split ink! attribute macros and there associated arguments (e.g. converting `#[ink::contract]\n#[ink(env=crate::Environment)]\n#[ink(keep_attr="foo, bar")]` to `#[ink::contract(env=crate::Environment, keep_attr="foo, bar")]` e.t.c). | + +### Milestone 3 — Semantic Analyzer: Go to definition, find references and rename/refactor support for path-based ink! attribute argument values and diagnostics, quick fixes and code/intent actions ink! attribute argument values that should `impl Environment` + +- **Estimated duration:** ~5-6 weeks +- **FTE:** 1 +- **Costs:** 10,800 USD + +| Number | Deliverable | Specification | +|--------:|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | MIT or Apache 2.0 | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust crate update: Go to definition support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns the location where the item resolved by the path (if any) is defined (e.g. for `#[ink::contract(env=crate::MyEnvironment)]`, returns the location where `MyEnvironment` item is defined). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | +| 2. | Rust crate update: Find references support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns locations where the item resolved by the path (if any) is used (e.g. for `#[ink::contract(env=crate::MyEnvironment)]`, returns the locations where the `MyEnvironment` item is used). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | +| 3. | Rust crate update: Rename/refactor support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code, a cursor position and the new name for the item as input and returns the text edits for renaming the item resolved by the path (if any) across the workspace (e.g. for a `MyEnvironment` defined used in an `#[ink::contract(env=crate::MyEnvironment)]` and an `#[ink_e2e::test(environment=crate::MyEnvironment)]`, this renames `MyEnvironment` across all these locations). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | +| 4. | Rust crate update: Diagnostics that verify that `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` are `impl Environment` as well as quick fixes to `impl Environment` for the target item where necessary | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code as input and returns the diagnostics for `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` whose target item doesn't `impl Environment` as well as quick fixes in the form of code/intent actions that insert code stubs/snippets that `impl Environment` for the target item where necessary. | + +### Milestone 4 — Language Server: Updates + +- **Estimated duration:** ~6-7 weeks +- **FTE:** 1 +- **Costs:** 12,800 USD + +| Number | Deliverable | Specification | +|--------:|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | MIT or Apache 2.0 | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the crate, instructions for installing and using the crate and links to other documentation and resources related to the crate. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust binary crate update: ink! Language Server updates | I will update Rust binary crate that implements the Language Server Protocol to support features added to the semantic analyzer in milestones 1, 2 and 3 above. | + +### Milestone 5 — Visual Studio Code Extension: Updates + +- **Estimated duration:** ~3-4 weeks +- **FTE:** 1 +- **Costs:** 6,800 USD + +| Number | Deliverable | Specification | +|--------:|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | GPL-3.0 | +| **0b.** | Documentation | I will provide inline source documentation and a README file (published on [Github](https://github.com/) and the [VS Code marketplace](https://marketplace.visualstudio.com/vscode)) providing general information about the extension, instructions for installing and using the extension and links to other documentation and resources related to the extension. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive integration tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that introduces the new features of ink! analyzer, including updates to the VS Code extension, the language server and the semantic analyzer. | +| 1. | Visual Studio Code Extension: Updates | I will update the Visual Studio Code Extension to support the ink! language support features added to the language server and semantic analyzer in milestones 1, 2, 3 and 4 above. Visual interface demos of all the IDE/editor features can be found in VS Code extension documentation for [diagnostics](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#provide-diagnostics), [completions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-code-completion-proposals), [hover content](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [code actions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [quick fixes](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#possible-actions-on-errors-or-warnings), [signature help/parameter hints (demo uses functions but should still be helpful for interface visualization for ink! attribute arguments)](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#help-with-function-and-method-signatures), [inlay hints](https://code.visualstudio.com/docs/typescript/typescript-editing#_inlay-hints), [go to definition](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-definitions-of-a-symbol), [find references](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#find-all-references-to-a-symbol), [rename/refactor](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#rename-symbols), [snippets/code stubs](https://code.visualstudio.com/docs/typescript/typescript-editing#_snippets) and [commands](https://code.visualstudio.com/api/ux-guidelines/command-palette). | + +## Future Plans + +I will publish updates to the VS Code extension to the [VS Code marketplace](https://marketplace.visualstudio.com/vscode). + +In the short-term, I will likely apply for follow-up funding for: +- adding an IntelliJ platform plugin. +- adding security and vulnerability detection related static code analysis. +- adding more features and maintaining existing components. +- adding new reusable components for tools that don't support LSP. + +As the project is a public good, the long-term goal is to create a community of users, contributors and ecosystem partners who are invested in the project's long-term success because of its utility. + +## Referral Program (optional) :moneybag: + +N/A + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +Web3 Foundation Website. From cde253a58a302547707701919560157df0b483ee Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 25 Aug 2023 11:31:59 -0400 Subject: [PATCH 568/665] Update index.md (#1928) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3731e5ad1f7..30d9b8c1a29 100644 --- a/applications/index.md +++ b/applications/index.md @@ -49,7 +49,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [ChainSafe](https://chainsafe.io/) | Polkadot Snap Maintenance | [GitHub](https://github.com/ChainSafe/metamask-snap-polkadot) | ☐ | ☐ | ☐ | | [justmert](https://github.com/justmert) | [DOTLY: Revolutionizing Polkadot Account Statistics](./dotly.md) | [GitHub](https://github.com/justmert/dotly) | ☐ | ☐ | ☐ | | [Federico Cicciarella](https://www.linkedin.com/in/federicocicciarella/?originalSubdomain=it) | [Tracking Chain](./tracking_chain.md) | [GitHub](https://github.com/TrackingChains/TrackingChain) | ☐ | ☒ | ☐ | -| [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☐ | ☐ | +| [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☒ | ☐ | | [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [On-Chain Automated Treasury Management](./centrifuge-twamm.md) | [GitHub](https://github.com/centrifuge) | ☐ | ☐ | ☐ | | [AISLAND DAO](https://aisland.io) | [Aisland Docsig](./Aisland-DocSig.md) | [GitHub](https://github.com/aisland-dao) | ☐ | ☐ | ☐ | From b9a9e2a88b02cac2f07990848c0a401cf8b6d9dd Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 25 Aug 2023 19:39:46 +0200 Subject: [PATCH 569/665] Update index.md Add ink! analyzer --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 30d9b8c1a29..8316dc077dc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -60,6 +60,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Stake Plus Inc](https://stake.plus) | [Treasury Tracker](TreasuryTracker.md) | [GitHub](https://github.com/stake-plus) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Infra3](https://network.infra-3.xyz) | [Hyperdot - Powerful data analysis and creations platform](Hyperdot.md) | [GitHub](https://github.com/Infra3-Network/hyperdot) | ☐ | ☐ | ☐ | +| [David Semakula](https://github.com/davidsemakula) | [ink! analyzer (phase 2)](ink-analyzer-phase-2.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☐ | ☐ | [🔝](#2023) From 6fbc14da0d53335d66aa9b9f137d01a0195623cb Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Fri, 25 Aug 2023 14:42:41 -0400 Subject: [PATCH 570/665] Update leetcoin.md (#1929) --- applications/leetcoin.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/leetcoin.md b/applications/leetcoin.md index 44c8a76ab14..6edaeb024e0 100644 --- a/applications/leetcoin.md +++ b/applications/leetcoin.md @@ -3,6 +3,7 @@ - **Team Name:** LeetCoin - **Payment Address:** 0x03e95B0657846cD3dCF500791506947272eE12c8 ETH - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1182#issuecomment-1675270082) ## Project Overview :page_facing_up: From b21fedd1c29026da0042d76aa774def89b46abff Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sun, 27 Aug 2023 14:26:43 +0200 Subject: [PATCH 571/665] Update polkasearch.md (#1935) --- applications/polkasearch.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/polkasearch.md b/applications/polkasearch.md index 9f9d6e5b665..1c1078eac0d 100644 --- a/applications/polkasearch.md +++ b/applications/polkasearch.md @@ -3,6 +3,7 @@ - **Team Name:** Aviraj Khare - **Payment Address:** USDC(ERC20) Address: 0x123FfB2efB8D74D10d6B3a882A94531D99234B11 - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1872#issuecomment-1694649921) ## Project Overview :page_facing_up: From 575446421e5a95648993e054aa94e3b33c5cf320 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Sun, 27 Aug 2023 08:27:57 -0400 Subject: [PATCH 572/665] Update vanguard.md (#1931) --- applications/vanguard.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/applications/vanguard.md b/applications/vanguard.md index 731a51537ba..b068b9085ac 100644 --- a/applications/vanguard.md +++ b/applications/vanguard.md @@ -2,7 +2,8 @@ - **Team Name:** Veridise - **Payment Address:** Ethereum: 0x0f8a5076a56b7ECD761562551FAd11DF631447B2 (USDC) -- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/1069#issuecomment-1693802667) ## Project Overview :page_facing_up: From 3f76bfd32dac5ee13ce92625ed71f36ebb3d83d0 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Mon, 28 Aug 2023 09:19:55 -0300 Subject: [PATCH 573/665] Update index.md (#1938) --- applications/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/index.md b/applications/index.md index 8316dc077dc..0f4ed261ec7 100644 --- a/applications/index.md +++ b/applications/index.md @@ -73,7 +73,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DAuth](https://github.com/DAuth-Network) | [DAuth](./dauth_network.md) | [GitHub](https://github.com/DAuth-Network) | ☐ | ☐ | ☐ | | [Galaxy.Do](https://galaxy.do) | [Galaxy: Three-dimensional Web for Polkadot Users](./galaxy.md) | [GitHub](https://github.com/7flash) | ☐ | ☒ | ☐ | | [Web3 Labs Ltd](https://www.web3labs.com/) | [Sirato (Epirus) Substrate Explorer - Phase III](./sirato_substrate_phase3.md) | [GitHub](https://github.com/web3labs) | ☐ | ☒ | ☒ | -| [Collective Intelligence Labs](https://collectiveintelligence.dev/)| [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☐ | ☐ | +| [Collective Intelligence Labs](https://collectiveintelligence.dev/)| [Omnichain Infrastructure](./CILA-omnichain-infrastructure.md) | [GitHub](https://github.com/Collective-Intelligence-Labs) | ☐ | ☒ | ☐ | | [TradeLink](https://tradelink.pro/) | [Sandox](./sandox.md) | [GitHub](https://github.com/BEARlogin) | ☐ | ☒ | ☐ | | [Wunderbar Network](https://wunderbar.network/) | [Vue.js + TypeScript Substrate Front-End Template](./vue-typescript-substrate-frontend-template.md) | [GitHub](https://github.com/WunderbarNetwork) | ☐ | ☐ | ☐ | | [Profond.ai](https://www.profond.ai/) | [Profond](./Profond.md) | [GitHub](https://github.com/emarai) | ☐ | ☐ | ☐ | @@ -92,7 +92,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☒ | ☒ | -| [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☐ | ☐ | +| [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☒ | ☒ | | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | | [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | @@ -118,7 +118,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☒ | -| [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☐ | +| [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | | [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | From d11cae6126be4fbaa46983734a403c9f8c229fe8 Mon Sep 17 00:00:00 2001 From: Shaivik Semwal <60818312+lawmeskiviahs@users.noreply.github.com> Date: Tue, 29 Aug 2023 18:38:12 +0530 Subject: [PATCH 574/665] changing payment details (#1941) --- applications/Grant_management_webapp.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Grant_management_webapp.md b/applications/Grant_management_webapp.md index 8ef3dbedc74..4765962aba4 100644 --- a/applications/Grant_management_webapp.md +++ b/applications/Grant_management_webapp.md @@ -1,7 +1,7 @@ # Grant Management Webapp - **Team Name:** Antier Solutions Pvt. Ltd. -- **Payment Address:** 1XhNxALoCmXF86aiwZtdDJspjWZBiRX9UfbJ4jQsWN15eSu (DOT) +- **Payment Address:** Fiat - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 ## Project Overview :page_facing_up: From 51f51f44fb3948616d283e44e1e1816d0738e7e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 29 Aug 2023 17:09:12 +0200 Subject: [PATCH 575/665] Update announcement-guidelines.md Fix quotes and indentation --- docs/Support Docs/announcement-guidelines.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/Support Docs/announcement-guidelines.md b/docs/Support Docs/announcement-guidelines.md index 12bffcba689..445901fdf2b 100644 --- a/docs/Support Docs/announcement-guidelines.md +++ b/docs/Support Docs/announcement-guidelines.md @@ -36,11 +36,12 @@ We also cross-promote the most recent projects and their milestones on Twitter o - Your CEO / CTO / Founder may want to include a quote of why they picked Web3 Foundation to help gain more visibility and traction in the market. 5. Description of Web3 Foundation - If you wish to mention W3F or Polkadot within the body of your text we recommend the following or similar: - - "Web3 Foundation funds research and development teams building the -technology stack of the decentralized web. It was established in Zug, Switzerland by Ethereum co-founder and former CTO Gavin Wood. Polkadot is the Foundation's flagship project." - - "Polkadot is a scalable sharded chain and the first protocol that provides a secure environment for cross-chain composability across multiple shards. Polkadot also introduces a highly advanced, open governance system that will allow the network to innovate and grow at a much faster pace than legacy networks. Applications from DeFi to energy to gaming will thrive on Polkadot, challenging the centralized platforms of Web 2.0." + > "Web3 Foundation funds research and development teams building the technology stack of the decentralized web. It was established in Zug, Switzerland by Ethereum co-founder and former CTO Gavin Wood. Polkadot is the Foundation's flagship project." + + > "Polkadot is a scalable sharded chain and the first protocol that provides a secure environment for cross-chain composability across multiple shards. Polkadot also introduces a highly advanced, open governance system that will allow the network to innovate and grow at a much faster pace than legacy networks. Applications from DeFi to energy to gaming will thrive on Polkadot, challenging the centralized platforms of Web 2.0." 6. Social connections - - The following text regarding Web3 Foundation's social presence can be added at the end of your article: "Learn more about Web3 Foundation by visiting their [website](https://web3.foundation/), and stay up to date with the latest developments by following them on [Medium](https://medium.com/web3foundation) or [Twitter](https://twitter.com/web3foundation)." + - The following text regarding Web3 Foundation's social presence can be added at the end of your article: + > "Learn more about Web3 Foundation by visiting their [website](https://web3.foundation/), and stay up to date with the latest developments by following them on [Medium](https://medium.com/web3foundation) or [Twitter](https://twitter.com/web3foundation)." ## Recommended language From b182fab0f11b6a40f555355f87ef34508c893910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 29 Aug 2023 22:10:06 +0200 Subject: [PATCH 576/665] Update docusaurus.config.js Update announcement bar --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index b7614ad54eb..09f654f8a93 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -28,7 +28,7 @@ module.exports = { announcementBar: { id: 'announcement', content: - 'Check out our Wave 18 blogpost', + 'Meet us at sub0!', backgroundColor: '#000', textColor: '#ffffff', isCloseable: true, From 64509d05040a68bae03c13f79ec54226ee2d22bc Mon Sep 17 00:00:00 2001 From: Gilang Bhagasakara Date: Wed, 30 Aug 2023 03:51:52 +0700 Subject: [PATCH 577/665] Myriad Social Submission (#1795) --- applications/myriad_social.md | 260 ++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 applications/myriad_social.md diff --git a/applications/myriad_social.md b/applications/myriad_social.md new file mode 100644 index 00000000000..7c50f9f7b7f --- /dev/null +++ b/applications/myriad_social.md @@ -0,0 +1,260 @@ +# Myriad Social - Uncensorable, Decentralized Social Network + +> This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a `>` (such as this one) should be removed. Please use markdown instead of HTML (e.g. `![](image.png)` instead of ``). +> +> See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. +- **Team Name:** Myriad Systems LTD. +- **Payment Address:** 0x89f547Ed40B8e921C566505Ccb71C69F398adbFF (USDT ERC-20) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +> :exclamation: *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* +## Project Overview :page_facing_up: + +### Overview + +Myriad Social is a social network that allows users to have their own platform without being controlled by a central authority. It is decentralized and censorship-resistant. + + +Our app is developed using the Myriad blockchain, specifically as an **[appchain that runs on the Octopus Network](https://oct.network/appchains)**. This provides several benefits. Firstly, it's censorship-resistant since there's no central control point. Secondly, it offers sovereign control as all data is kept in user-hosted instances with the freedom to host. + +The product proposition of myriad is as follows: +- Myriad, a Federated Free Speech platform, empowers users to host their own social network and be a part of the Federation. By self-hosting, users can create their own server and invite others to join, enabling anyone to establish their own social network without depending on a central service. + +- Myriad Social offers a decentralized alternative to current social media platforms. With their crowdsourced method of importing social media posts, users can follow individuals on centralized networks without needing an account on those networks. This allows for greater accessibility and diversity of content. + +- With Myriad's Crypto Value Layer, users can gather posts from various social networks such as Twitter or Reddit and transfer them onto the blockchain. This transforms each post into a tipping wallet, enabling regular social media users to receive cryptocurrency for their content. + +- Myriad Social is a social media platform that is run by both $MYRIA token holders and users, making it self-governing. Unlike traditional platforms, it operates in a decentralized manner, which means that the governance system is more democratic and fair, without being controlled centrally. + +- At Myriad Social, our goal is to support the wider community by offering a range of pallets, services, and seamless integration options for federated social technologies. We strive to enhance the overall ecosystem and provide users with a more comprehensive experience. + +At Myriad, we prioritize interoperability. Our blockchain is powered by Substrate, a framework developed by Parity Technologies for Polkadot. This choice allows for greater flexibility, as our blockchain can easily connect with other popular blockchains like Octopus, Kusama, and Polkadot. + +In addition, Myriad has a federated architecture designed for modularity. This means that its components are extensible and can be treated like building blocks that can be assembled in any desired way. + +Our ultimate objective at Myriad Social is to become the primary decentralized social media platform of the future. After launching in early 2022, we have completed the first and second phases of our product's development, and it is now available on Octopus Network as an **[appchain](https://oct.network/appchains)**. The Octopus project offers great flexibility as appchains can be deployed into a different ecosystem or live as their own blockchain. Additionally, Octopus Network supports protocols that **["graduate" from its network.](https://www.financemagnates.com/thought-leadership/octopus-network-poised-to-unleash-web3-gaming-even-in-the-darkest-of-markets/)** As the second appchain to go live on Octopus Network's ecosystem, Myriad has decided to level up and get embedded into the Kusama ecosystem to reach a wider audience. + +As a parachain that lives in Kusama/Polkadot/Web3 Ecosystem, Myriad provides: +- A new decentralized social network with self-governance capability +- A complete documentation on how to upgrade an existing Octopus appchain or similar substrate-based chains to any Polkadot Ecosystem +- Multi wallet login using various providers + +### Project Details + +##### Architecture + +The following is the architecture that has been deployed on Octopus Network as an appchain and will be deployed fully to Kusama as a parachain. + +![](https://images.squarespace-cdn.com/content/v1/60b2163ddfad756d1d521252/1623264107593-ICJRAFRBW8KPAF614D4T/Tech+Stack-01.jpg?format=1000w) + +##### User Interface Design + +![](https://i.imgur.com/jHZHkcx.png) + +![](https://i.imgur.com/y2bhz4W.png) + +![](https://i.imgur.com/KodihXd.png) + +![](https://i.imgur.com/63PvxKc.png) + +##### Technologies + +- GCP +- Kubernetes (GKE Cluster) +- NodeJS +- MongoDB +- Redis +- Bastion VM + +##### Components + +Myriad’s decentralization is organized into two layers — the **Myriad blockchain** and the **Myriad federation**. While each of these two layers is a network of cooperating computers that collectively constitute the Myriad platform, each individual layer provides something to the platform that the other cannot. + +Myriad’s blockchain layer (composed of Myriad Nodes) is developed with the open-source Substrate blockchain platform and secures data that must be held strictly in global consensus, such as ownership, asset transfer, and global reputation. This includes things like Myria token balances, User’s global reputation scores, and NFT ownership. + +Myriad’s federation layer (composed of Myriad Servers) allows for both scalability and data sovereignty which would not be possible in a pure-blockchain architecture. The federation servers store things like communities, posts, and experiences. This type of data is distinct from the hard-consensus data stored in the blockchain in a few significant ways — It can be high-volume, curated per server, and it’s not used in hard-consensus decisions (such as ownership transfer validation.) + +It’s important to note that the same physical computer can be both a Myriad Node and a Myriad Server (although it need not be both.) These two protocols work together to provide the features of the Myriad platform as a whole. As a consequence of this dual-network architecture, the following things are made possible: +- Myriad Server Operators maintain complete data sovereignty — The network does not force Server Operators to host content they disagree with. This is not possible, for example, in a pure-blockchain architecture where a node +operator only has the binary choice to either host ALL data, or not run a node at all. +- Myriad Servers can scale to millions of Users by leveraging traditional horizontal scaling techniques (which is impossible with conventional blockchains by virtue of the scaling problem) while remaining fully decentralized and censorship-resistant by virtue of any person’s ability to operate a server that maintains their own community’s data. +- The social media experience can be seamlessly augmented by the ability to send and receive tokens, convert any post into an NFT (*future roadmap), or even automate the democratic governance of communities — all with the security properties of hard-consensus blockchains (such as ledger immutability and the unforgeability of digital signatures.) + +### Ecosystem Fit + +Myriad solves the problem where social media has become too controlled by big corporations. By providing a decentralized social media, Myriad allows users on Polkadot/Substrate/Kusama ecosystem to interact and host their own node instances. + +- The target audience of this project is the general audience who are looking for an uncensorable and free social media with web3 capabilities +- The project allows builders on Substrate ecosystem to extend and build on top of the Myriad API +- Similar project: Subsocial. Key difference: Myriad Social is combining decentralization and federation, allowing the off-chain data of the social media to be fully owned by the community. + +## Team :busts_in_silhouette: + +### Team members + +- Lead: Jean Daniel Gauthier (CEO) +- Pandu Sastrowardoyo (Cofounder) +- Gilang Bhagaskara (CTO) +- Serafica Alamanda (Product Manager) +- Irman NM (Lead Engineer & DevOps) +- Abdul Hakim (Blockchain Developer) +- Neka Arta Jaya (Full Stack Developer) +- Ruben Kristian (Full Stack Developer) +- Alvin Dimas (Full Stack Developer) +- Alexander (Full Stack Developer) +- Hildegard Lydia (QA Engineer) + +### Contact + +- **Contact Name:** Jean Daniel Gauthier +- **Contact Email:** ceo@myriad.social +- **Website:** https://myriad.social/about + +### Legal Structure + +- **Registered Address:** House of Francis, Room 303, lle Du Port, Mahe, Seychelles +- **Registered Legal Entity:** Myriad Systems LTD. + +### Team's experience + +The core team members of Myriad Systems consists of professional blockchain consultants with 6 years of experience building and designing blockchain solutions at Blocksphere Indonesia and BlockchainZoo. Some of the team members (Gilang, Serafica, Irman, Abdul Hakim, and Lydia) hold the Certified Blockchain Professional certification from EC-Council. Irman, Lydia, Neka, Alvin, and Ruben have over 8 years of programming experience, and Abdul Hakim have 3 years of RUST experience. Gilang is an entrepreneur, blockchain developer, researcher, teacher, mentor, with over 12 years of experience, and has a reputable influence in blockchain development communities in Indonesia. + +Some interesting projects the team has been involved includes: +- **[Debio Network](https://www.debio.network/):** anonymous-first blockchain for medical and bioinformatics services and data +- **[Realitychain](https://www.realitychain.io/):** a multichain metaverse-as-a-service +- **[Nester City](https://www.nester.city/):** an arcitect-led NFT/metaverse project solving intellectual property and royalty issues of architecture designs + +### Team Code Repos + +- https://github.com/myriadsocial/myriad-node +- https://github.com/myriadsocial/myriad-web +- https://github.com/myriadsocial/myriad-api +- https://github.com/myriadsocial/myriad-federated +- https://github.com/myriadsocial/myriad-node-parachain + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- https://github.com/gilangbh +- https://github.com/irmannmal +- https://github.com/nekaartajaya +- https://github.com/alvin371 +- https://github.com/rubenkristian +- https://github.com/abdulhakim2902 +- https://github.com/RiXelanya +- https://github.com/hilyds + +### Team LinkedIn Profiles (if available) + +- https://www.linkedin.com/in/jean-daniel-gauthier +- https://www.linkedin.com/in/gilangbhagaskara/ +- https://www.linkedin.com/in/irmannmal +- https://www.linkedin.com/in/neka-artajaya-90284524a +- https://www.linkedin.com/in/alvindimas +- https://www.linkedin.com/in/kristian-ruben-sianturi-b0716a216 +- https://www.linkedin.com/in/abdulhakim2902 +- https://www.linkedin.com/in/alexander-8414701b0 +- https://www.linkedin.com/in/hildegard-lydia-84346214a + +## Development Status :open_book: + +- [Whitepaper](https://gateway.pinata.cloud/ipfs/QmX6QrGkqyFWaL9BgbYZcDT2MXoQJrhtLs8sCExJEhZVir) +- [UI/UX Prototype](https://miro.com/app/board/o9J_lOVU73o=/) +- [UI/UX Figma](https://www.figma.com/proto/8VD1J3sdmciKUL5kT3H9gd/Myriad-UI-(Revamp)) +- [Federation](https://miro.com/app/board/uXjVODoOYow=/) +- [Infrastructure](https://miro.com/app/board/o9J_lm01Sy0=/) +- [Tipping Mechanism](https://miro.com/app/board/o9J_l3oi7sI=/) +- [API Architecture](https://miro.com/app/board/o9J_l4Pcors=/?share_link_id=269146707388) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 3 +- **Total Costs:** 30,000 USD + +### Milestone 1 — Parachain setup + +- **Estimated duration:** 1 month +- **FTE:** 3 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | AGPL-3.0 license | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the parachain and copy an Octopus appchain into the Rococo ecosystem.| +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Infrastructure Setup | We will fully replicate the current appchain of the Myriad Social web application running on Octopus Network to Polkadot ecosystem as a parachain in Rococo | +| 2. | Code Refactoring | The modules we implement during this milestone will interact in such a way that the Myriad Social website works with the same functionality as the current one that lives as an appchain on Octopus Network| +| 3. | Data Upgrade | We will fully upgrade the existing data from the Myriad Social web application running on Octopus Network to Polkadot ecosystem| + +Myriad Social will create a parachain on Polkadot while maintaining a foothold in the NEAR ecosystem. + +By maintaining the wallet selector for seamless switching between NEAR and Polkadot, we can expose our current community of NEAR users to Polkadot applications and their communities. + + +### Milestone 2 — Native Polkadot Currency and Wallet Integration + +- **Estimated duration:** 1 month +- **FTE:** 3 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | AGPL-3.0 license | +| **0b.** | Documentation | We will provide **documentation** of the app changes and **video guidance** of how to utilize native DOT currency inside the Myriad Social application environment. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Native Currency Integration | We will enable tokens native to the Polkadot ecosystem as a way of interacting inside our app for tipping and other upcoming features. | +| 2. | Wallet Integration | We will update the current wallet requirement to allow polkadot based wallet login into Myriad app.| + +Myriad Social will utilize native tokens within Polkadot ecosystem within its app environment and incorporate their tokenomics, adding to the utility of the native tokens. + +**Please note that Myriad Social has already enabled DOT as a tipping option within the Myriad application.* + +Our additional work product with the granting of this grant would allow us to develop and offer more features for the token ecosystem community, such as: + +- The ability for Myriad Users to unlock a Premium Post within Myriad using tokens native to the Polkadot ecosystem. +- The ability to utilize other standard tokens within the Polkadot ecosystem within the Myriad app. + +### Milestone 3 — UI Revamp and Enhancement + +- **Estimated duration:** 1 month +- **FTE:** 3 +- **Costs:** 10,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | AGPL-3.0 license | +| **0b.** | Documentation | We will provide **documentation** of the app changes and **video guidance** of how to use the new Myriad Social user interface | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Front end: New UI | We will update the UI that has the functionality: Polkadot setup, connection, and use user guide (Step by step tooltips), simplified transaction flow for tipping, and creating/revealing exclusive content), token on-ramp, simplified timeline discovery (Timeline search function, revamped layout, revamped flow), and first step guide for new users (Step by step tooltips) | +| 2. | B2B Features | We will implement multiuser timelines, multiuser accounts, and multiuser content metrics| +| 3. | Performance improvemment | We will do code refactoring and optimization in order to enhance app performance, ensuring a faster and smoother user experience.| +| 4. | Authentication improvement | We will implement Personal Access Token and Single Sign On using Myriad API | +| 5. | Additional Utility-driven Features| We will implement token-gated timelines, as well as token-gated access to content metrics | +| 6. | Backend: Mobile Wallet| We will implement Myriad connection to polkadot wallet on mobile (currently can only connect to Near wallet)| +| 7. | Backend: Improved algorithm| We will improve algorithm such as: Native import of embedding of additional platforms (Youtube, Twitch, web content), and refactoring of popularity ranking for timelines, posts and hashtags| +| 8. | Backend: Improved federated instance (Self-hosted Myriad Server) deployment| We will create additional, simplified documentation for instance deployment, as well as automated/semi-automated Linode instance deployment | +| 9. | Additional Clients| We will implement Polkadot integration within the Myriad Telegram bot as well as the Myriad Chrome Extension| + + + +## Future Plans + +- Myriad social intends to promote the upgrade process to our community in Telegram, Discord, and other social platforms, as well as working with Octopus to publish the activity in their official channels +- The team will continue working on the Phase 3 (NFT, Social Token, Chat, etc) in the newly deployed ecosystem + +## Referral Program (optional) :moneybag: + +- **Referrer:** Husni Rizal (Polkadot Ambassador) +- **Payment Address:** 14tcZ9ibPGdMwb7XXE4QChgVuJU1xXTvDFpV3E1HpMajbBsH + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** +We received an email invitation from a Parity representative to submit a grant proposal. + +Myriad Social has performed fund raising activities, including a token sale on Skyward Finance in the NEAR Ecosystem, and has received financial backing from a couple private investors. \ No newline at end of file From 9b7b760ce70292161e52713213cd7577ea7d218d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 30 Aug 2023 08:20:20 +0200 Subject: [PATCH 578/665] Update index.md Add Myriad --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 0f4ed261ec7..d84a255eba4 100644 --- a/applications/index.md +++ b/applications/index.md @@ -61,6 +61,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | | [Infra3](https://network.infra-3.xyz) | [Hyperdot - Powerful data analysis and creations platform](Hyperdot.md) | [GitHub](https://github.com/Infra3-Network/hyperdot) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [ink! analyzer (phase 2)](ink-analyzer-phase-2.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☐ | ☐ | +| [Myriad Systems LTD.](https://myriad.social/) | [Myriad Social](myriad_social.md) | [GitHub](https://github.com/myriadsocial/myriad-node) | ☐ | ☐ | ☐ | [🔝](#2023) From 0ffb1a4c2da3d83bb8e80b5bdf69ff6bfabc523e Mon Sep 17 00:00:00 2001 From: Parth <97211975+ParthChaudhary31@users.noreply.github.com> Date: Wed, 30 Aug 2023 17:27:50 +0530 Subject: [PATCH 579/665] Rfp/security marketplace (#1901) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * RFP/security * changes * Tables Updated * Links Updated * changes * WireFrames * MIlestones * Milestone * Techstack Added * Revised Price * Update applications/Security_Marketplace.md Co-authored-by: S E R A Y A * Updated Security Marketplace * RFP amendment * Voting system Pushed On-Chain Co-authored-by: Sebastian Müller --------- Co-authored-by: S E R A Y A Co-authored-by: Sebastian Müller --- applications/Security_Marketplace.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/applications/Security_Marketplace.md b/applications/Security_Marketplace.md index 78415bc730b..1fe40a382fb 100644 --- a/applications/Security_Marketplace.md +++ b/applications/Security_Marketplace.md @@ -86,9 +86,9 @@ Here is an envisioned lifecycle of a project on our platform. 19. The auditors will get platform Points along their profile based on their actions, for every: 1 successful audit completion: 1XP point (Increases with more and more audits) 1 unsuccessful audit: -3XP points (Adds up) -20. The point system is designed to help patrons identify reputable members of the community as well as alert them of newcomers and bad elements. Once a user hits a -6XP rating, he cannot bid anymore +21. The point system is designed to help patrons identify reputable members of the community as well as alert them of newcomers and bad elements. Once a user hits a -6XP rating, he cannot bid anymore on the platform. -21. The proposed platform will charge a certain amount as a platform fee and the arbiter’s commission, the remaining funds will be transferred to the auditor’s wallet address connected to their profile. +22. The proposed platform will charge a certain amount as a platform fee and the arbiter’s commission, the remaining funds will be transferred to the auditor’s wallet address connected to their profile. @@ -256,10 +256,10 @@ Awaiting Response. | **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 1 | UI/UX | We will deliver complete UI/UX designs. | | 2 | Reputation Token Contract| This will be a non-transferrable token smart contract(Soul Bound Token) that will serve as auditors' reward and as proof of reputation points after the successful completion of an Audit. | -| 3 | Escrow Contract| This will be a master contract where all tokens will be managed by patrons and distributed to the Auditors after the successful closure of the Audit. | -| 4 | Audit Directory Contract| This will be a contract that stores all hashes of the audit reports. Which can be retrieved even when the platform goes down. | -| 5 | Arbiters Contract| This contract will have specific arbiters for every audit thread where they can participate in the voting. | -| 6 | Node Services | We will deliver the backend services for login , sign up, 2FA and Profile creation | +| 3 | Escrow Contract| This will be a master contract where all tokens will be managed by patrons and distributed to the Auditors after the successful closure of the Audit.This contract will also store all hashes of the audit reports. Which can be retrieved even when the platform goes down. | +| 4 | Arbiter's voting Contract| This contract will have specific arbiters for every audit thread where they can participate in the voting. | +| 5 | Node Services | We will deliver the backend services for login , sign up, 2FA and Profile creation | + ### Milestone 2 — Application & Deliveries @@ -290,4 +290,5 @@ Awaiting Response. ## Additional Information :heavy_plus_sign: -**How did you hear about the Grants Program?** Through RFP Portal. +**How did you hear about the Grants Program?** +Through RFP Portal. From 6d5a13a8963e3bb363fc3acc673c5ce989de7623 Mon Sep 17 00:00:00 2001 From: LiisaNFT <139144686+LiisaNFT@users.noreply.github.com> Date: Fri, 1 Sep 2023 13:21:22 +0100 Subject: [PATCH 580/665] Liisa NFT Portfolio Tracker (#1855) * Create LiisaPortfolioTracker.md Prepare template * Update LiisaPortfolioTracker.md First draft live * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md - Added languages used in deliverables. * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md Updated: - Architecture - Technologies - Ecosystem fit - Milestones * Update LiisaPortfolioTracker.md * Update LiisaPortfolioTracker.md on protocols used * Update LiisaPortfolioTracker.md Added the respective token standards and/or pallets our solution will support for the various protocols. --- applications/LiisaPortfolioTracker.md | 280 ++++++++++++++++++++++++++ 1 file changed, 280 insertions(+) create mode 100644 applications/LiisaPortfolioTracker.md diff --git a/applications/LiisaPortfolioTracker.md b/applications/LiisaPortfolioTracker.md new file mode 100644 index 00000000000..964c6083374 --- /dev/null +++ b/applications/LiisaPortfolioTracker.md @@ -0,0 +1,280 @@ +# Polkadot NFT Portfolio Tracker by Liisa - MVP + +- **Team Name:** Liisa +- **Payment Address:** 0x096a685Bfd75c3998CFC4c70177e17ee6b582B0A +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: + +Liisa operates as a multi-chain NFT data analytics platform, engineered to empower collectors and investors in making proficient, data-driven decisions. + +This project consists of the development of a custom-built portfolio tracker, explicitly devised for NFTs within the Polkadot blockchain network, catering to the specificities of NFT investment strategies. + +Within the Substrate/Kusama/Polkadot/Web 3 ecosystem, Liisa intends to emerge as a central supplier of granular NFT analytics, distinguishing itself with a user interface tailored to meet the specific requirements of NFT investors. + +The portfolio tracker is designed to accommodate the diverse needs of a broad user base, ranging from active traders to long-term investors and collectors. It pioneers innovative metrics that drive the NFT infrastructure forward, thereby promoting a robust and data-enriched investment environment. + + + + +### Architecture + +PortoflioTrackerArchitectureNew + + +### Technologies + +#### 1) Node.js + +Node.js is an open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside a web browser. It allows developers to use JavaScript to write command line tools and for server-side scripting, enabling the development of fast and scalable network applications. Node.js is event-driven and non-blocking, which makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. + +Within the context of the project, the following packages are used: + - Axios: Axios is an npm package for making HTTP requests in Node.js, simplifying API calls. + - pg: The "pg" package connects Node.js applications to PostgreSQL databases, enabling efficient data retrieval and manipulation. + - Polkadot.js: Polkadot.js simplifies connecting and interacting with the Polkadot ecosystem + - Squid SDK: Squid SDK is a set of tools and libraries to efficiently query the Archive data, transform, enrich and persist into the target store. Squid SDK projects are called squids. + +#### 2) Bubble.io + +Bubble.io is a visual development platform designed to democratize the process of creating web applications. It enables users, even without traditional coding skills, to build complex web applications through a user-friendly interface. Its features include visual programming capabilities, database management tools, a design editor, API integration, and hosting solutions. Essentially, Bubble.io is part of the no-code movement, which allows rapid digital product creation and innovation without requiring deep technical expertise. + +#### 3) React.js + +React.js, often simply called React, is an open-source JavaScript library developed by Facebook for building user interfaces. It allows developers to create reusable UI components and manage the state of an application efficiently. React operates on a virtual DOM, which optimizes rendering by minimizing direct manipulation of the actual DOM and by batching multiple changes together. This results in improved performance and a more seamless user experience. React's component-based architecture and its emphasis on declarative programming make it easier to understand, maintain, and scale applications. + +### Components + +#### 1) Data Source (Subsquid) + +The project aims to create a system to extract and process event data and metadata related to NFTs within the Polkadot ecosystem. The focus is on building flexible and modular data ingestion mechanisms to accommodate different APIs with minimal code changes, using Node.js components for reusability and scalability. + +To expedite development, the team will initially integrate with the Subsquid API, which is well-documented, robust and opensource, and provides extensive data for selected protocols like Astar (ERC721, ERC1155, PSP34, PSP37), Basilisk (Uniques pallet), Efinity (ERC-721, ERC-1155), Moonbeam (ERC-721, ERC-1155), Unique Network (Native NFTs), Moonriver (ERC-721, ERC-1155) and Moonsama (ERC-721, ERC-1155). This initial integration will serve two main purposes: to quickly progress towards a working MVP and to serve as a practical example for future developers looking to extend the system with other data sources in the long term. + +#### 2) Data Enrichment + +Our backend serves as a vital nexus between supported blockchain protocols and valuable metrics we generate for user wallets and NFT collections. It involves three key activities: crafting and executing API queries, initiating timed triggers, and developing computational algorithms for metrics computation. We create and execute precise API queries to extract event data from Subsquid for protocols such as Astar (ERC721, ERC1155, PSP34, PSP37), Basilisk (Uniques pallet), Efinity (ERC-721, ERC-1155), Moonbeam (ERC-721, ERC-1155), Unique Network (Native NFTs), Moonriver (ERC-721, ERC-1155) and Moonsama (ERC-721, ERC-1155). This enables the continuous refresh of our system with recent blockchain events pertinent to the monitored NFT collections and user wallets. + +Our backend employs timed triggers to initiate queries to Subsquid at predefined intervals, ensuring we maintain an up-to-date snapshot of relevant blockchain events. Incoming event data, acquired via timed or event-driven triggers, is processed using specially designed computational algorithms. These algorithms generate key performance indicators (KPIs) and metrics for both user wallets and NFT collections, capturing the most essential insights. The calculated metrics are persistently stored in our database, ensuring their continuous availability for subsequent retrieval, analysis, and the provision of comprehensive insights into users' wallets and NFT collections. + +All the code for data enrichment will be opensource so that more developers in the ecosystem can leverage our processes for retrieving NFT data from Subsquid API and wallets, as well as creating NFT metrics. + +#### 3) Database + +We will be utilizing PostgreSQL as our database management system to store and manage all data. PostgreSQL is an advanced open-source relational database management system that offers a broad range of powerful features. As our choice of infrastructure provider, we will be deploying PostgreSQL on Amazon Web Services (AWS). + +#### 4) Frontend + +We've chosen React.js for our frontend development, due to its open-source nature, and also with the intention of open-sourcing our own platform. This aligns with our commitment to enriching the Polkadot ecosystem, enabling more developers to leverage, adapt, and expand upon our work. React's component-driven approach ensures efficient and modular development, especially vital for our analytics platform. This decision guarantees adaptability for our MVP phase and scalability for expansive growth + +#### 5) Bubble.io plug-ins + +While our frontend for the Portfolio Tracker MVP will be developed using React.js, we recognize the importance of our broader platform's integration with Bubble.io. Hence, we will develop open-source plug-ins for Bubble.io, enabling connections to the selected wallets: Subwallet, Parity signer, Polkadot-js, Fearless wallet, Nova Wallet, and Talisman. These plug-ins, built using Node.js, will empower users to log in using their wallets and facilitate retrieving NFT ownership data for portfolio metrics computation. By open-sourcing these plug-ins, we aim to enhance the no-code community's access to the Polkadot ecosystem. Regarding the integration of React with Bubble.io plugins: While React itself doesn't natively support Bubble.io plugins, we can create a bridge using APIs or webhooks. + +### Ecosystem Fit + +Upon delving deeper into the NFT portfolio tracking landscape within the Polkadot ecosystem, it's evident that while some platforms have incorporated NFT capabilities, they largely remain as extensions of their primary token and DeFi services. Our solution, on the other hand, is purpose-built for NFTs, offering a dedicated platform tailored for the nuanced requirements of NFT enthusiasts and investors. + +As we look ahead, we're keen on forging strategic collaborations with NFT-centric parachains, such as Unique Network, and various NFT marketplaces. Such partnerships will not only amplify the Liisa portfolio tracker's functionality—through the integration of off-chain data—but also bolster their services by synergizing with our advanced analytical tools. + +#### Similar projects: +- Nansen Portfolio +- De.Fi +- Coinstats + +#### What makes us different is: +While platforms like Nansen and Coinstats have made significant strides in the broader crypto space, their focus is primarily on tokens, leaving Polkadot NFTs out of their purview. Meanwhile, the De.Fi platform's emphasis in this domain is still emerging. This observation underscores a distinctive opportunity in the Polkadot ecosystem: the need for a specialized NFT portfolio tracker, a niche we are poised to occupy. + +In the absence of direct parallels, our differentiation can be better understood when juxtaposed with existing wallet services from a technical perspective. + +Technical Differentiation: +1) Users receive an all-encompassing summary, highlighted by our unique Portfolio Scorecard, which evaluates liquidity, volatility, and NFT diversification. +2) Our platform goes beyond static visuals, offering dynamic filtering and sorting capabilities based on salient metrics such as sales and estimated value, resulting in a blend of technical robustness and user engagement. +3) Every NFT token is accompanied by a wealth of insights, ranging from its rarity rank within a collection to a meticulous activity log detailing all related transactions. +4) An aggregated perspective on NFT assets per collection is provided, supplemented with intuitive search features and dynamic filtering, presenting users with an innovative lens to evaluate collection performance. + +In essence, our initiative pioneers novel metrics, visualization techniques, and deep dives into the NFT realm, setting a precedent in the Polkadot ecosystem. + +## Team :busts_in_silhouette: + +### Team members + +- Bernardo Silva: Team Leader, Co-Founder & CEO at Liisa +- Paulo Peixoto: Lead Developer, Full-stack developer, Co-Founder & CTO at Liisa +- Kerim Caner Tümkaya: Backend developer, Data Engineer at Liisa +- Guilherme Leitão: Backend developer, Junior Developer at Liisa +- Alexandre Collignon: UX/UI designer, Head of Marketing & Community at Liisa + +### Contact + +- **Contact Name:** Bernardo Silva +- **Contact Email:** bernardo@liisa.io +- **Website:** www.liisa.io + +### Legal Structure + +- **Registered Address:** Rua José Henriques Coelho 3, 6C, 2770-103, Paço de Arcos, Lisboa, Portugal +- **Registered Legal Entity:** Vírgula Pragmática LDA, VAT: PT517151006 + + +### Team's experience + +#### Bernardo +As Liisa's co-founder and CEO, Bernardo Silva leads a pioneering company leveraging big data for insightful NFT investor decisions. His leadership roots back to Deloitte, managing business consultations and cost-saving initiatives. His strategic role in an EU Digital Transformation Project and the launch of Portugal's largest Energy provider's loyalty program spotlight his tech project management prowess. His time at IKEA Portugal birthed a robust in-store capacity planning framework based on predictive analytics. An Industrial and Civil Engineering graduate, his focus lies in data-driven decision making in Web 3, with a proven ability in steering innovative projects and entrepreneurial initiatives. + +#### Paulo +Paulo Peixoto, Co-founder and CTO of Liisa, is an experienced technical leader with a rich background in full-stack development and specialized proficiency in blockchain data APIs and stream APIs, having experience with EVM NFT data. His expertise has been instrumental in developing Liisa's NFT trading analytics platform, embedding AI into backend processes and extracting and analyzing both real-time and historical NFT data. Formerly at Rainplan, he spearheaded a team to design a unique platform connecting real estate owners with government incentives. His further technical acumen was demonstrated at Updone as a co-founder, where he designed and implemented a custom-made CRM. In his roles at Loxo, Remi, Hardcopy, and MyMedCard, Paulo improved app performance, amplified system analytics, and led solution development. With a CertHE in Banking, Corporate Finance, and Securities from the University of Bedfordshire, Paulo skillfully combines technical mastery with financial knowledge. + +#### Kerim +Kerim Caner Tümkaya is an accomplished Senior Data Scientist at Liisa, specializing in leveraging AI models to extract valuable insights from NFT data. With a profound mastery of data science and a diverse technological skill set, Kerim excels in machine learning, data analysis, and Python programming. Additionally, he possesses advanced cloud engineering skills, effectively utilizing platforms such as Cloudera, GCP, and AWS. Throughout his career, Kerim has made significant contributions in the field of data science. Notably, at Hepsiburada, he applied his expertise in demand and risk modeling, while at Allianz Türkiye, he developed machine learning projects for the banking sector. Kerim's repertoire includes proficiency in Pyspark, Hive, Impala, SQL, R, and GCP, enabling him to tackle complex challenges across various industries. + +#### Guilherme +Guilherme, Junior Backend Developer at Liisa, is a distinguished Computer Science graduate from Instituto Superior Técnico in Lisbon. He stands out with his exceptional academic performance, particularly in areas such as Object-Oriented Programming, Machine Learning, and Distributed Systems. His notable projects include implementing a multi-connection File System, a user-friendly crypto mobile app, and an online currency distributed system, demonstrating profound skills in Python, Java, and C/C++. His contribution to the development of Liisa's NFT trading analytics platform underpins his extensive expertise. Guilherme's versatility, combined with his commitment to every phase of project execution, emphasizes his exceptional technical competence. + +#### Alexandre +Alexandre Collignon is a professional with expertise in product design and experience in the NFT market. As the Head of Marketing and Community at Liisa, he engages with NFT traders daily and understands their needs and preferences. With a background in digital marketing and experience as a Digital and Technology Consultant at EY and Accenture, Alexandre brings a strategic and innovative approach to product design. He has led the development of AI-enabled platforms, resulting in efficiency gains for major industry players. Alexandre's past experiences in front-end development enhance his ability to create intuitive and engaging designs. With his understanding of the NFT market and experience as a trader, Alexandre aims to elevate Liisa's product design and deliver value to the community. + + +### Team Code Repos + +Source codes will reside in +- https://github.com/LiisaNFT + +For further reference +- https://github.com/paulogustavopeixoto +- https://github.com/guilhermeleitao2002 +- https://github.com/kerimtumkaya +- https://github.com/alexcollignon + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/bernardo-silva-631149161/ +- https://www.linkedin.com/in/pauloassispeixoto/ +- https://www.linkedin.com/in/kerim-caner-tumkaya/ +- https://www.linkedin.com/in/guilherme-leit%C3%A3o-47bb27192/ +- https://www.linkedin.com/in/alexandre-collignon/ + +## Development Status :open_book: + +Our team has brought the first iteration of the portfolio tracker mockups to fruition (please see them below in the Mockups section). + +In a proactive endeavor to understand and address the data-related challenges of building the MVP, we have exchanged several emails and engaged in multiple meetings with the Parity team. Through these communications, we ensured technical feasibility of the proposed approach and refined the data approach and mockups to better match the ecosystems' needs. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 3 months +- **Full-Time Equivalent (FTE):** 2.25 +- **Total Costs:** 30,000 USDC + +### Milestone 1 — On-chain data collection, indexing and calculations + +- **Estimated duration:** 1.5 months +- **FTE:** 2.5 +- **Costs:** 17,000 USDC + +| Number | Deliverable | Specification | +| ------ | ------------------------- | ------------- | +| 0a. | License | All code will be open-sourced under Apache 2.0 license. | +| 0b. | Documentation | Documentation includes Inline Code Documentation, Configuration Documentation, Readme file. Documentation on the modular design of Subsquid API calls is included. | +| 0c. | Testing Guide | The code will have unit-test coverage (min. 50%) to ensure functionality and robustness. In the guide, we will describe how to run these tests | +| 0d. | Docker | Provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1a. | Modular Subsquid API calls | Design and implement API queries to extract event data from the Subsquid API for the supported protocols and the respective token standards and/or pallets: Astar (ERC721, ERC1155, PSP34, PSP37), Basilisk (Uniques pallet), Efinity (ERC-721, ERC-1155), Moonbeam (ERC-721, ERC-1155), Unique Network (Native NFTs), Moonriver (ERC-721, ERC-1155) and Moonsama (ERC-721, ERC-1155). The design will be modular to allow easy replacement with different APIs. This will be developed using Node.js. | +| 1b. | Timed-Triggers | Establish timed triggers to initiate queries to the Subsquid API at predetermined intervals, subsequently refreshing the associated events database with the most recent data. This will be developed using Node.js on the main code and will use cronjobs on the cloud to set the triggers. | +| 1c. | User-initiated Triggers | Implement event-driven triggers that are activated upon user interactions with the application, specifically upon insertion of a wallet address. This will initiate Subsquid API queries and subsequently update the associated events database with the retrieved data. This will be developed using Node.js. | +| 2a. | Open-sourced Computational algorithms | Design and implement computational algorithms that, upon activation of either event-driven or timed triggers and the consequent receipt of new event data, will produce key performance indicators (KPIs) and metrics for both user wallets and NFT collections. The calculated metrics will subsequently be stored persistently in the database for subsequent analysis and retrieval. This code will be open-sourced and developed using Node.js. | + + + + +### Milestone 2 — Portfolio tracker front-end implementation + +- **Estimated Duration:** 1.5 month +- **FTE:** 2.0 +- **Costs:** 13,000 USD + +| Number | Deliverable | Specification | +|-------:|--------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | Documentation includes Inline Code Documentation, Configuration Documentation, Readme file | +| 0c. | Testing Guide | The code will have unit-test coverage (min. 50%) to ensure functionality and robustness. In the guide, we will describe how to run these tests | +| 0d. | Docker | Provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | Write a Medium article that explains the work done as part of the grant. | +| 1a. | Bubble.io wallet plugins | Design and engineer custom Bubble.io plugins for the selected wallets. The plugins will be architected to integrate wallet log-in (signature) into our front-end application interface. The plugins will be published on the Bubble.io marketplace and made freely available to the wider developer community. Selected wallets: Subwallet, Parity signer, Polkadot-js, Fearless wallet, Nova Wallet, Talisman. This will be developed using Javascript. | +| 1b. | Wallet address transmission | Implement a front-end authentication module that captures and transmits wallet addresses from the user sign-in process to our backend. The transmission activates event-driven triggers, initiating Subsquid API queries for relevant event data retrieval. This will be developed using Node.js and React.js. | +| 2a. | Dashboard Structure Implementation | Utilizing provided mockups as the architectural blueprint, implement the user interface for the application dashboard. This involves arranging key performance indicators (KPIs) and various data visualization elements according to the predefined design. This will be developed using React.js. | +| 2b. | Dynamic Dashboard Values | Implement a real-time data binding mechanism that retrieves and displays updated portfolio data from the database, activated by event-driven triggers as defined in 1b. This will be achieved using a websocket client connected to our PostgreSQL Database. | + +## Mockups + +### Portfolio Overview + +The homepage of the portfolio provides a quick and insightful summary of the user's NFT holdings, including key features such as: +- Overview Metrics: Displaying estimated portfolio value, revenue from NFT sales, spending on NFT purchases, realized profit-and-loss, and unrealized profit-and-loss; +- Portfolio Scorecard: Assessing liquidity, volatility, and diversification of the NFT portfolio; +- Portfolio Evolution Chart: Visualizing the historical value evolution of the NFT portfolio; +- Inventory Chart: Illustrating the relative value distribution of each NFT holding. +- Collection Highlights: Ranking collections in the user’s wallet based on top gainers, top losers, and recent purchases. + +![Portfolio tracker #1 (1)](https://github.com/LiisaNFT/W3F-Grants-Program/assets/139144686/ae122745-4d96-4c2a-86af-a8bc8230f63a) + +### NFTs page + +The NFTs page offers users a technical and visually engaging interface to view their NFT collection: +- NFT Images: Displaying artwork and associated metadata for each token; +- Token Metrics: Showing estimated value, acquisition price, unrealized PNL, and 24-hour sales for each collection; +- Filtering and Sorting: Allowing users to sort and filter NFTs based on metrics like collection sales and estimated value. + +![Portfolio_tracker_2_1](https://github.com/LiisaNFT/W3F-Grants-Program/assets/139144686/ca77234f-dba4-4ede-8860-981d958ba3fd) + + +### Individual item page + +The individual item page allows users to delve into the comprehensive details of each NFT from their collection, providing a technical and in-depth analysis of the specific token. +- NFT Images: Showcasing artwork and associated metadata. +- Token Metrics: Providing estimated value, last sale price, unrealized PNL, acquisition date, and rarity rank within the collection. +- Historical Chart: Visualizing sales history and estimated value evolution over different timeframes. +- Activity Table: Logging all events related to the NFT, including sales, transfers, and minting. + +![Portfolio tracker #3 (1)](https://github.com/LiisaNFT/W3F-Grants-Program/assets/139144686/9ce0f425-3e2e-4901-9bd5-d68817afc3b4) + + +### Collections page + +The collections page provides users with an aggregated view of their NFT holdings by collection, allowing them to assess collection performance and its impact on their portfolio. +- Metrics per Collection: Includes NFTs owned, sales floor and % change for a timeframe, total invested value, estimated value, unrealized PNL, and collection volume. +- Filters and Sort: Users can compare values in native tokens or dollars, select timeframes, and sort the table by various metrics. +- Search: Quick search bar filters the table dynamically as the user types, facilitating collection analysis. +- This page offers a concise and efficient way for users to evaluate the performance and contribution of each NFT collection in their portfolio + +![Portfolio tracker #4 (1)](https://github.com/LiisaNFT/W3F-Grants-Program/assets/139144686/12288478-21f2-4fab-9269-dfdc20693ed8) + +## Future Plans + +Immediate Plans in the timeline includes +- User testing and improvements to the portfolio tracker +- Integrating the portfolio tracker as part of the Liisa multi-chain NFT analytics platform +- Integrate NFTs from the supported protocols in the Liisa multi-chain NFT analytics platform + +Our Roadmap includes +- User-defined alerts for NFT events +- Integration with NFT marketplaces for off-chain data querying, specifically marketplace listings and bids +- Integration of AI models for NFT valuations +- Development of a mobile application +- Integration of additional protocols +- Token tracking + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** +From talking to the Parity Team + +**What work has been done so far?** +We have developed and deployed the Liisa NFT analytics platform, currently supporting ETH and MATIC NFTs, including both off-chain and on chain data visualizations and KPIs + +**Are there are any teams who have already contributed (financially) to the project?** +Yes, our Incubator and VC + +**Have you applied for other grants so far?** +No From a39d9b6ecdc4863d534e9b6d2703e46ab198866b Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 1 Sep 2023 14:24:10 +0200 Subject: [PATCH 581/665] Update index.md Add Liisa --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index d84a255eba4..1b1301fab27 100644 --- a/applications/index.md +++ b/applications/index.md @@ -62,6 +62,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Infra3](https://network.infra-3.xyz) | [Hyperdot - Powerful data analysis and creations platform](Hyperdot.md) | [GitHub](https://github.com/Infra3-Network/hyperdot) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [ink! analyzer (phase 2)](ink-analyzer-phase-2.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☐ | ☐ | | [Myriad Systems LTD.](https://myriad.social/) | [Myriad Social](myriad_social.md) | [GitHub](https://github.com/myriadsocial/myriad-node) | ☐ | ☐ | ☐ | +| [Liisa](www.liisa.io) | [Polkadot NFT Portfolio Tracker](LiisaPortfolioTracker.md) | [GitHub](https://github.com/LiisaNFT) | ☐ | ☐ | ☐ | [🔝](#2023) From 2b7591925f9584e9f4da8abae0887b7f14d29af4 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Fri, 1 Sep 2023 14:30:04 +0200 Subject: [PATCH 582/665] fix website --- applications/LiisaPortfolioTracker.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/LiisaPortfolioTracker.md b/applications/LiisaPortfolioTracker.md index 964c6083374..da742528247 100644 --- a/applications/LiisaPortfolioTracker.md +++ b/applications/LiisaPortfolioTracker.md @@ -20,7 +20,7 @@ The portfolio tracker is designed to accommodate the diverse needs of a broad us ### Architecture -PortoflioTrackerArchitectureNew +PortoflioTrackerArchitectureNew ### Technologies From 35854a6871ec79e817b294e0383cb86e335d6ffe Mon Sep 17 00:00:00 2001 From: Pablo Corrado <107150702+pcorrado-np@users.noreply.github.com> Date: Fri, 1 Sep 2023 13:06:22 -0300 Subject: [PATCH 583/665] Grant Application: Roloi - XCM Payment Automation (#1857) * Grant Application: Roloi - XCM Payment Automation * Modify application - Fixed image - Updated technical details section to better describe the current process - Added a new "Our solution" section to describe our generic software solution - Added a new "Wireframes" section to display our UI initial wireframes * Modify application: Wireframe image in document * Modify Application: Technical details --- applications/roloi-xcm-payment-automation.md | 205 +++++++++++++++++++ 1 file changed, 205 insertions(+) create mode 100644 applications/roloi-xcm-payment-automation.md diff --git a/applications/roloi-xcm-payment-automation.md b/applications/roloi-xcm-payment-automation.md new file mode 100644 index 00000000000..699a43c1f87 --- /dev/null +++ b/applications/roloi-xcm-payment-automation.md @@ -0,0 +1,205 @@ +# Roloi - XCM Payment Automation + +- **Team Name:** NeoPower Digital +- **Payment Address:** 1dz667uQX199rHyj6tizmL6EJe4AZxjH1RhnyrT1QuQ4pfS (Polkadot - USDT) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview + +We are [NeoPower](https://twitter.com/NeoPowerDigital), a Web3 software company. We are currently building a payment automation platform called [Roloi](https://twitter.com/RoloiMoney). + +Last year we received a [W3F Grant](https://github.com/w3f/Grant-Milestone-Delivery/blob/master/deliveries/roloi_milestone_1.md) for the migration of our Streaming Smart Contract from Cosmos to Polkadot. We talk about this migration journey in a [Medium Article](https://medium.com/@RoloiMoney/cosmwasm-to-ink-beyond-the-cosmos-e4920604f9cb). + +Roloi is based on three automation pillars: +- Token streaming +- Recurring payments +- Conditional payments + +As a next step for Roloi, we are going to build the **recurring payments feature**. + +Roloi can achieve this by avoiding off-chain mechanisms thanks to [OAK Network](https://oak.tech/): the automation parachain. + +### Project Details + +#### Goal + +Automate ink! smart contract transactions in a recurring way. + +#### How to achieve it + +We need to notify our Smart Contract deployed on **Shiden** (Astar) whenever a **scheduled transaction** should be executed. + +**XCM** enables us to connect parachains. This way, we can schedule transactions on **Shiden** (Astar) with the assistance of **Turing** (OAK). + +#### Technical details + +Creating products using XCM implies a complex journey today. Here is an example between Astar and OAK: + +![W3F Grant - XCM Payment Automation](https://i.imgur.com/lrjifU5.png) + +There are some DX/UX issues while building products with the out-of-the-box approach: +- The process to enable the connection between chains requires the **configuration of Proxy Accounts** on both chains. +- Users have to manually **top up their Proxy Accounts** in order to allow them to pay for fees to act on their behalf. +- **XCM messages are complex** to understand and generate. +- Managing **on-chain recurring transactions** is always a complex task. +- **Polkadot.js** is great for low-level development, but **hard to use for user-oriented products.** + +#### Our solution + +Our deliverable will include a **Next.js UI** and an **ink! smart contract** to create recurring transfers leveraging XCM features. + +The included features on the Next.js UI are: +- ✅ Wallet connection +- ✅ 1-click proxy accounts setup +- ✅ Recurring payment creation +- ✅ Incoming and outgoing payments section +- ✅ useink() library + +For devs: +- 💻 Our own useful hooks and reusable abstractions in Typescript to encapsulate tasks such as: + - Creating proxy accounts on both sides + - Depositing funds into these accounts to cover fees + - Wrapping the recurring transaction to be executed via Astar Proxy Account + - Transmitting the recurring task configuration via XCM & HRMP +- 💻 ink! smart contract example used to trigger payments +- 💻 Recurring payment data model + +Some hook examples: +![W3F Grant - XCM Payment Automation - Hook examples](https://i.imgur.com/Qfrjp4S.png) + +This project will be generic and open source to serve the Polkadot builders community as a **public good** that teams can use to **automate transactions** leveraging **cross-chain features**. + +**This will make building with XCM fast and simple.** + +#### Wireframes + +![Wireframe](https://i.imgur.com/5hVZWuF.png) + +### Ecosystem Fit + +This project is a **public good for the Polkadot Builders community**. For NeoPower, this will be a great experience since all of this work will give us more traction to **grow Roloi**. + +Our intention is to provide a **generic and open-source project** that can be the starting point to many real use cases of cross-chain payments using XCM. + +The code will be backed with robust and clear documentation. This will allow our platform to be easy-to-use and effortlessly scalable. + +We also plan on publishing a **Medium Article** to **share our experience developing with XCM**. + +At NeoPower, we are always contributing to the Polkadot Spanish community with educational content: +- [ink! workshop (Polkadot Hackathon Latam)](https://www.youtube.com/watch?v=u9VmpjLfMkA&list=PLmL99foFXSfghdKCvI7oXq6-5G3zCSBsS&index=3&ab_channel=NeoPower) +- [ink! workshop (Polkadot Blockchain Academy - Buenos Aires)](https://youtu.be/jHUvwO0siKo) +- [ink! intro (Polkadot Hackathon Latam - Closing event)](https://youtu.be/ESbrKJ1eXZY) +- [“What’s Roloi?” talk (Polkadot Latam Day)](https://youtu.be/o7BwYB1LmCE) +- [ink! Development Workshop (Universidad Iberoamericana, Mexico)](https://www.youtube.com/watch?v=nmboRFPK9mI) +- [ink! official docs - Translation to Spanish](https://github.com/paritytech/ink-docs/pulls?q=is%3Apr+is%3Aclosed+author%3Apcorrado-np) +- [How to use useink! Library - Video Playlist](https://youtube.com/playlist?list=PLmL99foFXSfjL8iuQTJ7ah_jDVv4os3p8) +- ["Gavin Wood's vision of Polkadot" talk (Polkadot Decoded 2023 - View Party Buenos Aires)](https://twitter.com/NeoPowerDigital/status/1674568722755866624?s=20) +- ["Payments in Crypto for Humans" talk (Polkadot Decoded 2023 - Satellite Event Buenos Aires)](https://twitter.com/RoloiMoney/status/1677388280155832322?s=20) +- (coming soon) ink! 8-week course in Spanish (Polkadot Hub) + +## Team :busts_in_silhouette: + +### Team members + +We are NeoPower, a Web3 software company. Our core team members: +- Brian Sasbon (Co-Founder & CEO) +- Pablo Corrado (Co-Founder & CTO) +- Hernán Hermida (CGO) + +### Contact + +- **Contact Name:** Brian Sasbon +- **Contact Email:** bsasbon@neopower.digital +- **Website:** https://neopower.digital/ + +### Legal Structure + +- **Registered Address:** Pacheco 2131, CABA, Buenos Aires, Argentina (CP1431) +- **Registered Legal Entity:** NeoPower Digital, LLC + +### Team's experience + +#### Founders + +We are Brian and Pablo, Software Engineers with a Degree from the National Technological University (UTN) from Buenos Aires, Argentina, and have more than 10 years of experience as developers for many different projects. We have strong experience working as Full-stack Developers and Team Managers for US traditional finance clients like Morgan Stanley, Visa, and JP Morgan. + +6 years ago we founded NeoPower, our own software company to work for different clients building freelance teams of designers, developers, and testers. + +We are building Roloi, a payment automation platform to enable on-chain payment flow automation in Astar. Our project was supported with a first grant from the Web3 Foundation. + +#### CGO + +Hernán S. Hermida (aka Milstein) is a DeFi Researcher with more than two years of experience contributing to educational communities in Latam. Currently, he hosts #DeFiSpace, a weekly Twitter Spaces cycle, with more than 50 episodes, interviewing builders from different multi-chain projects, and creates content for “La Multisig”, a web3 educational YouTube Channel with its community. + +He’s the growth lead of DeFi Argentina a non-profit project that helps children’s food banks in Argentina by collecting donations in cryptocurrencies. + +He’s also been an OAK ambassador since Nov 2022. + +Hernán is part of the Roloi team as CGO to help with the growth, research, and networking strategy, leveraging his knowledge about DeFi and communities. + + +### Team Code Repos + +- [NeoPower GitHub Repository](https://github.com/NeoPower-Digital) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2.5 months +- **Full-Time Equivalent (FTE):** 3 +- **Total Costs:** $ 52,500 + +### Milestone 1 - UI on Rococo Testnet + +- **Estimated duration:** 1.5 months +- **FTE:** 3 +- **Costs:** $ 31,500 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will provide a general tutorial for the user to understand how to use the dApp and technical documentation of the main functionalities. | +| **0c.** | Testing | To guarantee robustness, the main functionality will be covered by unit tests. | +| **1.** | UI | As expressed in the Project Details section, we will provide a **Typescript Next.js Web App** that includes key abstractions to simplify the developers' work when using XCM and connecting parachains. The scope of this UI includes connection to the Rococo Testnets of Astar & OAK and chain native token transfers. Libraries to use: Polkadot.js & useink. | +| 1a. | React XCM tooling | We will provide reusable React hooks, generic components, state management and types to facilitate the creation and top-up of Proxy Accounts, and execution of XCM (v3) messages. | +| 1b. | Home page | This page will handle the wallet connection and will show the app dashboard. | +| 1c. | Create a Recurring Payment Page | On this page, the user will be able to create recurring transfers using the previously defined XCM flow. The most tricky part of the process will be transparent for the user. | + +### Milestone 2 — Smart Contract and Kusama Connection + +- **Estimated Duration:** 1 month +- **FTE:** 3 +- **Costs:** $ 21,000 + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | MIT | +| **0b.** | Documentation | We will iterate the existing documentation to include the new functionalities. | +| **0c.** | Testing | To guarantee robustness, the main functionality will be covered by unit tests. | +| **0d.** | Article | We will publish a Medium Article about our development experience with XCM. | +| **1.** | UI | We will add the connection to the Kusama chains of Astar and OAK. | +| 1a. | My Payments Page | A page to show all the incoming and outgoing payments of the connected user. | +| **2.** | Smart Contract | An ink! smart contract that stores all the payment flows and monitors the security of the assets. All the token transfers will occur in Shiden. This enables transfers of non-native tokens. | +| 2a. | Transaction - Configure new recurring transfer | We will provide a message to configure a new recurring transfer between Shiden accounts. | +| 2b. | Transaction - Modify the configuration of a recurring transfer | We will provide a message to modify an existing recurring transfer between Shiden accounts. | +| 2c. | Query - Get user recurring transfers | We will provide a message to get all the incoming and outgoing recurring transfers of the connected user. | +| 2d. | Transaction - Execute a transfer | We will provide a message to execute a transfer related to an existing recurring configuration. It will be triggered by the OAK scheduler, and the contract should validate the time according to the existing configuration. | + +## Future Plans + +- Automate cross-chain token transfers. +- Include conditionals to the transfers. +- Scale this automation platform according to the ecosystem needs. +- Integrate this code to Roloi to schedule payment flows. + +## Additional Information :heavy_plus_sign: + +We heard about the Grants Program through Twitter, and through personal recommendations from Parity developers we decided to apply. + +Links: +- https://roloi.money +- https://neopower.digital + From 4a43359cb871a348fefc78ad1853c4464e86cff5 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 1 Sep 2023 18:53:45 +0200 Subject: [PATCH 584/665] Update index.md Add Roloi - XCM Payment Automation --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 1b1301fab27..5e93372e4b8 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,6 +63,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [David Semakula](https://github.com/davidsemakula) | [ink! analyzer (phase 2)](ink-analyzer-phase-2.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☐ | ☐ | | [Myriad Systems LTD.](https://myriad.social/) | [Myriad Social](myriad_social.md) | [GitHub](https://github.com/myriadsocial/myriad-node) | ☐ | ☐ | ☐ | | [Liisa](www.liisa.io) | [Polkadot NFT Portfolio Tracker](LiisaPortfolioTracker.md) | [GitHub](https://github.com/LiisaNFT) | ☐ | ☐ | ☐ | +| [NeoPower Digital](https://neopower.digital/) | [Roloi - XCM Payment Automation](./roloi-xcm-payment-automation.md) | [GitHub](https://github.com/NeoPower-Digital) | ☐ | ☐ | ☐ | [🔝](#2023) From 1bfa40e517adddd489d2be0322f44e10f828793a Mon Sep 17 00:00:00 2001 From: MeerKatDev Date: Fri, 1 Sep 2023 19:13:16 +0200 Subject: [PATCH 585/665] Application for MoveVM Substrate Pallet, part 2 (#1902) * changing starting date for substrate move pallet part 1 * added part 2 of movevm substrate grant * added starting date * Add MoveVM Substrate Pallet part 2 proposal * changed starting date * fixed table's newline * updates to the application * Update Substrate_Move_System_Pallet_2.md --- .../Substrate_Move_System_Pallet_2.md | 184 ++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 applications/Substrate_Move_System_Pallet_2.md diff --git a/applications/Substrate_Move_System_Pallet_2.md b/applications/Substrate_Move_System_Pallet_2.md new file mode 100644 index 00000000000..c245490415b --- /dev/null +++ b/applications/Substrate_Move_System_Pallet_2.md @@ -0,0 +1,184 @@ +# Substrate Move System Pallet (part 2) + +- **Team Name:** Eiger +- **Payment Address:** Fiat 14.04.2023, 16:50 UTC+3 +- **Level:** 3 + +## Project Overview ****📄**** + +This application is a response to **[Move Smart Contract Pallet RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/move_smart_contract_pallet.md)** and a follow-up to our [previous work](https://github.com/w3f/Grants-Program/pull/1769) on the RFP. + +### Overview + +> 📖 Terminology: +**Substrate Move System Pallet** - A Substrate system pallet that can be used as a building block for substrate-based chains, it exposes interfaces to interact with the Move virtual machine. +**Substrate Move** - A Move language fork that is Substrate compatible. + +- The goal is to provide a Substrate system pallet that allows to deploy and interact with Smart Contracts written in the Move language, by providing a Move Virtual Machine (MoveVM) as a pallet. +- The project directly improves the growth potential of the Substrate based ecosystem by providing support for one of the most modern smart contract programming languages and VM types out there - Move. +- We are interested in creating this project because we are firm believers in the modular vision of web3, and only by collaborative efforts on improving and unifying the technology between different chains and the languages, will we get better products as an outcome. + +**Goal** - Level up the growth possibilities of the Substrate ecosystem by providing a way to develop and execute Move smart contracts on Substrate. + +This is the second phase of a 3-phase development plan: + +1. In-Depth Exploration and Assessment of MoveVM and Substrate Integration +2. **MoveVM compatibility work and Subtrate Pallet development** +3. Finalising the Substrate-Compatible MoveVM + +### Project Details + +**Prior work** + +We are basing the core architecture and many of the design decisions on the [Pontem networks developed system pallet for Move VM](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm). They had maintained [their own fork of the Diem Move language](https://github.com/pontem-network/sp-move-vm), which was used as the base execution layer for their version. Both of these repositories have not been maintained for a very long time already. + +♻️ We aren't seeking to maintain any of the existing codebase; rather, we aim for a full revival through a new greenfield project. Our rationale for this stems from the substantial advancements made in the Rust, Substrate, and Move ecosystems since Pontem’s latest commits from over a year ago. We believe that handling potential code rot due to the passage of time might be more labor-intensive than starting afresh and drawing upon existing projects for more current guidelines. + +**Documentation of core components, architecture** + +1. **Substrate Move:** + + The first part of the project will be a MoveVM fork, as some major changes will need to be made to the codebase for it to be substrate compatible. For example: + + - `no_std` compatibility: Making it lightweight and suitable for use in Substrate runtimes. + - `wasm32` target compatibility: Adapting all the VM’s different components to work efficiently and securely on the wasm32 target architecture. + + We created the fork of Move VM in a manner that allow us and the community to easily follow and track changes from the upstream, thus making the maintenance and change tracking to be much simpler. + +2. **Move VM system pallet:** + + The second part of the project will be a Substrate virtual machine pallet in Substrate. This is a modular component that is needed to integrate a specific new VM into a Substrate runtime. It will serve as a bridge between the runtime and the Move VM, managing resources and translating data or actions between the two environments. + + +**API specifications** + +As a minimum, we plan on providing all of the RPC calls that the Pontem crate did. As the team progresses with the implementation, we might add or remove RPC calls as we best see fit. + +Move language has a concept of “gas” for executing contracts, whereas Polkadot uses “Weights”. Each Move transaction invocation requires providing a gas limit for execution, and it’s necessary to be able to transform the values between weight and gas: + +- `mvm_gasToWeight` +- `mvm_weightToGas` + +Estimating gas for different operations: + +- `mvm_estimateGasPublish` +- `mvm_estimateGasExecute` + +Working with the primitives of the Move language: + +- `mvm_getResource` +- `mvm_getModuleABI` +- `mvm_getModule` + +**Tech stack** + +We plan on using Rust for developing the system pallets and using existing Move language smart contracts for end-to-end testing of the whole workflow. + +**Notes** + +Because the Move language requires a fork to work with Substrate chains, and modifications to the address size, there might be incompatibilities with deploying existing Move Smart Contracts from other chains that make use of the address properties size, as well as the compiled ABI and bytecode for those contracts might be invalid. To deploy on our MoveVM system pallet, the forked toolchain must be used to re-compile all smart contracts. The address size of Move language is configurable via a feature switch with 32-bits being one of the options. + +### Ecosystem Fit + +Move is a smart contract programming language that emphasizes access control and scarcity, offering some unique advantages over other popular VMs in blockchain ecosystems. + +The importance of bringing the MoveVM to Polkadot was recognized over two years ago when [Pontem Network](https://pontem.network/) started working on a [Move virtual machine pallet](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm) to execute Move smart contracts on Substrate-based chains. Although they discontinued the project and haven't updated the codebase for over a year, the W3F still keeps this RFP, which serves as evidence that porting the MoveVM is crucial for the future of the Polkadot network. + +We concur with this perspective and have actually been actively researching the MoveVM - exactly with a similar idea of helping port it over to other chains. + +## Team **👥** + +### Team members + +- **Karlo Mardešić** ([GitHub](https://github.com/Rqnsom), [LinkedIn](https://www.linkedin.com/in/karlo-mardesic)) is a Software Engineer at Eiger and has experience with telecommunications and low-level drivers in C/C++. These days his expertise has shifted to blockchain technology and P2P protocols, where he primarily uses Rust to tackle exciting problems. +- **Piotr Olszewski** ([GitHub](https://github.com/asmie), [LinkedIn](https://www.linkedin.com/in/piotr-olszewski-8a239939)) is a Software Engineer at Eiger, and has over 13 years of professional experience, with a strong academic background in distributed computing. He has a large bag of experiences, ranging from military appliances, cryptographic projects, telecommunication software to embedded platforms. During his career, Piotr took different roles, from developer to team and tech leader. His main tools are C/C++ and Rust. + +### Contact + +- **Contact Name:** Daren Tuzi +- **Contact Email:** [daren@eiger.co](mailto:daren@eiger.co) (Founder & CEO of Eiger) +- **Website:** [Eiger.co](https://www.eiger.co/) + +### Legal Structure + +- **Registered Address:** Linnankatu 3 A 24, 20100 Turku, Finland +- **Registered Legal Entity:** Eiger Oy**** + +### Team's experience + +Web3 promises to upgrade the very foundations of our society – from money, finance, and governance to media, gaming, and science. To deliver on that promise, decentralised technologies are to be integrated into the everyday experiences of billions of people. For engineering, this is a mountain of a challenge. + +Eiger was founded to develop infrastructure for web3 mass adoption. We help technology companies improve and integrate the core technologies of web3 to meet the climbing demands for scaling and performance. + +We currently employ 25+ senior web3 engineers across the globe and work with some of the most ambitious organisations in the industry, including Forte, Aleo, and XRP Labs, to name a few. + +Eiger is part of the Equiilibrium group. We have been working under the Equilibrium brand for the past 4 years and only last year created the Eiger brand to focus on implementation engineering. Eiger/EQ was one of the main contributors in all of these endeavours. + +### Team Code Repos + +As mentioned in the Teams section, Eiger already has extensive experience developing large infrastructural projects. Some chosen examples: + +- The SnarkOS for Aleo, the privacy-focused smart contract L1 platform going into production this summer. https://github.com/AleoHQ/snarkOS +- OrbitDB is a distributed, p2p, serverless database. https://github.com/orbitdb/orbit-db +- The rust implementation of IPFS, now archived. https://github.com/rs-ipfs/rust-ipfs +- The main implementation of Interledger in Rust, which we developed and maintained. https://github.com/interledger/interledger-rs +- Ziggurat - A Network protocol testing framework for ZCash, XRP, and Algorand. Notably, critical network vulnerabilities were found and reported to the core teams. https://github.com/runziggurat + +## Development Status **📖** + +- This application is a direct response to [this RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/move_smart_contract_pallet.md) +- [Move language Github](https://github.com/move-language/move/tree/main/language) +- [Pontem MoveVM fork](https://github.com/pontem-network/sp-move-vm) +- [Pontem MoveVM system pallet](https://github.com/pontem-network/pontem/tree/master/pallets/sp-mvm) +- [MoveVM pallet GitHub](https://github.com/eigerco/pallet-move/) contains our work so far + +## Development Roadmap **🔩** + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 2 FTE +- **Total Costs:** 96 000 USD +- **Starting Date:** 04/09/23 + +### Milestone 1 - MoveVM compatibility work and Subtrate Pallet development + +- **Estimated Duration:** 2 months +- **FTE:** 2 +- **Costs:** 96 000 USD + +Goal: Create a customised Move VM solution for the Substrate ecosystem, using the knowledge gained during the first milestone. The deliverable will be a pallet capable of receiving, storing and executing Move smart contracts. + +| Number | Deliverable | Specification | +| --- | --- | --- | +| 0a. | License | Apache 2.0 and MIT | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can (for example) spin up one of our Substrate nodes and send test transactions, which will show how the new functionality works. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust crate: Substrate Move | Forking the Move VM, as deemed necessary from the research done during the first milestone. The alterations will include everything to create the virtual machine Substrate-compatible. We will also provide extensive documentation of how the whole process is designed and how it is to be maintained. | +| 2. | System Pallet: Substrate Move SP adds Move functionality | Integrating the Move VM runtime within the custom pallet, ensuring compatibility with the Substrate blockchain and Move smart contract execution. | +| 3. | System Pallet: Substrate Move SP APIs to interact with the Move VM | Developing an API that enables developers to interact with the Move VM on Substrate-based chains, allowing them to deploy, execute, and manage Move smart contracts. | + +## Future Plans + +This is the second phase of a 3-phase development program: + +1. In-Depth Exploration and Assessment of MoveVM and Substrate Integration +2. **MoveVM compatibility work and Subtrate Pallet development** +3. Finalising the Substrate-Compatible MoveVM + +The **next** step will be to submit a grant proposal to finalize this work - finishing up the pallet and making sure it works properly and can be utilized by other developers . + +We hope that upon the completion of all phases of creating the Substrate Move System Pallet, it will open doors for further collaboration and community input on the project. We strive to have the codebase well documented so that others might join in and contribute. + +While there are no long-term plans set in stone for the usage of this pallet, we have had discussions about possibly creating a parachain, possibly a common good parachain, that utilizes this MoveVM implementation and would run MoveVM contracts. As we near the completion of this initial development, we will be discussing these future plans more in-depth.. + +## Additional Information **➕** + +**How did you hear about the Grants Program?** + +We learned about it when looking at open RFPs by the web3 foundation on their website. + +We wanted to get back up to date on what is happening in the Polkadot ecosystem, and working on grants, specifically RFPs, has been a great way to do so. + +Looking to apply to other RFPs currently open as well. Stay tuned! \ No newline at end of file From 8f25f2a0ec9752b3da1901c0942a376e5512cbef Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 1 Sep 2023 19:15:07 +0200 Subject: [PATCH 586/665] Update index.md Add MoveVM Substrate Pallet, part 2 --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 5e93372e4b8..3c654623649 100644 --- a/applications/index.md +++ b/applications/index.md @@ -64,6 +64,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Myriad Systems LTD.](https://myriad.social/) | [Myriad Social](myriad_social.md) | [GitHub](https://github.com/myriadsocial/myriad-node) | ☐ | ☐ | ☐ | | [Liisa](www.liisa.io) | [Polkadot NFT Portfolio Tracker](LiisaPortfolioTracker.md) | [GitHub](https://github.com/LiisaNFT) | ☐ | ☐ | ☐ | | [NeoPower Digital](https://neopower.digital/) | [Roloi - XCM Payment Automation](./roloi-xcm-payment-automation.md) | [GitHub](https://github.com/NeoPower-Digital) | ☐ | ☐ | ☐ | +| [Eiger](https://www.eiger.co/) | [MoveVM Substrate Pallet, part 2](./Substrate_Move_System_Pallet_2.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | [🔝](#2023) From b22f78c9ff0863a960893b261decff6d5e195c2d Mon Sep 17 00:00:00 2001 From: Radhe Shyam Zeeve <98081359+radhe-zeeve@users.noreply.github.com> Date: Sat, 2 Sep 2023 00:04:58 +0530 Subject: [PATCH 587/665] Larch requirements update (#1945) --- .../Zeeve_Parachain_deployment_zoombienet_testing_automation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md index fb58dc20bec..a5c17257627 100644 --- a/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md +++ b/applications/Zeeve_Parachain_deployment_zoombienet_testing_automation.md @@ -173,7 +173,7 @@ Before applying for the Web3 Foundation Grant, the Zeeve team has built a DevOps | 1. | Initial Automation | We will build the core GUI driven automation to create and deploy the substrate based Zombie-net configurations including relaychain and parachain configurations. | | 2. | Configuration | Parachain configuration is critical and complicated, we will provide the GUI based pick and choose for genesis parameters and chain configs to start with parachain setup for the desired Zombie-net | | 3. | Node type support | Implement setup of all node types including Full node, Validator node and Collator node for the respective relay chain and parachain within the configured Zombie-net. | -| 4. | Cloud agnostic setup | The larch setup will be cloud agnostic and it can be installed on the choice of cloud, instructions and documentation will be provided for the same. | +| 4. | Cloud agnostic setup | The larch setup will be cloud agnostic and it can be installed on the choice of cloud (Linux x86_64 based), instructions and documentation will be provided for the same. | | 5. | Network Management | Implement the larch tool with a user-friendly interface, features for execution info, network deletion, template cloning, and management, along with robust error handling, for seamless setup of networks and templates. | From 6a021f937f82de4e91dd518fa992b49546900b9f Mon Sep 17 00:00:00 2001 From: flipchan Date: Sat, 2 Sep 2023 09:15:45 +0200 Subject: [PATCH 588/665] Xcmsend Application (#1937) * one commit xcmsend application * from DOT > USDT on polkadot * More wallets supported on M1, Why XCMSend added, vision explained more --- applications/xcmsend.md | 297 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 297 insertions(+) create mode 100644 applications/xcmsend.md diff --git a/applications/xcmsend.md b/applications/xcmsend.md new file mode 100644 index 00000000000..8ace1964887 --- /dev/null +++ b/applications/xcmsend.md @@ -0,0 +1,297 @@ +# XCMSend + +**Team Name:** +*Rust Syndicate x Decentration* + +**Payment Address:** (USDT on polkadot) +15iN8aQnPuX4vjcovenu15EtnYfcwbtiXjeKGRN3KkkzNNtt + +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview :page_facing_up: + +### Overview + +- If the name of your project is not descriptive, a tag line (one sentence summary): + + XCMSend: make cross-chain transfers with ease with real-time status updates, all in one place. + +- A brief description of your project: + + XCMSend aims to be the seamless way to interface with chains via XCM, designed to provide an unbiased platform, and user-friendly cross-chain message transfers within the Polkadot ecosystem. Think + of a no-code layer to compose transactions. + +- An indication of how your project relates to / integrates into Substrate / Polkadot / Kusama: + + We are building a building a utility that interfaces with relay chain and parachains that have established HRMP channels, enabling cross chain transfers. + +- An indication of why your team is interested in creating this project. + + We have experience working with xcm connecting parachains via hrmp, building Defi and Governance applications. We see the potency of XCM and are interested in building tools that improve the + experience for standard non-technical users as well as developers who want to build the next generation of XCM Dapps. + + +### Ecosystem Fit + +Help us locate your project in the Polkadot/Substrate/Kusama landscape and what problems it tries to solve by answering each of these questions: + +- Where and how does your project fit into the ecosystem? + + XcmSend is in the category of a utility/tool, which will make interacting with relay/parachains in relation to cross-chain, simple and painless. + +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + + Our target audience are users of polkadot/kusama and parachains which are enabled to make xcm tranfers. Within that userbase are developers such as ourselves who have certain pains when testing + our integrations. Those pains include composition and execution status updates, which is our initial focus, and which will benefit all, including the standard non-technical yet competent users. + +- What need(s) does your project meet? + + As of the present composition, sending asset transfers across distinct parachain connected networks remains a task that lacks inherent user-friendliness. A relatively modest array of decentralized + exchanges, including entities such as HydraDX and Polkaswap, are available to address this challenge. Notably, the proliferation of XCM adoption within the DotSama ecosystem is exhibiting a + notable and continuous expansion. We want a bring a a user-friendly way for anyone to send assets from one parachain to another. Opening up XCM transfers for everyone. + +Xcm Adoption in the Dotsama ecosystem is growing and growing: + +![](https://lh6.googleusercontent.com/Qj9NNiG_YQk__eaLh2Q_BOpuX7xe0uU19ipJ0fumFAMLAW2cjfI4PDNkqea0V30Dzsm_BdQJ0d536JyvbCuGn049489sFSu4SYjlcDaydQN-QRId9vwlYT4DRUIeKzAV3RLWOqcUoYd74m9S4a84AM0) + +XCM Traffic chart from 2021/04/12 to 2023/05/07. + +We want to enable everyone to be able to spin up their own ;lightweight instance of XCMSend and easily be able to send assets from one chain to another. + +Data Source: +Polkaholics: [https://github.com/colorfulnotion/substrate-etl](https://github.com/colorfulnotion/substrate-etl) + +Replicate data: + +```shell +$ git clone https://github.com/colorfulnotion/substrate-etl && cd substrate-etl + +$ ./generateNetworksSummary + +$ cat SUMMARY.md +``` + +_Note: If your getting curl connection timeout errors, we have added a pr to [fix this](https://github.com/colorfulnotion/substrate-etl/pull/10)._ + +**Why XCMSend?** + +In a nutshell, XcmSend aims to simplify the process of xcm transaction curation and execution, as a non-partisan, open source project? + +- **Non-biased XCM Transfers** + +Auto index of open XCM channels and lease slots - Allowing XCMSend to offer a broader section of destination and receiver chain options, unlike previous projects where source and destination chains are limited and cherry-picked by the responsible Team. With XcmSend we are letting the networks decide what the available transaction routes are. Promoting and utilizing the decentralized ecosystem of Dotsama. + +- **A Gateway for everyone into XCM** +XCMSend is not only sending an asset cross-chain. It removes complexity from crafting XCM transfers and opens a world of possibilities for high-level/non-technical users, as well developers by being an important building stone for anyone that wants to utilize XCM in a hassle-free and high-level way. + +- **Empower XCM Adoption** +We want to open the doors to XCM for dapp developers, web2 projects and builders in a high-level way. + + +- **Increase XCM transaction volume** + +By enabling more users to utilize easy to send XCM asset transfers, our ambition is to take a good share of the growing XCM traffic. + +- **Not a DEX** + +XCMSend does not manage liquidity pools, no limit orders, we only send assets from chain A to B with XCM. + +**Non-custodial and user friendly** + +- **The need for simplification and real-time updates** + +XCM has a growing share of all transactions in the ecosystem. Composing calls is hard and time-consuming. Finding out the status of the execution can become a jigsaw puzzle. Here is where we are going to focus on improving the experience: + + - **Before sending:** By abstracting away the complex and painful process that goes into curating an xcm call. A user does not manually need to draft the extrinsics needed for a XCM Transfer, with XCMSend we want to bring a seamless DeFi experience for anyone that wants to send assets with XCM. + + - **At execution**: by providing real-time dynamic status updates when executing the call, all in one place. + +In summary: + +- Make xcm calls in just a few clicks. +- Get status updates across journey all in one plce. +- Easily test XCM asset transfers between chains +- More liquidity to the ecosystem/empower DeFi users +- Community owned and OpenSource with MIT License + + +#### What is XCMSend? + +XcmSend is a public Xcm asset transfer app that is open source and serverless, which interfaces with blockchains, making it simple for users to send assets between chains. + +"Does what it says on the tin". Powered by the XCM protocol, our platform simplifies the process of cross-chain transfers. + +Anyone can create their own instance, and XCMSend.com will also host an official instance. + +#### Who will use XCMSend? + +- **(non-technical)Defi users and the average Joe** - Anyone can send one asset from one chain to another using XCMSend in a hassle-free way, allowing access to wide varierty of different assets on different chains. + +- **Web2 businesses and developers** - that want to interact with the dotsama ecosystem throw XcmSend's simplified xcm json api. + +- **Parachain teams** - With our ROC instance parachains that are connected to rococo/ROC will be able to test their xcm recieving implementations, verifying that tokens can be sent and receieved using an open channel. + +- **Third party teams/developers** - XcmSend will be under the MIT license, allowing anyone to clone, customize, deploy and modify XcmSend based on their needs. + +- **Dapp Builders** - XCMSend empowers dapp developers to interact with a wide varierty of different assets on different connected chains. By providing an easy-to-use interface for XCM transfers, we are contributing to interoperability by allowing dApp developers to seamlessly exchange assets and data between different parachains networks. This can expand the reach and functionality of their dApps. + + + +### **Project Details** + +We expect the teams to already have a solid idea about your project's expected final state. Therefore, we ask the teams to submit (where relevant): + +- Mockups/designs of any UI components + +**Mock interface:** + +1: (V0)Send asset +![](https://lh3.googleusercontent.com/P-yFl3Mh6cyg5uXQJD8Q8J4f9K16JamfIV7Cwa8rY6H2jVAPIUoz8xl1uyiyf9BysMXK5d4_YoV53tpTjPHxzlVsJqGatk13KEoPijQWc1ziW15MbM-oSkxOVx791aAliAKjaBFTa_pQXqxBKryu2Qg) + +2: (V0) Transaction Broadcasted and Completed +![](https://lh6.googleusercontent.com/OcNgY37AQHfw1kpGPZiNoAnwM93wlgbURtPJc8Xa_6foezh_h5lA3u9DmmuQ49XJk2AksSgmnd40u6q39uhQTiktaIrF66Ws6AfbS1biJxuBZV1A8YgN5otnFGlrtDx6N0x15R7GRXwXs_f-CBf62OM) + +3: (V1) Transaction Broadcasted and Completed +![](https://lh3.googleusercontent.com/d7Ce03UkdiNqylBQdfjnz1c-l5WXClpDeAfOtSeh9_9NBVUUWF95s2AN496yYOpAD7A9ui0iyc2tR31z4Roelpz5FvS-UzXQ_4LtlKmu7GCdR7U673d9EoRfyUhSxAiH9ZKwuik_jPUhbCV4gEC6f0g) + +As XCM transactions are more complex than a simple balance transfer on a single chain, the average time of a transaction is higher and more “moving parts” means there is an increased chance for errors during the transaction life cycle. This is why it is pertinent that the user is informed of the transaction status. We will enable real-time dynamic updates. As shown in the above screenshots. V0 for Milestone 1 and V1 for Milestone 2. + +- Data models / API specifications of the core functionality: Mockup designs of the interface can be found above. + +- An overview of the technology stack to be used +UI: React, Javascript, Typescript, Zustand state management, React Flow, Polkadot-js extension +API: Rust, Substrate utilities. + +- Documentation of core components, protocols, architecture: We will provide user guides and documentation publicily linked from the main git repository. + +- PoC/MVP or other relevant prior work or research on the topic +- What your project is _not_ or will _not_ provide or implement + - Like previously stated, XcmSend is not a DEX so we will not provide limit orders, trading one token for another with a market maker and/or orderbook functionality. + +we will provide generic functionality where we can that covers multiple chains, however if there is a unique integration required for a parachain, this will be left out of these milestones. Where will be as explicit as possible about which chains we will support, however that support could be generalised to other chains. We will make simple for other projects to clone our project add their chains, then can their host that instance themselves and/or make a PR to XcmSend official repo. + + +### **Legal Structure** + +- Registered Address: Vakhtang Gorgasali Street Nr 14, Office Door number 30, Tbilisi, Georgia +- Registered Legal Entity: Rust Syndicate LLC + +## **Team 👥** + +### **Team's experience** + +**Filip "flipchan" Kalebo** - Rust Syndicate - Developer, DevSecOps, Previously worked on early stage Picasso chain, Edgeware Solo chain and recently “Uptest” that is funded by the Polkadot Treasury. + +**Ramsey Ajram** - Decentration - Substrate Developer, Product, Frontend, took a parachain into production on Kusama, W3F funded for Supersig (pallet and UI) [https://subverse.decentration.org](https://subverse.decentration.org). Polkadot Blockchain Academy (PBA) Alumni. + +**Ace Salazar** - Rust Syndicate - Project coordination, Previous experience working on projects for the Rust programming language’s ecosystem. + +**JelliedOwl(Paul)** - Substrate based chain rpc provider, trusted community member, Moderator of the Polkadot Multisig. + + +### **Team Code Repos** + +- [https://github.com/uptest-sc/](https://github.com/uptest-sc/) +- [https://github.com/decentration](https://github.com/decentration) +- [https://github.com/kabocha-network/](https://github.com/kabocha-network/) +- [https://github.com/flipchan](https://github.com/flipchan) + +#### Proven Track Record: + +The team has delivered previous projects in the substrate ecosystem: +- Flipchan migrated Edgeware from an old version of substrate to the new version, which required complex refactoring and storage migrations. +- Based on the above experience, Flipchan was then grant funded by the polkadot treasury to build Uptest, a library to test runtime upgrades. +- Ramsey launched an experimental parachain on behalf of Edgeware called, Kabocha. +- Decentration (lead by Ramsey) was grant funded by W3F to create tools to build decentralised orgs (pallet and UI) called Supersig. + +## **Contact:** + +Contact name: + +Filip Kalebo - Rust Syndicate + +Contact email: + +[blockchain@firosolutions.com](mailto:blockchain@firosolutions.com) + +Contact name: + +Ramsey - Decentration + +Contact email: + +[ramsey@decentration.org](mailto:ramsey@decentration.org) + +https://decentration.org + + +## **Development Roadmap 🔩** + +### Overview + +- **Total Estimated Duration:** 8 weeks + +- **Full-Time Equivalent (FTE):** 2 FTE + +- **Total Costs:** 30 000 USD to be converted into USDT(on Polkadot) + +**Milestone 1: XCM SEND MVP** + +FTE: 2 + +Duration: 4 weeks + +Costs: 15000 USD + + + + +| Number | Deliverable |Specification | +|--------------|-----------|------------| +| 0a. | License | MIT | +| 0b | Documentation | We will provide tutorials and usage examples of all features and milestones delivered. | +| 0c | Testing and Testing Guide | In our published documentation and articles we will cover the steps needed to test XCMSend | +| 0d | Docker | We will publish a docker image that users can use to test XCMSend locally | +| 0e | Article | We will publish an article that walks the end user hand in hand on how to use XCMSend | +| 1 | XCMSend UI (MVP) | Build the first version of the XCMSend UI which begins with sending crosschain assets transfers. | +| 2 | Browser wallet integration | Allowing support for some of the most used wallets in the dotsama ecosystem: Subwallet, Talisman, Polkadot.js and metamask by integrating [Subconnect](https://github.com/Koniverse/SubConnect) | +| 3 | Rococo XCM Transfers | We will enable teleporting of assets across chains within the Rococo network. Such as ROC from Rococo to AssetHub. | + + + +Milestone 2: + +FTE: 2 + +Duration: 4 weeks + +Costs: 15000 + + +| Number | Deliverable |Specification | +|--------------|-----------|------------| +| 0a. | License | MIT | +| 0b | Documentation | We will provide tutorials and usage examples of all features and milestones delivered. | +| 0c | Testing and Testing Guide | In our published documentation and articles we will cover the steps needed to test XCMSend | +| 0d | Docker | We will publish a docker image that users can use to test XCMSend locally | +| 0e | Article | We will publish an article that walks the end user hand in hand on how to use XCMSend | +| 1 | Support 3 chains or more | Support at least 3 different parachains as source chains to send assets from | +| 2 | Json-rpc api | We want to enable users to send XCM Transfers in a high level way and we will provide a basic api that can be used by client libraries, to seamlessly broadcast XCM asset transfers. | +| 3 | Parachain discovery | XCMSend will track which parachains are currently connected and filter the selection based on that. The lease times of each parachain needs to be accounted for as well. | +| 4 | Auto index XCM channels | Filter the options for source and destination chain based on the open channels that are available | + + + + + +## Future Plans: + +- We aim to build and maintain XCMSend publicly, after the first version of XCMSend is live and we have gathered enough community feedback. We plan on deploying a version for Kusama. Allowing parachains connected to Kusama to send assets using XCM. (And thereafter, Polkadot.) +- For more experienced users we also want to add an “Advance” tab where the “power user” can customize the transaction after its needs. +- This advanced tab may sprout into building a low code app containing all substrate blockchains, pallets, and relevant APIs that can be dragged and dropped and connected into workflows to build the next generation of DApps (enabled by XCM and bridges). +- Remark NFT integration +- We also want to support Pallet-supersig, allowing DAO’s and groups to send XCM Transfers to and from pallet-supersig origins. + +## **Additional Information ➕** + +How did you hear about the Grants Program? The team is familiar with the web3 foundation from previous projects. From baf2b02249234dfd04c6f9d20d26e6b1ba33fe68 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Sat, 2 Sep 2023 09:18:22 +0200 Subject: [PATCH 589/665] Update index.md XCMSend --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 3c654623649..3e967c0b38f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -65,6 +65,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Liisa](www.liisa.io) | [Polkadot NFT Portfolio Tracker](LiisaPortfolioTracker.md) | [GitHub](https://github.com/LiisaNFT) | ☐ | ☐ | ☐ | | [NeoPower Digital](https://neopower.digital/) | [Roloi - XCM Payment Automation](./roloi-xcm-payment-automation.md) | [GitHub](https://github.com/NeoPower-Digital) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [MoveVM Substrate Pallet, part 2](./Substrate_Move_System_Pallet_2.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | +| [Rust Syndicate x Decentration](https://www.decentration.org/) | [XCMSend](./xcmsend.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | [🔝](#2023) From bbca927c58afcce63bbef65657432b73bade0596 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 4 Sep 2023 20:43:37 +0200 Subject: [PATCH 590/665] Update a-and-v-topology.md Update links --- docs/RFPs/Open/a-and-v-topology.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/RFPs/Open/a-and-v-topology.md b/docs/RFPs/Open/a-and-v-topology.md index fa83b7599ad..3fb58e2d99c 100644 --- a/docs/RFPs/Open/a-and-v-topology.md +++ b/docs/RFPs/Open/a-and-v-topology.md @@ -7,11 +7,11 @@ A part of the promise of Polkadot is to bring scalability to the blockchains. The way it achieves it is via delegating application-specific logic from layer 0 (the relay chain) to layer 1 chains (parachains). In order to achieve this efficiently yet securely, each parachain has its own block production mechanism (achieving efficienct block production), but the finalisation of candidate parachain blocks still happens with the involvement of the relay chain validators. -The full mechanism is described in [the host specification](https://github.com/w3f/polkadot-spec/blob/main/host-spec/c07-anv.tm). In short, it is split in two parts: first, a publicly known subset of validators attests that the parachain block data is available to them (i.e. they must have it in their local storage); second, once 2/3+ of the first group have published their availability votes, a "secret" (VRF-based assignment) subset of validators checks the validitiy of the candidate, by checking its state transition against that parachain runtime, which is available on-(the relay)chain. +The full mechanism is described in [the host specification](https://spec.polkadot.network/chapter-anv). In short, it is split into two parts: first, a publicly known subset of validators attests that the parachain block data is available to them (i.e., they must have it in their local storage); second, once 2/3+ of the first group have published their availability votes, a "secret" (VRF-based assignment) subset of validators checks the validitiy of the candidate, by checking its state transition against that parachain runtime, which is available on-(the relay)chain. -Currently, the gossip network among the relay chain validators does not make use of the public assignment of a the first subgroup of validators to a particular parachain. Instead, the candidate block is passed around the network until it reaches 2/3+ of approvals, causing an additional delay in the process of finalisation of the candidate. +Currently, the gossip network among the relay chain validators does not make use of the public assignment of a the first subgroup of validators to a particular parachain. Instead, the candidate block is passed around the network until it reaches 2/3+ of approvals, causing an additional delay in the process of finalization of the candidate. -This proposal aims to solve this issue by creating a selective networking topology among the publicly known subset of validators assigned to a particular parachain ID. For full details of the topology and its considerations, please consult the [Availability and Validity research document](https://research.web3.foundation/en/latest/polkadot/networking/3-avail-valid.html#design-considerations). +This proposal aims to solve this issue by creating a selective networking topology among the publicly known subset of validators assigned to a particular parachain ID. For full details of the topology and its considerations, please consult the [Availability and Validity research document](https://github.com/w3f/research/commit/f1a698b34bda8a93433a0f8d9ab1b303c340cb31#diff-13146c2f4b910ccf22483fd1292efdaa079f5b07a966f76716e5bda35a6b3715). ## Deliverables :nut_and_bolt: @@ -37,7 +37,7 @@ As detailed in [the Topology section](https://research.web3.foundation/en/latest This milestone is tasked with figuring out the topology for each validator. -Note: The implementer might find that splitting Milestones 2 & 3 is counterproductive and a more efficient approach is to actually combine these. +Note: The implementer might find that splitting Milestones 2 & 3 is counterproductive, and a more efficient approach is to actually combine these. Tasks: - perform the calculation of correct network topology for each validator @@ -49,7 +49,7 @@ Tasks: ### Milestone 3 - Networking and benchmarking -This should be a "simple" milestone, in that it replaces the previous mechanism for candidate block distribution (broadcast medium B) with direct links(D), as proposed in the [Overview](https://research.web3.foundation/en/latest/polkadot/networking/3-avail-valid.html#overview). +This should be a "simple" milestone in that it replaces the previous mechanism for candidate block distribution (broadcast medium B) with direct links(D), as proposed in the [Overview](https://research.web3.foundation/en/latest/polkadot/networking/3-avail-valid.html#overview). * **Estimated Duration:** 8 weeks * **Costs:** 45,000 DAI From 5f30bfb536cae2efce84848ac3fff9d62393c665 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 4 Sep 2023 21:41:52 +0200 Subject: [PATCH 591/665] update anv rfp (#1949) --- docs/RFPs/{Open => Closed}/a-and-v-topology.md | 2 +- docs/rfps.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) rename docs/RFPs/{Open => Closed}/a-and-v-topology.md (98%) diff --git a/docs/RFPs/Open/a-and-v-topology.md b/docs/RFPs/Closed/a-and-v-topology.md similarity index 98% rename from docs/RFPs/Open/a-and-v-topology.md rename to docs/RFPs/Closed/a-and-v-topology.md index 3fb58e2d99c..88d7703b0d8 100644 --- a/docs/RFPs/Open/a-and-v-topology.md +++ b/docs/RFPs/Closed/a-and-v-topology.md @@ -1,6 +1,6 @@ # Availability and Validity - Network Topology -* **Status:** Open +* **Status:** Closed, since research is outdated * **Proposer:** @infinity0, @skalman, @mmagician ## Project Description :page_facing_up: diff --git a/docs/rfps.md b/docs/rfps.md index d735537adac..0ecc235cf3a 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -23,7 +23,6 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | -| [a-and-v-topology.md](RFPs/Open/a-and-v-topology.md) | 29.11.2021 | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 29.11.2021 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | @@ -69,6 +68,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | +| [a-and-v-topology.md](RFPs/Closed/a-and-v-topology.md) | 04.09.2023 | | [appi.md](RFPs/Closed/appi.md) | 20.07.2021 | | [candle-auction.md](RFPs/Closed/candle-auction.md) | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 25.04.2023 | From 34e5a78c094dfb02de997918bb0e7308dc9e548f Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Tue, 5 Sep 2023 18:01:09 +0200 Subject: [PATCH 592/665] Fix broken link in FAQ (#1952) Co-authored-by: Sam Ruberti --- docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index bd146744556..7e56fc13656 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -80,7 +80,7 @@ title: 🙋 FAQ ### Can I list the Web3 Foundation as a partner? - No. Once the grants team has accepted your first milestone, you may display our [grants badge](Support%20Docs/grant-badge-guidelines) in a project-specific context, such as the repository containing the grant project work. + No. Once the grants team has accepted your first milestone, you may display our [grants badge](Support%20Docs/grant-badge-guidelines.md) in a project-specific context, such as the repository containing the grant project work. ### Can you help me advertise my project? From af1a150f626f0d64eb25aa715279912a104dcc26 Mon Sep 17 00:00:00 2001 From: David Semakula Date: Wed, 6 Sep 2023 16:34:48 +0300 Subject: [PATCH 593/665] Amend ink! analyzer (phase 2) (#1951) * Amend ink! analyzer (phase 2) * minor updates for ink! analyzer (phase 2) amendment --- applications/ink-analyzer-phase-2.md | 62 +++++++++++++++++++++------- 1 file changed, 46 insertions(+), 16 deletions(-) diff --git a/applications/ink-analyzer-phase-2.md b/applications/ink-analyzer-phase-2.md index 29ee9781693..898c83f8471 100644 --- a/applications/ink-analyzer-phase-2.md +++ b/applications/ink-analyzer-phase-2.md @@ -203,9 +203,9 @@ You can find a full list of available resources in the [introductory blog post f ### Overview -- **Total Estimated Duration:** ~6.75 months +- **Total Estimated Duration:** ~7.75 months - **Full-Time Equivalent (FTE):** 1 -- **Total Costs:** 48,000 USD +- **Total Costs:** 54,400 USD ### Milestone 1 — Semantic analyzer: Quick fixes, ink_e2e macro support, project creation command and code/intent actions for inserting code stubs/snippets for relevant ink! entities @@ -255,13 +255,43 @@ You can find a full list of available resources in the [introductory blog post f | 1. | Rust crate update: Go to definition support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns the location where the item resolved by the path (if any) is defined (e.g. for `#[ink::contract(env=crate::MyEnvironment)]`, returns the location where `MyEnvironment` item is defined). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | | 2. | Rust crate update: Find references support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code and a cursor position as input and returns locations where the item resolved by the path (if any) is used (e.g. for `#[ink::contract(env=crate::MyEnvironment)]`, returns the locations where the `MyEnvironment` item is used). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | | 3. | Rust crate update: Rename/refactor support for path-based ink! attribute argument values (i.e. `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]`) | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code, a cursor position and the new name for the item as input and returns the text edits for renaming the item resolved by the path (if any) across the workspace (e.g. for a `MyEnvironment` defined used in an `#[ink::contract(env=crate::MyEnvironment)]` and an `#[ink_e2e::test(environment=crate::MyEnvironment)]`, this renames `MyEnvironment` across all these locations). While only `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` can be defined as paths at the moment, this utility will be defined generically for any path-based value used as an ink! attribute argument value. | -| 4. | Rust crate update: Diagnostics that verify that `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` are `impl Environment` as well as quick fixes to `impl Environment` for the target item where necessary | I will update the semantic analyzer crate to provide an interface that accepts ink! smart contract code as input and returns the diagnostics for `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` whose target item doesn't `impl Environment` as well as quick fixes in the form of code/intent actions that insert code stubs/snippets that `impl Environment` for the target item where necessary. | +| 4. | Rust crate update: Diagnostics that verify that `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` are `impl Environment` as well as quick fixes to `impl Environment` for the target item where necessary | I will update the semantic analyzer crate by updating the existing interface that accepts ink! smart contract code as input and returns diagnostic errors and warnings to additionally return diagnostics for `env` values for `#[ink::contract]` and `environment` values for `#[ink_e2e::test]` whose target item doesn't `impl Environment` as well as quick fixes in the form of code/intent actions that insert code stubs/snippets that `impl Environment` for the target item where necessary. | -### Milestone 4 — Language Server: Updates -- **Estimated duration:** ~6-7 weeks +### Milestone 4 — Semantic Analyzer: Diagnostics, quick fixes and code/intent actions for chain extension `ErrorCode` type is `impl FromStatusCode` , and is not referred to using `Self::ErrorCode` anywhere in the chain extension or it's defined methods + +- **Estimated duration:** ~3 weeks +- **FTE:** 1 +- **Costs:** 5,600 USD + +| Number | Deliverable | Specification | +|--------:|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | MIT or Apache 2.0 | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the library, instructions for installing and using the library and links to other documentation and resources related to the library. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust crate update: Diagnostics that verify that the chain extension `ErrorCode` type is `impl FromStatusCode` as well as quick fixes and code/intent actions to `impl FromStatusCode` for the target item where necessary | I will update the semantic analyzer crate by updating the existing interface that accepts ink! smart contract code as input and returns diagnostic errors and warnings to additionally return diagnostics for chain extension `ErrorCode` types whose target item doesn't `impl FromStatusCode` as well as quick fixes in the form of code/intent actions that insert code stubs/snippets that `impl FromStatusCode` for the target item where necessary. | +| 2. | Rust crate update: Diagnostics for references to the chain extension's `ErrorCode` type using `Self::ErrorCode` in the chain extension (i.e. the `#[ink::chain_extension]` annotated `trait`) or it's defined methods (i.e. `impl` blocks for the chain extension `trait` in a `#[ink::contract]` annotated `mod`) as well as quick fixes to replace `Self::ErrorCode` usages with the `ErrorCode` type directly | I will update the semantic analyzer crate by updating the existing interface that accepts ink! smart contract code as input and returns diagnostic errors and warnings to additionally return diagnostics for references to the chain extension's `ErrorCode` type using `Self::ErrorCode` in the chain extension (i.e. the `#[ink::chain_extension]` annotated `trait`) or it's defined methods (i.e. `impl` blocks for the chain extension `trait` in a `#[ink::contract]` annotated `mod`) as well as quick fixes in the form of code/intent actions that replace `Self::ErrorCode` usages with the `ErrorCode` type directly. | + +### Milestone 5 — Language Server: Updates #1 + +- **Estimated duration:** ~3-4 weeks - **FTE:** 1 -- **Costs:** 12,800 USD +- **Costs:** 6,800 USD + +| Number | Deliverable | Specification | +|--------:|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | MIT or Apache 2.0 | +| **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the crate, instructions for installing and using the crate and links to other documentation and resources related to the crate. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Rust binary crate update: ink! Language Server updates | I will update Rust binary crate that implements the Language Server Protocol to support features added to the semantic analyzer in milestones 1 and 2 above. | + +### Milestone 6 — Language Server: Updates #2 + +- **Estimated duration:** ~3-4 weeks +- **FTE:** 1 +- **Costs:** 6,800 USD | Number | Deliverable | Specification | |--------:|--------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| @@ -269,22 +299,22 @@ You can find a full list of available resources in the [introductory blog post f | **0b.** | Documentation | I will provide detailed source documentation including rustdoc documentation that will be published to [docs.rs](https://docs.rs/) and a README file (published on [Github](https://github.com/), [crates.io](https://crates.io/) and [docs.rs](https://docs.rs/)) providing general information about the crate, instructions for installing and using the crate and links to other documentation and resources related to the crate. | | **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | | **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 1. | Rust binary crate update: ink! Language Server updates | I will update Rust binary crate that implements the Language Server Protocol to support features added to the semantic analyzer in milestones 1, 2 and 3 above. | +| 1. | Rust binary crate update: ink! Language Server updates | I will update Rust binary crate that implements the Language Server Protocol to support features added to the semantic analyzer in milestones 3 and 4 above. | -### Milestone 5 — Visual Studio Code Extension: Updates +### Milestone 7 — Visual Studio Code Extension: Updates - **Estimated duration:** ~3-4 weeks - **FTE:** 1 - **Costs:** 6,800 USD -| Number | Deliverable | Specification | -|--------:|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| **0a.** | License | GPL-3.0 | -| **0b.** | Documentation | I will provide inline source documentation and a README file (published on [Github](https://github.com/) and the [VS Code marketplace](https://marketplace.visualstudio.com/vscode)) providing general information about the extension, instructions for installing and using the extension and links to other documentation and resources related to the extension. | -| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive integration tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | -| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | -| 0e. | Article | I will publish an **article** that introduces the new features of ink! analyzer, including updates to the VS Code extension, the language server and the semantic analyzer. | -| 1. | Visual Studio Code Extension: Updates | I will update the Visual Studio Code Extension to support the ink! language support features added to the language server and semantic analyzer in milestones 1, 2, 3 and 4 above. Visual interface demos of all the IDE/editor features can be found in VS Code extension documentation for [diagnostics](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#provide-diagnostics), [completions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-code-completion-proposals), [hover content](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [code actions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [quick fixes](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#possible-actions-on-errors-or-warnings), [signature help/parameter hints (demo uses functions but should still be helpful for interface visualization for ink! attribute arguments)](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#help-with-function-and-method-signatures), [inlay hints](https://code.visualstudio.com/docs/typescript/typescript-editing#_inlay-hints), [go to definition](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-definitions-of-a-symbol), [find references](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#find-all-references-to-a-symbol), [rename/refactor](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#rename-symbols), [snippets/code stubs](https://code.visualstudio.com/docs/typescript/typescript-editing#_snippets) and [commands](https://code.visualstudio.com/api/ux-guidelines/command-palette). | +| Number | Deliverable | Specification | +|--------:|---------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| **0a.** | License | GPL-3.0 | +| **0b.** | Documentation | I will provide inline source documentation and a README file (published on [Github](https://github.com/) and the [VS Code marketplace](https://marketplace.visualstudio.com/vscode)) providing general information about the extension, instructions for installing and using the extension and links to other documentation and resources related to the extension. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive integration tests to ensure functionality and robustness. In the guide, I will describe how to run these tests. | +| **0d.** | Docker | I will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | I will publish an **article** that introduces the new features of ink! analyzer, including updates to the VS Code extension, the language server and the semantic analyzer. | +| 1. | Visual Studio Code Extension: Updates | I will update the Visual Studio Code Extension to support the ink! language support features added to the language server and semantic analyzer in milestones 1, 2, 3, 4, 5 and 6 above. Visual interface demos of all the IDE/editor features can be found in VS Code extension documentation for [diagnostics](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#provide-diagnostics), [completions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-code-completion-proposals), [hover content](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [code actions](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-hovers), [quick fixes](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#possible-actions-on-errors-or-warnings), [signature help/parameter hints (demo uses functions but should still be helpful for interface visualization for ink! attribute arguments)](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#help-with-function-and-method-signatures), [inlay hints](https://code.visualstudio.com/docs/typescript/typescript-editing#_inlay-hints), [go to definition](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#show-definitions-of-a-symbol), [find references](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#find-all-references-to-a-symbol), [rename/refactor](https://code.visualstudio.com/api/language-extensions/programmatic-language-features#rename-symbols), [snippets/code stubs](https://code.visualstudio.com/docs/typescript/typescript-editing#_snippets) and [commands](https://code.visualstudio.com/api/ux-guidelines/command-palette). | ## Future Plans From e1b18dd75921a3eb4c9043f008daea3e3001e891 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Wed, 6 Sep 2023 17:37:56 +0200 Subject: [PATCH 594/665] Update ecosystem grant programs links in README (#1954) * Add pendelum and amplitude grant programs to README * Update HydraDX Bounties link --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 585de809276..86135a5a4f6 100644 --- a/README.md +++ b/README.md @@ -323,7 +323,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [Crust Grants Program](https://github.com/crustio/Crust-Grants-Program) - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) - [Edgeware Grants and Bounties](https://gov.edgewa.re/discussion/1132-edgeware-proposal-process-and-template) -- [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) +- [HydraDX Grants and Bounties](https://docs.hydradx.io/spending_fw/) - [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [KodaDot Ecosystem Grants](https://github.com/kodadot/grants) @@ -334,6 +334,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [Picasso / Composable Grants Program](https://grants.composable.finance) - [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) +- [Pendelum / Amplitude Grant Programs](https://pendulumchain.org/ecosystem-grant) ## :information_source: License From 3d93cd7d9defb4a1aeea7a2fc42956a582155b01 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Wed, 6 Sep 2023 20:09:59 +0200 Subject: [PATCH 595/665] Fix ecosystem grant link in funding doc (#1955) --- docs/funding.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/funding.md b/docs/funding.md index 25ff1ed6d18..210b9d2af88 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -30,7 +30,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [Crust Grants Program](https://github.com/crustio/Crust-Grants-Program) - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) - [Edgeware Grants and Bounties](https://gov.edgewa.re/discussion/1132-edgeware-proposal-process-and-template) -- [HydraDX Grants and Bounties](https://docs.hydradx.io/new_deal/) +- [HydraDX Grants and Bounties](https://docs.hydradx.io/spending_fw/) - [ink!ubator](https://use.ink/ubator/) - [Interlay Labs Grants Program](https://github.com/interlay/Grants-Program) - [KodaDot Ecosystem Grants](https://github.com/kodadot/grants) @@ -41,3 +41,4 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [Picasso / Composable Grants Program](https://grants.composable.finance) - [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) +- [Pendelum / Amplitude Grant Programs](https://pendulumchain.org/ecosystem-grant) From 0d60f256a0a05b5242aa4f92b0553097d82ad631 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 7 Sep 2023 11:27:54 +0200 Subject: [PATCH 596/665] Add Legal Disclosures --- docusaurus.config.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docusaurus.config.js b/docusaurus.config.js index 09f654f8a93..e606f27f0bb 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -84,6 +84,10 @@ module.exports = { label: 'Privacy Policy', to: 'docs/Support%20Docs/privacy_policy', }, + { + label: 'Legal Disclosures', + to: 'https://web3.foundation/legal-disclosures/', + }, ], }, { From fdb4c726937aafb0ce7fd9c3695573cd899b433d Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Thu, 7 Sep 2023 15:01:14 +0200 Subject: [PATCH 597/665] Fix composable grants program link (#1958) * Fix composable grants program link in README * Fix composable grants program link in funding doc --- README.md | 2 +- docs/funding.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 86135a5a4f6..29bab1469ca 100644 --- a/README.md +++ b/README.md @@ -331,7 +331,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [OAK’s Developer Grants](https://oak.tech/community/grants/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) -- [Picasso / Composable Grants Program](https://grants.composable.finance) +- [Picasso / Composable Grants Program](https://docs.composable.finance/ecosystem/composable-grants/) - [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) - [Pendelum / Amplitude Grant Programs](https://pendulumchain.org/ecosystem-grant) diff --git a/docs/funding.md b/docs/funding.md index 210b9d2af88..4eb68e7103d 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -38,7 +38,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [OAK’s Developer Grants](https://oak.tech/community/grants/) - [peaq Ecosystem Grant Program](https://www.peaq.network/grant-program) - [Phala Builders Program](https://wiki.phala.network/en-us/build/general/builders-program/) -- [Picasso / Composable Grants Program](https://grants.composable.finance) +- [Picasso / Composable Grants Program](https://docs.composable.finance/ecosystem/composable-grants/) - [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) - [Pendelum / Amplitude Grant Programs](https://pendulumchain.org/ecosystem-grant) From 1ba78390129215a99751be01b22fc2e5f4904cec Mon Sep 17 00:00:00 2001 From: Mark Van de Vyver Date: Fri, 8 Sep 2023 17:38:43 +1000 Subject: [PATCH 598/665] Updated distribution point (#1959) Signed-off-by: Mark Van de Vyver --- applications/tokenomics-survey-2022.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/applications/tokenomics-survey-2022.md b/applications/tokenomics-survey-2022.md index dbc0148e57a..48e5a16fd96 100644 --- a/applications/tokenomics-survey-2022.md +++ b/applications/tokenomics-survey-2022.md @@ -1,4 +1,4 @@ -# Tokenomics Scoping Review: Annotated Bibliogrphy +# Tokenomics Scoping Review: Annotated Bibliography - **Team Name:** Mark Van de Vyver [PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) - **Payment Address:** 15WoVugRLfBAogS1FBmhzxVv8WZqZK1z4KKHALijTZfdVcCm (USDC) @@ -11,7 +11,7 @@ A annotated bibliography of rational expectations equilibrium (a.k.a. no-arbitrage) economic models used to develop blockchain/token economies, as well as the tokenomics of Polkadot Parachains. This is a survey, hence limited to topics the existing literature addresses. Within the scope of the deliverables, I am not committing to solving any particular token-economy design question. -The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [ResearchGate](https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography). - Description: The decision making of developers (and other stakeholders) is assisted if a hypothetical/proposed token-economy can be described by reference, or analogy, to a known working/successful token-economy. Absent an existing implementation, developers are left to invent a token-economy, try to adapt an existing non-blockchain experience to a blockchain, or try to adapt non-blockchain ideas to a blockchain. @@ -111,7 +111,7 @@ The grants team, and any reader could reproduce the data analysis by applying th ### Intended venue for results publication and the timeline for publication -The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [ResearchGate](https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography). ### Out of scope @@ -281,7 +281,7 @@ Finalize the flow-chart/decision-tree that will help developers place their toke Finalize the annotated bibliography. Promote the working paper, incorporate feedback. -The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent). +The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [ResearchGate](https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography). | Number | Deliverable | Specification | | -----: | ----------- | ------------- | @@ -296,14 +296,14 @@ The report/working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Rese | **0e.4** | - Appendix: Methodology | The research methodology. Text and tables where relevant/appropriate. | | **0e.5** | - Section: Summary | Where are we and where to next? | | 1. | Feedback | Collect published, working and network papers, as described in the methodology section above | -| 2. | Publish | The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent) | +| 2. | Publish | The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [ResearchGate](https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography) | ## Future Plans Please include here - how you intend to use, enhance, promote and support your project in the short term, and - - The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/), [Arxiv (q-fin.GN)](https://arxiv.org/list/q-fin.GN/recent) and the Polkadot forum. + - The working paper will be posted to [SSRN (e.g. FEN - Cryptocurrency Research eJournal)](https://papers.ssrn.com/sol3/JELJOUR_Results.cfm?form_name=journalBrowse&journal_id=3839004), [IDEAS](https://ideas.repec.org/),[ResearchGate](https://www.researchgate.net/publication/373739562_Tokenomics_Scoping_Review_Annotated_Bibliography). - the team's long-term plans and intentions in relation to it. - W3F Grant Proposal to implement and document one token model as an example/template of building a blockchain on the W3F [Open Web3 Stack](https://github.com/open-web3-stack) having known 'on-paper' coin characteristics. - Create RFP's addressing pallet functionality gaps that are identified in the course of the above. From e7cda32ab237d07c0fe580d9ef6bd58d5f35c252 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 8 Sep 2023 15:16:04 +0200 Subject: [PATCH 599/665] Update index.md DocSig M1 --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 3e967c0b38f..0ccfa5e03a1 100644 --- a/applications/index.md +++ b/applications/index.md @@ -52,7 +52,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [TPScore](https://github.com/its-a-setup) | [TPScore](./TPScore.md) | [GitHub](https://github.com/its-a-setup) | ☐ | ☒ | ☐ | | [Orochi Network](https://www.orochi.network/) | [Research and development MPC ECDSA](./orochi-network-orosign-part1.md) | [GitHub](https://github.com/orochi-network) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [On-Chain Automated Treasury Management](./centrifuge-twamm.md) | [GitHub](https://github.com/centrifuge) | ☐ | ☐ | ☐ | -| [AISLAND DAO](https://aisland.io) | [Aisland Docsig](./Aisland-DocSig.md) | [GitHub](https://github.com/aisland-dao) | ☐ | ☐ | ☐ | +| [AISLAND DAO](https://aisland.io) | [Aisland Docsig](./Aisland-DocSig.md) | [GitHub](https://github.com/aisland-dao) | ☐ | ☒ | ☐ | | [Eiger](https://www.eiger.co/) | [Storage solution on Polkadot](./Eiger_Storage_on_Polkadot_1.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang Playground](Solang_Playground.md) | [GitHub](https://github.com/salaheldinsoliman) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [P2P data platform](data_platform_with_deep_indexed_data_and_staking_reports.md) | [GitHub](https://github.com/p2p-org) | ☐ | ☐ | ☐ | From 98ad7f526f11ba97e5230d0c3c1701c27cd417ee Mon Sep 17 00:00:00 2001 From: Parth <97211975+ParthChaudhary31@users.noreply.github.com> Date: Mon, 11 Sep 2023 11:56:10 +0530 Subject: [PATCH 600/665] Rfp/security marketplace_PaymentAmendment (#1961) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * RFP/security * changes * Tables Updated * Links Updated * changes * WireFrames * MIlestones * Milestone * Techstack Added * Revised Price * Update applications/Security_Marketplace.md Co-authored-by: S E R A Y A * Updated Security Marketplace * RFP amendment * Voting system Pushed On-Chain Co-authored-by: Sebastian Müller * Payment Amendment --------- Co-authored-by: S E R A Y A Co-authored-by: Sebastian Müller --- applications/Security_Marketplace.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/Security_Marketplace.md b/applications/Security_Marketplace.md index 1fe40a382fb..95c73cd7155 100644 --- a/applications/Security_Marketplace.md +++ b/applications/Security_Marketplace.md @@ -1,7 +1,7 @@ # Security Marketplace - **Team Name:** Antier Solutions -- **Payment Address:** 1XhNxALoCmXF86aiwZtdDJspjWZBiRX9UfbJ4jQsWN15eSu (aUSD) +- **Payment Address:** Fiat - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 ## Project Overview :page_facing_up: From f40ee014880d5d2e70416e90e6cf3c3ba9e15ed4 Mon Sep 17 00:00:00 2001 From: Prayag <52105313+prayagd@users.noreply.github.com> Date: Mon, 11 Sep 2023 12:01:55 +0530 Subject: [PATCH 601/665] Pendulum name typo (#1962) Fixing the typo in the Pendulum team name. --- docs/funding.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/funding.md b/docs/funding.md index 4eb68e7103d..60f063e8a9c 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -41,4 +41,4 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [Picasso / Composable Grants Program](https://docs.composable.finance/ecosystem/composable-grants/) - [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) -- [Pendelum / Amplitude Grant Programs](https://pendulumchain.org/ecosystem-grant) +- [Pendulum / Amplitude Grant Programs](https://pendulumchain.org/ecosystem-grant) From 19d2f54c0cd323d55518910aabfb88a9f407f677 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 11 Sep 2023 08:32:45 +0200 Subject: [PATCH 602/665] Update README.md Fix Pendulum name --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 29bab1469ca..2549a7dac51 100644 --- a/README.md +++ b/README.md @@ -334,7 +334,7 @@ Below is a list of other grant and bounty programs in the Polkadot/Substrate eco - [Picasso / Composable Grants Program](https://docs.composable.finance/ecosystem/composable-grants/) - [Polkadot Pioneers Prize](https://pioneersprize.polkadot.network/) - [SubQuery Grants Programme](https://subquery.network/grants) -- [Pendelum / Amplitude Grant Programs](https://pendulumchain.org/ecosystem-grant) +- [Pendulum / Amplitude Grant Programs](https://pendulumchain.org/ecosystem-grant) ## :information_source: License From 102b176b097bbe41b3d250a2a810d3f903ca1ed9 Mon Sep 17 00:00:00 2001 From: Joshy Orndorff Date: Mon, 11 Sep 2023 10:19:38 -0400 Subject: [PATCH 603/665] Tuxedo Parachain Support (#1932) Co-authored-by: S E R A Y A --- applications/tuxedo_parachain.md | 199 +++++++++++++++++++++++++++++++ 1 file changed, 199 insertions(+) create mode 100644 applications/tuxedo_parachain.md diff --git a/applications/tuxedo_parachain.md b/applications/tuxedo_parachain.md new file mode 100644 index 00000000000..287d3cddea2 --- /dev/null +++ b/applications/tuxedo_parachain.md @@ -0,0 +1,199 @@ +# Tuxedo Parachain + +- **Team Name:** Off Narrative Labs +- **Payment Address:** 0x5a335908df9D2C47304338E3b744579Ed7C6a64d (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 :chicken: + +## Project Overview :page_facing_up: + +Develop Parachain runtimes in the UTXO model. + +### Overview + +In a [previous grant](https://github.com/w3f/Grants-Program/blob/master/applications/tuxedo.md) ([PR](https://github.com/w3f/Grants-Program/pull/1517)) we developed Tuxedo, a framework for writing Substrate runtimes in the UTXO model. + +Currently, Tuxedo works well for standalone Substrate blockchains, but does not yet work as a Polkadot Parachain. +In this grant, we propose to implement the common infrastructure necessary for a UTXO runtime to fulfill the parachain side of the Polkadot protocol. + +We further propose to collect benchmark data profiling Tuxedo in various contexts. + +### Project Details + +Tuxedo is analogous to FRAME in that they are both frameworks for writing Substrate runtimes. +They are also analogous in that they need additional code to serve as parachain runtimes. + +The code that allows a FRAME to work as a parachain is a large part of cumulus. +Specifically, it is in the [Parachain System pallet](https://paritytech.github.io/cumulus/cumulus_pallet_parachain_system/index.html) and the [`generate_validate_block!` macro](https://paritytech.github.io/cumulus/src/cumulus_pallet_parachain_system_proc_macro/lib.rs.html#94-153). +The first two milestones are devoted to adapting and rewriting these two important pieces of code in a UTXO-native way. + +This is the crux of the parachain support. + +This work will be implemented in a crate called `tuxedo-parachain` in the existing [Tuxedo repository](https://github.com/Off-Narrative-Labs/Tuxedo). +Using the same repository allows runtime developers to easily discover the parachain support, and reference a single set of docs. +Using a separate crate provides a clean separation of concerns while also allowing standalone chain developers to avoid the high compile times associated with cumulus and polkadot. + +Our intention is to use the existing cumulus collator client-side code nearly untouched. +This is the same approach we followed in the first grant where we used the existing Substrate node template client-side untouched. +The key observation is that Tuxedo is a runtime framework, and thus the existing clients should work out-of-the-box. + +Importantly, this proposal does _not_ include full XCM support. +We estimate that to be a more complex topic, and one that does not need to block the initial goals of participating in Polkadot's shared security, and comparing performance data against existing runtime frameworks. + +### Ecosystem Fit + +Tuxedo is a framework for writing Substrate runtimes. +Substrate is the toolkit for building virtually all parachain nodes. +Tuxedo provides a richer set of options to runtime developers. +By extending Tuxedo to support Parachain runtimes, we increase the diversity and expressiveness of the Polkadot network's parachains, attracting developers who may have gone elsewhere if limited to the accounts model alone. + +The primary users of Tuxedo will be parachain runtime developers who will use Tuxedo directly to structure their chain logic. Of course, the user base will trickle downstream as well to users of those parachains that choose to build with Tuxedo. However, chain users will use Tuxedo only indirectly. + +There are no projects like this in the Substrate ecosystem, although they do exist in the broader blockchain space; Cardano being the most notable example. + +While it fulfills a similar role, Tuxedo is not intended to compete with FRAME, but rather to compliment it, by welcoming projects that fit naturally with the utxo model into the Substrate ecosystem, as FRAME does for projects that fit the accounts model. + +## Team :busts_in_silhouette: + +### Team members + +- Joshy Orndorff https://github.com/JoshOrndorff +- Off Narrative Labs https://github.com/Off-Narrative-Labs + +### Contact + +- **Contact Name:** Joshy Orndorff +- **Contact Email:** joshyorndorff at proton dot me +- **Registered Address:** To be provided in the invoices + +### Team's experience + +Joshy entered the Substrate ecosystem in 2019 as part of the Substrate Developer Hub team. There he created and hosted the weekly Substrate Seminar, and contributed significantly to the Substrate Recipes. In 2020, he moved to the Moonbeam team where he was a core developer. While at Moonbeam, Joshy wrote the [Nimbus consensus engine](https://github.com/PureStake/nimbus/) which is used in several production parachains, and helped pioneer the technique whereby EVM contracts can interact with native Substrate pallets. In 2022, Joshy began contributing to the Polkadot Blockchain Academy, teaching in all three cohorts: Cambridge, Buenos Aires, and Berkeley. + +Joshy met Andrew Burger in Cambridge in 2022 at the first Polkadot Blockchain Academy where Andrew, a student at the time, chose to implement a UTXO Runtime as his final project. Together they revised the UTXO assignment and taught it together at the next PBA. A few months later they worked together on the first Tuxedo grant. + +Andrew will not be contributing to this grant directly (although he is still an enthusiastic open source contributor to Tuxedo) due to conflicting employment elsewhere. + +### Team Code Repos + +* Main Tuxedo Repo - https://github.com/Off-Narrative-Labs/Tuxedo +* Tuxedo Tutorial - https://github.com/Off-Narrative-Labs/Tuxedo-Order-Book-Dex-Tutorial/ +* Nimbus Consensus (Prior Work) - https://github.com/moonbeam-foundation/nimbus +* Blockchain From Scratch (Educational) https://github.com/JoshOrndorff/blockchain-from-scratch + +## Development Status :open_book: + +As mentioned above, the team has done previous work on [Tuxedo](https://github.com/Off-Narrative-Labs/Tuxedo/tree/main). + +As we mentioned in our previous grant our next tasks are parachain support (this grant's topic) and zero knowledge UTXOs. + +Of course there are also some lingering leftovers in our issue queue mostly centered around the wallet. +We do at some point want to make the wallet more generalizable to be able to craft any generic transaction based on whichever tuxedo runtime is defined. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 12 weeks +- **Full-Time Equivalent (FTE):** 1 FTE +- **Total Costs:** $48,000 (USD) + +### Milestone 1 — Rewrite Pallet Parachain System to UTXO model + +- **Estimated duration:** 6 weeks +- **FTE:** 1 +- **Costs:** 24,000 USD + +The bulk of the logic for handling communication with the relay chain lives in [pallet parachain system](https://paritytech.github.io/cumulus/cumulus_pallet_parachain_system/index.html), and consequently, this is the largest milestone in this grant proposal. + +We will adapt logic for signaling and enacting runtime upgrades, and providing other [parachain output](https://paritytech.github.io/cumulus/cumulus_primitives_core/relay_chain/struct.CandidateCommitments.html)s. +We will "handle" incoming and outgoing XCM messages (reminder, full xcm support is out of scope, but we still need to report 0 outbound messages and stub the inbound handling logic to satisfy the protocol). +Most importantly, we will process the latest [validation data](https://paritytech.github.io/cumulus/cumulus_primitives_core/struct.PersistedValidationData.html) and make it available to Tuxedo pieces in a standard way. + +Because this is already the largest chunk of work, I've chosen to make a milestone here. +Admitedly, there will not be a very sexy thing to "try out" at this stage because without the macro from the next milestone, there will not yet be a fully working parachain runtime. +Nonetheless, we will have a complete well documented test suite analogous to the one used for frame. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a how the parachain system piece works within Tuxedo as compared to FRAME | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Tuxedo Parachain Crate | We will publish a crate on github containing all of the relevant reworked code including docs about how to execute the test suite. | + +### Milestone 2 — Migration of `register_validate_block!` + +- **Estimated Duration:** 2 weeks +- **FTE:** 1 +- **Costs:** 8,000 USD + +The `register_validate_block!` macro is responsible for generating the `validate_block` entrypoint function in the runtime wasm. This is the main entrypoint in the runtime from the relay chain validators' perspective. + +We will need to migrate the following to a Tuxedo compatible version + +```rust +cumulus_pallet_parachain_system::register_validate_block! { + Runtime = Runtime, + BlockExecutor = cumulus_pallet_aura_ext::BlockExecutor::, + CheckInherents = CheckInherents, +} +``` + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains the difference between the FRAME based approach and the Tuxedo based approach to this macro | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 1. | Tuxedo Parachain Template | If you crossed the standalone Tuxedo Template with the Cumulus Template. This is the main deliverable for the grant. A working template node for a Tuxedo-based parachain runtime and collator node. | + + +### Milestone 3 — Benchmarking + +- **Estimated Duration:** 4 weeks +- **FTE:** 1 +- **Costs:** 16,000 USD + +Benchmark common transaction types in standalone and parachain contexts. +Make good faith comparisons to analogous transaction types in FRAME. +We hope that the simplicity of the UTXO model will allow performance increases, but right now that is just a theory. + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can spin up the example node and transfer tokens | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile that can be used to test all the functionality delivered with this milestone. | +| 1. | Benchmark Report | Full report of throughput for {Transfer, Remark} transactions in {FRAME, Tuxedo} runtimes operated in {Standalone, Parachain} contexts. | + + +## Future Plans + +### Near Term + +We have a vision for a Tuxedo parachain that acts as an Atomic Swap hub for DOT ecosystem assets to foreign UTXO chains like Monero, Zcash, Cardano, etc. + +The [Farcaster](https://github.com/farcaster-project) provides a Monero Bitcoin atomic swap protocol. +We intend to extend this protocol to support Tuxedo chains. +And thanks to Polkadot's XCM, this would allow atomic swaps between other DOT ecosystem assets and foreign UTXO chains as well. + + +Following completion of this grant, the path to working Atomic Swaps would be roughly + +1. Extend Farcaster to support swaps with Tuxedo. +2. XCM integration with Tuxedo for Cross-chain UTXOS. +3. Testing, auditing, etc. + +### Medium Term + +Other dreams we have for Tuxedo include: + + +* Zero-knowledge runtimes a-la zero-cash and zexe. +* UTXO-native Smart Contracts based on the pi-calculus. + +## Additional Information :heavy_plus_sign: + +As mentioned above, we have completed one previous grant on this topic: +* Application PR: https://github.com/w3f/Grants-Program/pull/1517 +* Approved Application: https://github.com/w3f/Grants-Program/blob/master/applications/tuxedo.md From 85c7318a62d5f3a50005f5ba57457166b1368ca0 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 11 Sep 2023 17:00:12 +0200 Subject: [PATCH 604/665] Update index.md Add Off-Narrative-Labs --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 0ccfa5e03a1..abbe95deb6f 100644 --- a/applications/index.md +++ b/applications/index.md @@ -66,6 +66,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [NeoPower Digital](https://neopower.digital/) | [Roloi - XCM Payment Automation](./roloi-xcm-payment-automation.md) | [GitHub](https://github.com/NeoPower-Digital) | ☐ | ☐ | ☐ | | [Eiger](https://www.eiger.co/) | [MoveVM Substrate Pallet, part 2](./Substrate_Move_System_Pallet_2.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Rust Syndicate x Decentration](https://www.decentration.org/) | [XCMSend](./xcmsend.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | +| [Off Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo Parachain Support](./tuxedo_parachain.md) | [GitHub](https://github.com/Off-Narrative-Labs) | ☐ | ☐ | ☐ | [🔝](#2023) From 963e5583adc56931bb775318b2c7ccb4f743c7f2 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 12 Sep 2023 00:57:11 -0400 Subject: [PATCH 605/665] Update index.md (#1963) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index abbe95deb6f..38cce1cd626 100644 --- a/applications/index.md +++ b/applications/index.md @@ -158,7 +158,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [gmajor](https://github.com/gmajor-encrypt) | [XCM Tools](xcm-tools.md) | [GitHub](https://github.com/gmajor-encrypt/) | ☐ | ☒ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [ink! Analyzer](ink-analyzer.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☒ | ☒ | | [Bright Inventions](https://brightinventions.pl/) | [High-availability validator setup](High_availability_validator_setup.md) | [GitHub](https://github.com/bright/) | ☐ | ☒ | ☒ | -| [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☐ | +| [DIA Data](https://www.diadata.org/) | [Bridgestate Attestation Oracle](DIA_Bridge_Attestation_Oracle.md) | [GitHub](https://github.com/diadata-org/) | ☐ | ☒ | ☒ | | [TogetherCrew](http://www.togethercrew.com/) | [Community Health Check](community-health-check.md) | [GitHub](https://github.com/RnDAO) | ☐ | ☒ | ☐ | | [Decentration](https://www.decentration.org/) | [Supersig Phase 2](./supersig_fellowship.md) | [GitHub](https://github.com/decentration) | ☐ | ☒ | ☒ | | [Polkadrys Labs](https://github.com/rtomas) | [Open Payroll](./openPayroll.md) | [GitHub](https://github.com/rtomas) | ☐ | ☒ | ☐ | From 3c2a43eb831f743869e5353490702cf5ee35d91b Mon Sep 17 00:00:00 2001 From: Jan Bormet <48735321+janbormet@users.noreply.github.com> Date: Tue, 12 Sep 2023 15:49:49 +0200 Subject: [PATCH 606/665] Distributed Cryptography for Polkadot Wallets application (#1908) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add "Distributed Cryptography for Polkadot Wallets" application * Update applications/distributed_cryptography_for_polkadot_wallets.md Fix total FTEs --------- Co-authored-by: Sebastian Müller --- ...buted_cryptography_for_polkadot_wallets.md | 217 ++++++++++++++++++ 1 file changed, 217 insertions(+) create mode 100644 applications/distributed_cryptography_for_polkadot_wallets.md diff --git a/applications/distributed_cryptography_for_polkadot_wallets.md b/applications/distributed_cryptography_for_polkadot_wallets.md new file mode 100644 index 00000000000..88d1d5e54c7 --- /dev/null +++ b/applications/distributed_cryptography_for_polkadot_wallets.md @@ -0,0 +1,217 @@ +# Distributed Cryptography for Polkadot Wallets +- **Team Name:** PolyCrypt GmbH +- **Payment Address:** 0x308Ca526B009e10Ef0482C38A3370BFb44A32908 (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview + +Cryptocurrency wallets are a highly attractive target for cyberattacks. An attacker that breaks into a wallet gets access to secret keys, thereby gaining full control over the user's funds. Many examples illustrate that hacks of cryptocurrency wallets are one of the major security threats for blockchain users. For example, in the recent security breach of the popular atomic wallet, hackers allegedly stole over $100 M worth of cryptocurrency from users of the atomic wallet. + +The overall goal of this project is to develop a cryptographic library to protect Polkadot wallets against cyberattacks. This will be done via threshold cryptography. Threshold cryptography is an emerging technology that can significantly strengthen the security of cryptocurrency wallets. The main idea is to share the secret key over multiple entities/devices, thereby making it much harder for an attacker to gain control over the user’s funds. There has recently been a lot of interest in academia and industry in designing new threshold cryptographic schemes that come with additional security features and offer better efficiency \[[1](https://eprint.iacr.org/2020/1390.pdf),[2](https://dl.acm.org/doi/10.1145/3372297.3423367),[3](https://eprint.iacr.org/2019/114)\]. Some of these schemes (or variants thereof) are currently deployed in both custodial and shared custodial wallets (e.g., [Fireblocks](https://www.fireblocks.com/) or [ZenGo](https://zengo.com/)). Most research and implementation of threshold signatures focus on the ECDSA signature scheme. This is because ECDSA is widely used by the two largest cryptocurrencies Bitcoin and Ethereum. In our project, we will focus on the Schnorr signature scheme, which is the main signature scheme used by the Polkadot ecosystem. + +Concretely, we will develop a library that allows to thresholdize BIP32 wallets. BIP32 is a wallet standard that is widely deployed in practice and offers deterministic and hierarchical key derivation. Members of our team have previously designed a threshold BIP32 protocol for the ECDSA signature scheme \[[4](https://eprint.iacr.org/2023/312)\]. In the first phase of this multi-phase grant, we will adapt our threshold BIP32 scheme for Schnorr signatures that are used by Polkadot (i.e., the Schnorrkel/Ristretto). We will summarize our results as white paper that will include a full technical description of our scheme and a rigorous security analysis. We will also give advice on implementing our scheme to avoid common security incidents (e.g., missing range checks or zero knowledge proofs). Finally, we will disseminate our results via a medium article and if suitable through a publication at an academic conference (e.g., Financial Crypto, ACM CCS,...). + +Over the past years, our group has carried out intensive research on threshold cryptography and cryptographic wallets \[[4](https://eprint.iacr.org/2023/312),[5](https://dl.acm.org/doi/10.1145/3319535.3354236),[6](https://dl.acm.org/doi/10.1145/3460120.3484807)\]. With this project, we hope to see some of our research deployed and integrated in practice. Threshold cryptography has many fascinating applications for blockchain systems, and we hope that with this project we can contribute to this emerging field. We choose to focus on thresholdizing cryptographic wallets for two reasons. First, most of our prior research has been on this topic. Second, cryptographic wallets are a fundamental building block that is crucial for any blockchain application (DeFi, staking, gaming,...). Moreover, we have previously talked to researchers at web3/Polkadot, who encouraged us to apply for a grant on this topic. + +### Project Details + +As mentioned above, in this grant we will research threshold cryptographic wallets. We will not develop code at this stage of the project (see the section on Future plans for more details on this), but instead deliver a white paper describing our new cryptographic scheme (including its formal security analysis). Moreover, this white paper will contain a specification that will be a solid basis to enable developers implementing our wallet scheme. Our research in this proposal is mainly based on our prior work on the ECDSA BIP32 wallets \[[4](https://eprint.iacr.org/2023/312),[5](https://dl.acm.org/doi/10.1145/3319535.3354236),[6](https://dl.acm.org/doi/10.1145/3460120.3484807)\]. Let us briefly describe our prior work relevant to this project below. + +In \[[5](https://dl.acm.org/doi/10.1145/3319535.3354236),[6](https://dl.acm.org/doi/10.1145/3460120.3484807)\], we provide the first rigorous security analysis of the BIP32 standard. BIP32 has two main features. First, it offers a deterministic key derivation, where session secret keys are derived via an additive key derivation function from a master secret key. Second, BIP32 offers support for key hierarchies, which are particularly important for larger organizations managing cryptocurrency funds. Hierarchical key derivation also offers two types of wallets: hardened and non-hardened nodes. Hardened nodes offer better security as corrupting the secret keys assigned to such nodes does not affect the security of other nodes in this key hierarchy. The figure below gives a graphical representation of a BIP32 hierarchical wallet. + +![bip32-hierarchical-wallets](https://user-images.githubusercontent.com/48735321/260511645-2ab7c1d1-5490-4300-94da-1f8f21767139.png) + +In our research work published at the academic conference ACM CCS 2021, we propose a formal security model for hierarchical deterministic wallets. We define two security properties called wallet unforgeability and wallet unlinkability. The first says that funds cannot be stolen as long as the secret keys remain secure. We also integrate hardened node corruption, where the attacker is allowed to learn the secret keys assigned to a hardened node of its choice. The unlinkability property is a privacy feature and guarantees that individual wallets derived from the same master key are unlinkable. Finally, we show that the BIP32 standard satisfies wallet unforgeability and unlinkability. The analysis in our prior work \[[4](https://eprint.iacr.org/2023/312)\] only shows these security features for the ECDSA signature scheme. For further details on BIP32, we refer to the description in our paper \[[6](https://dl.acm.org/doi/10.1145/3460120.3484807)\]. + +The second work that is relevant for this grant application is our work on thresholdizing BIP32 \[[4](https://eprint.iacr.org/2023/312)\]. We propose a cryptographic protocol for thresholidzing the ECDSA BIP32 wallet. We also give a security model and formally analyze the security of our cryptographic scheme within this model. A key insight of our work is that by slightly adjusting the BIP32 standard, we can offer significantly better efficiency. To this end, we rely on a threshold verifiable random function (TVRF) and show that for an appropriately chosen TVRF, we can seamlessly integrate it with an ECDSA threshold signature scheme. + +At a high level, this project will combine the results from \[[4](https://eprint.iacr.org/2023/312)\] and extend them to work with the Schnorr signature scheme used within the Polkadot ecosystem. Our work consists of a theoretical and more applied component. On the more conceptual/theoretical side, we will select an appropriate threshold scheme for Schnorr that is compatible with the Schnorrkel/Ristretto environment and offers overall good efficiency. We will design the protocols for threshold Schnorr BIP32. Moreover, we will investigate if our threshold TVRF idea from \[[4](https://eprint.iacr.org/2023/312)\] can also be applied for Schnorr signatures. If this is not the case, we will seek alternatives (e.g., using efficient multiparty computation to evaluate the hash function of BIP32). Finally, we will deliver a security argument for our scheme following the approach from our prior research. On the more applied side, our white paper will contain a specification for developers (with background in cryptography) to implement the key components of our proposal. We provide more details on the tasks carried out in this project as part of the development roadmap. + +### Ecosystem Fit + +There is a large number of wallets supporting the Polkadot/Kusama ecosystem. While there exist general purpose wallets such as [ZenGo](https://zengo.com/) that use threshold cryptography to secure funds, there is a large number of Polkadot/Kusama specific wallets that currently do not offer their users support for threshold cryptography (e.g., [PolkaWallet](https://polkawallet.io/)). With threshold cryptography, our project meets the urgent need to offer better security to every user in the Polkadot/Kusama ecosystem. This is achieved without inducing additional blockchain fees as unlike multisignatures, threshold signatures produce standard Schnorr/ECDSA signatures that can be verified against a single public key. The results of the first phase of this project can be used by developers to integrate threshold cryptography in their products/wallets. Moreover, it forms the basis for our own software library that we could implement in a follow-up grant. + +As mentioned above, there are multiple projects that build general purpose wallets leveraging threshold cryptography (e.g. [ZenGo](https://zengo.com/) or [Coinbase](https://www.coinbase.com/cloud/products/waas) as a distributed custodial wallet). We are not aware of any Substrate / Polkadot / Kusama dedicated project that works on threshold wallets. Moreover, even existing solutions in the wider blockchain ecosystem will not offer the features that we aim to achieve in this project since our work is based on recent research from members of our team. In particular, except for our own prior work \[[4](https://eprint.iacr.org/2023/312)\], we are not aware of any threshold BIP32 scheme – in particular, there currently does not exist any variant that is compatible with the Schnorr signature scheme. + +## Team :busts_in_silhouette: + +### Team members + +Team members are listed in alphabetical order: +- **Hendrik Amler:** Hendrik is a co-founder and CEO of PolyCrypt. He holds a Master degree in IT Security from the Hochschule Darmstadt. +- **Jan Bormet:** Jan is a Master student of Computer Science at the Technical University of Darmstadt. He is currently finishing his Master thesis on threshold cryptography and is a core developer at PolyCrypt. +- **Andreas Erwig:** Andreas finished his PhD degree in Applied Cryptography at the Technical University of Darmstadt in July 2023. His research focuses on the security of cryptographic wallets. He is co-author of most prior work mentioned in this proposal. +- **Sebastian Faust:** Sebastian is a professor of Computer Science at the Technical University of Darmstadt. He leads the Applied Cryptography Group which focuses on cryptography for blockchain applications. He is a co-inventor of the Perun protocols and has published more than 70 academic papers at leading venues for research in cryptography and IT Security. He is co-founder and research lead at PolyCrypt. + +### Contact + +- **Contact Name:** Hendrik Amler +- **Contact Email:** hendrik@polycry.pt +- **Website:** https://polycry.pt + +### Legal Structure + +- **Registered Address:** Hilpertstraße 31, 64295 Darmstadt, Trakt C, Germany +- **Registered Legal Entity:** PolyCrypt GmbH, Handelsregister Darmstadt HRB 101219, VAT DE339864467 + +### Team's experience + +The team has extensive experience in the design and analysis of cryptographic protocols and blockchain technology. Members of the team have co-invented the Perun state channel protocols \[[7](https://link.springer.com/chapter/10.1007/978-3-030-17653-2_21),[8](https://ieeexplore.ieee.org/document/8835315),[9](https://dl.acm.org/doi/10.1145/3243734.3243856)\], which have been published at the leading venues for research in IT Security and cryptography (ACM CCS, IEEE S&P and Eurocrypt). The Perun state channels are implemented for several major blockchain ecosystems including Ethereum, Polkadot and Cardano. Most important for this project is the team’s prior work on analyzing and designing cryptographic wallets \[[4](https://eprint.iacr.org/2023/312),[5](https://dl.acm.org/doi/10.1145/3319535.3354236),[6](https://dl.acm.org/doi/10.1145/3460120.3484807),[10](https://dl.acm.org/doi/10.1145/3372297.3423361)\]. Members of the team designed the first formal model for deterministic wallets \[[5](https://dl.acm.org/doi/10.1145/3319535.3354236)\], devised wallets with post-quantum security \[[10](https://dl.acm.org/doi/10.1145/3372297.3423361)\] and provided the first security analysis of the BIP32 standard \[[6](https://dl.acm.org/doi/10.1145/3460120.3484807)\]. The team also has extensive experience in threshold cryptography \[[4](https://eprint.iacr.org/2023/312),[11](https://eprint.iacr.org/2021/1290),[12](https://eprint.iacr.org/2023/1076)\]. + +PolyCrypt is a spin-off of the Technical University of Darmstadt that is a specialized technology provider for research in blockchains and cryptography. The current product portfolio of PolyCrypt includes the blockchain agnostic state channel framework Perun (https://perun.network) and a TEE-based second-layer solution called Erdstall (https://erdstall.dev). PolyCrypt also offers consulting services in topics such as anonymous credentials, threshold cryptography and privacy preserving technologies. Customers include major European technology companies and leading blockchain ecosystems. + +PolyCrypt has strong prior expertise in the Polkadot ecosystem and was already funded by the web3 foundation in the past. It has developed a Polkadot backend for Perun state channels and various extensions for it (https://grants.web3.foundation/applications/perun_channels, https://grants.web3.foundation/applications/perun_channels-integration, https://grants.web3.foundation/applications/perun_app_channels). Moreover, we are currently collaborating with Ajuna (https://ajuna.io/) to build a second-layer solution on Polkadot for the gaming industry. + +### Team Code Repos + +- Github Organization: [perun-network](https://github.com/perun-network) +- [go-perun Framework](https://github.com/hyperledger-labs/go-perun) + - Polkadot + - [Backend](https://github.com/perun-network/perun-polkadot-backend) + - [App-Demo](https://github.com/perun-network/perun-polkadot-appdemo) + - [Pallet](https://github.com/perun-network/perun-polkadot-pallet) + - [CLI-Demo](https://github.com/perun-network/perun-polkadot-demo) + - Backend for [EVM-compatible chains](https://github.com/perun-network/perun-eth-backend/) + - Backend for [Cosmos](https://github.com/hyperledger-labs/perun-cosmwasm-backend) + - Backend for [Hyperledger Fabric](https://github.com/perun-network/perun-fabric) + - Backend for [Cardano](https://github.com/perun-network/perun-cardano-backend) + - Backend for [Nervos/CKB](https://github.com/perun-network/perun-ckb-backend) + - Backend for [Internet Computer](https://github.com/perun-network/perun-icp-backend) +- Erdstall/Wildcard (collab w/ Ajuna Network) + - [Erdstall TS SDK](https://github.com/perun-network/erdstall-ts-sdk) + - Polkadot Operator (tba) + - Pallet (tba) + - Ethereum Operator (tba) + - [Ethereum Contracts](https://github.com/perun-network/erdstall-contracts) + +### Team LinkedIn Profiles + +- https://www.linkedin.com/in/hendrik-amler-932506191/ +- https://www.linkedin.com/in/jan-bormet-08a64421a/ +- https://www.linkedin.com/in/andreas-erwig-b8352b146/ +- https://www.linkedin.com/in/sebastian-faust-365278/ + +### Google Scholar Profiles (Or other research indexer profile, ex. Researchgate) + +- https://scholar.google.com/citations?hl=en&user=ZJp1L-AAAAAJ +- https://scholar.google.com/citations?hl=en&user=V8iftrkAAAAJ + +## Development Status :open_book: + +As discussed above, the team has extensive research experience in cryptographic research and engineering cryptographic/blockchain protocols. Relevant for this project is our own prior research on cryptographic wallets and threshold cryptography: +- BIP32-Compatible Threshold Wallets: https://eprint.iacr.org/2023/312 +- The Exact Security of BIP32 Wallets: https://eprint.iacr.org/2021/1287 (published at ACM CCS’21) +- Deterministic Wallets in a Quantum World: https://eprint.iacr.org/2020/1149 (published at ACM CCS’20) +- A Formal Treatment of Deterministic Wallets: https://eprint.iacr.org/2019/698 (published at ACM CCS’19) +- Threshold BBS+ From Pseudorandom Correlations: https://eprint.iacr.org/2023/1076 + +Moreover, Andreas Erwig and Sebastian Faust were in contact with cryptographic researchers at web3. In particular, we had several calls with Handan Kilinc Alper and Jeff Burdges on topics related to this proposal. Andreas Erwig also gave a talk on cryptographic wallets in the research seminar of the web3 crypto team. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 7.25 months +- **Full-Time Equivalent (FTE):** 1.25 FTE +- **Total Costs:** 87,000 USD + +This is mostly a basic research project and hence a detailed development plan is difficult to give. We will make all results publicly available through a whitepaper that we plan to publish on an archive (e.g., the cryptology eprint archive or arxiv.org). Moreover, if suitable, we will publish the results of our research (or parts of it) via a publication at an academic conference (e.g., Financial Crypto or ACM AFT). We will further disseminate the results of our project via a medium article on our webpage (https://medium.com/perunnetwork). This article will be less technical and highlight our main findings for a broader audience. + +Based on our previous experience with publicly funded research projects, we plan the following main tasks and milestones. Notice that the description slightly deviates from the application template as it is not planned to deliver code in this project. + +### Milestone 1 – Research on cryptographic algorithms + +- **Estimated duration:** 1.5 months +- **FTE:** 1.25 FTE +- **Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **1.0a.** | Copyright and Licenses | CC BY 4.0 | +| **1.0b.** | Documentation/Tutorial | As we do not plan on delivering code we will not provide documentation in that sense. The delivered report at the end of this milestone will serve as documentation. | +| **1.0c.** | Methodology | This milestone will be achieved mainly by compiling and reading relevant literature as well as internal talks and discussions. We may involve interviews with external parties such as web3 researchers and/or wallet developers, specifally for Task 1.2. Our results can be verified through the report delivered in this milestone. | +| **1.0d.** | Infrastructure | We expect that all our work and deliverables for this milestone can be reviewed and understood without need for specific infrastructure or software except from a web browser. | +| **1.0e.** | Article | We will deliver a short report that contains a list of academic papers that we studied and a discussion on which cryptographic schemes are most suitable for our goal of building Threshold BIP32 wallets for Schnorr. The report will contain the results from Tasks 1.1 to 1.3. The report is mainly for internal use and hence will be approx. 2 pages. We will make sure that the report is easiliy accessible to the reviewers and the community. | +| **1.1.** | Investigation into threshold Schnorr protocols | We will investigate the current state of the art in threshold Schnorr protocols that are suitable to work with the Schnorrkel/Ristretto environment. We will evaluate them according to efficiency (round complexity, communication complexity) and security. For the latter, important criteria are: (1) static vs. adaptive corruption, (2) corruption threshold, (3) robustness, (4) cryptographic assumptions and models (e.g., only RO vs. AGM). | +| **1.2.** | Identification and prioritization of desirable features | We will research and discuss the priority and importance of specific efficiency and security features for our application (wallets). If necessary, we may involve interviews with external parties such as web3 researchers and/or wallet developers. | +| **1.3.** | TVRFs for threshold Schnorr wallets | We will investigate if existing protocols for TVRFs are compatible with the threshold Schnorr protocols from Task 1.1. We will classify them according to the criteria mentioned for Task 1.1. | + +### Milestone 2 – Design of the basic Threshold BIP32 wallet for Schnorr + +- **Estimated Duration:** 1.5 months +- **FTE:** 1.25 FTE +- **Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **2.0a.** | Copyright and Licenses | CC BY 4.0 | +| **2.0b.** | Documentation/Tutorial | As we do not plan on delivering code we will not provide documentation in that sense. The delivered report at the end of this milestone will serve as documentation. | +| **2.0c.** | Methodology | This milestone will be achieved mainly by reading relevant literature as well as internal research discussions. We will make use of our experience and prior work regarding Threshold BIP32 wallets. | +| **2.0d.** | Infrastructure | We expect that all our work and deliverables for this milestone can be reviewed and understood without need for specific infrastructure or software. Access is possible via a web browser. | +| **2.0e.** | Article | We will deliver a report that contains: (1) a description of the security model and definitions, (2) the pseudocode of the cryptographic scheme from Task 2.2 and (3) a brief discussion on the security of our protocol. The article is still mainly for internal use and will be extended during the next tasks. We will make sure that the report is easiliy accessible to the reviewers and the community. | +| **2.1.** | Security Model | We will develop a security model to rigorously analyze Threshold BIP32 wallets for Schnorr. Most likely, this task will be rather easy as the model will be similar to what we have done in our prior works. We will start to sketch the model and security definitions in our report. These definitions may later be adjusted depending on the final scheme. | +| **2.2.** | Protocol Design | We will design the basic protocol for Threshold BIP32 wallets for Schnorr. We will either base our novel protocol on an existing Schnorr threshold scheme or design a threshold Schnorr scheme that is particularly tailored for our use case. We will give a pseudocode description of the protocol as common in cryptographic research. | +| **2.3.** | Protocol Evaluation | We will evaluate our basic protocol with respect to security and efficiency. We will not deliver a full security analysis here as the final protocol may still change during later phases of the project. | + +### Milestone 3 – Extensions for efficiency and security + +- **Estimated Duration:** 2 months +- **FTE:** 1.25 FTE +- **Costs:** 24,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **3.0a.** | Copyright and Licenses | CC BY 4.0 | +| **3.0b.** | Documentation/Tutorial | As we do not plan on delivering code we will not provide documentation in that sense. The delivered report at the end of this milestone will serve as documentation. | +| **3.0c.** | Methodology | This milestone will be achieved mainly by reading relevant literature as well as internal discussions. We will make use of our experience and prior work regarding Threshold BIP32 wallets. We will involve external experts and potential users of our wallet scheme, especially for Task 3.2. | +| **3.0d.** | Infrastructure | We expect that all our work and deliverables for this milestone can be reviewed and understood without need for specific infrastructure or software. Access is possible via a web browser. | +| **3.0e.** | Article | We will extend our report with: (1) the full specification of the Threshold BIP32 protocol for Schnorr signatures and (2) a discussion on why we decided on a particular threat model (see Task 3.2). The report is still mainly for internal use and will be extended during the next tasks. | +| **3.1.** | Efficiency Improvements | In this task, we will focus on efficiency improvements. Most importantly, we will explore the combination with a TVRF as done in our work on ECDSA. If feasible, this will significantly reduce communication and computation complexity. We will also investigate if techniques for de-randomizations can be integrated into our wallet scheme. | +| **3.2.** | Stronger Security Model | In this task, we will investigate stronger security models. In particular, our current construction for ECDSA only supports static corruption. We will explore if this can be strengthened to resist active corruptions. We will also explore various choices for the corruption threshold and what impact it has on efficiency. Finally, we want to investigate the pro-active setting as it can be used for key updates (e.g., in case of key loss or when the threshold is adjusted). We will decide which of these extensions will be integrated into the final specification. Our decision is based mainly on efficiency/practicality concerns as well as input from external experts and potential users. | + +### Milestone 4 – Security analysis + +- **Estimated duration:** 1.5 months +- **FTE:** 1.25 FTE +- **Total Costs:** 18,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **4.0a.** | Copyright and Licenses | CC BY 4.0 | +| **4.0b.** | Documentation/Tutorial | As we do not plan on delivering code we will not provide documentation in that sense. The delivered report at the end of this milestone will serve as documentation. While there is no code or code documentation, we will deliver implementation considerations for developers as part of this milestone. | +| **4.0c.** | Methodology | This milestone will be achieved mainly by compiling and reading relevant literature as well as internal discussions. We will make use of our experience and prior work regarding Threshold BIP32 wallets. | +| **4.0d.** | Infrastructure | We expect that all our work and deliverables for this milestone can be reviewed and understood without need for specific infrastructure or software. Access is possible from a web browser. | +| **4.0e.** | Article | We will extend our report with the security analysis. We will also add an overview of common challenges when implementing threshold cryptography and how to mitigate these attacks. | +| **4.1.** | Security Analysis | We will do a security analysis and a security proof of our construction. The exact threat model and assumptions are based on our work from Milestone 3. We will update the report with a security analysis/proof of our scheme. | +| **4.2.** | Implementation Considerations | We will do research on secure implementations of threshold signature schemes and discuss common pitfalls. There have been multiple incidents in implementations of threshold ECDSA (e.g., missing range checks and validity checks), and we will investigate if similar problems may arise in implementations of our selected threshold Schnorr scheme and our wallet scheme. | + +### Milestone 5 – Finalizing and publication of white paper + +- **Estimated duration:** 0.75 months +- **FTE:** 1.25 FTE +- **Costs:** 9,000 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **5.0a.** | Copyright and Licenses | CC BY 4.0 | +| **5.0b.** | Documentation/Tutorial | As we do not plan on delivering code we will not provide documentation in that sense. | +| **5.0c.** | Methodology | We will achieve this milestone by compiling and polishing the results from all previous milestones. | +| **5.0d.** | Infrastructure |We expect that all our work and deliverables for this milestone can be reviewed and understood without need for specific infrastructure or software. Access is possible from a web browser. | +| **5.0e.** | Article | We will complete the final report and publish it on an archive server. We will prepare a summary article and publish it on our medium blog. If suitable, we will also prepare an academic publication. All articles will contain the following statement in an acknowledgments section: This work was supported by a research grant from the Web3 Foundation.| +| **5.1.** | Whitepaper & Academic Publication | We will polish the report and release it as a white paper on a suitable archive (e.g., the eprint archive or arxiv.org). If suitable, we will also prepare an academic publication. | +| **5.2.** | Medium Article | We will write a medium article that summarize our findings for a broader audience and release it on https://medium.com/perunnetwork | + +## Future Plans + +We will promote our research results with companies building and running wallets within the Polkadot ecosystem. Moreover, we plan to continue our work in the following directions: +- Once the research is completed, we plan to work on the implementation of our cryptographic protocol and offer it as an open source SDK. We hope to fund this via a follow-up grant from the web3 foundation. +- Based on our SDK, we plan integration projects with wallet providers in the Polkadot / Kusama ecosystem. +- We also plan to run multiple threshold servers, where users may outsource parts of their key shares to. This will be offered as part of a freemium service, where the basic functionality is provided for free but extensions (e.g., better usability, key recovery features, support of key hierarchies etc.) may be purchased by the user. + +Finally, we believe that our research on threshold Schnorr signatures may have applications outside of wallets, e.g., to secure the consensus protocol of modern blockchains. + +## Additional information :heavy_plus_sign: + +We were referred to the web3 grant program by web3 cryptographic researchers (Handan Kilinc Alper and Jeff Burdges). We have already successfully completed multiple web3 grants on the Perun state channel framework and are currently collaborating with Ajuna to build a second-layer solution for the Polkadot gaming industry. From 82e8fe3b8b567907b70b8f6d2c9993f77cdd4964 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 12 Sep 2023 20:02:43 +0200 Subject: [PATCH 607/665] Update index.md add Distributed Cryptography for Polkadot Wallets --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 38cce1cd626..64937111be9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -67,6 +67,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Eiger](https://www.eiger.co/) | [MoveVM Substrate Pallet, part 2](./Substrate_Move_System_Pallet_2.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Rust Syndicate x Decentration](https://www.decentration.org/) | [XCMSend](./xcmsend.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | | [Off Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo Parachain Support](./tuxedo_parachain.md) | [GitHub](https://github.com/Off-Narrative-Labs) | ☐ | ☐ | ☐ | +| [PolyCrypt GmbH](https://polycry.pt) | [Distributed Cryptography for Polkadot Wallets](./distributed_cryptography_for_polkadot_wallets.md) | [GitHub](https://github.com/perun-network) | ☐ | ☐ | ☐ | [🔝](#2023) From 376e6e4070c0089368ce6a2107198cf6266e14a0 Mon Sep 17 00:00:00 2001 From: Open Smart Contract <134966398+OpenSmartContract@users.noreply.github.com> Date: Tue, 12 Sep 2023 11:51:30 -0700 Subject: [PATCH 608/665] ISO20022 PoC (#1940) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Sebastian Müller Co-authored-by: S E R A Y A Co-authored-by: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Co-authored-by: OpenSmartContract <> --- applications/ISO20022.md | 171 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 applications/ISO20022.md diff --git a/applications/ISO20022.md b/applications/ISO20022.md new file mode 100644 index 00000000000..df81129390d --- /dev/null +++ b/applications/ISO20022.md @@ -0,0 +1,171 @@ +# ISO20022 PoC + +- **Team Name:** Open Smart Contract +- **Payment Address:** 3GTe5ArJLC8jesr6UFtB9kcoguQmvo8Cuo (BTC) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview + +Response to [RFP 20022](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/ISO_20022.md) + +Cross-border payment example as proof of concepts, leveraging the unique [Off-Chain Features of Substrate](https://docs.substrate.io/v3/concepts/off-chain-features/) that show the advantages of using [ISO20022](https://www.iso20022.org/) together with Substrate. + +### Overview +The project is an [ISO20022](https://www.iso20022.org/) based cross-border payment proof of concepts implemented with Substrate off-chain computation and indexed data storage. + +ISO (International Organization for Standardization) 20022 is becoming the de facto global data standard for payments and electronic data interchange already adopted by many countries. However the ISO20022 are all about centralized fiat based payment rails among privileged global financial institutions. + +Blockchain based decentralized payment solutions can provide efficiency, low latency and cost savings potentially benefiting billions of users worldwide. There are ledger based currency exchange and remittance network such as the real-time gross settlement system from Ripple Labs Inc. yet it is permissioned, centralized and not capable of cross chains. + +Polkadot, with its multi-chain architecture, security and cross chain interoperability, is uniquely positioned to support ISO20022 compliant global payments. This project is a Proof of Concepts to understand what it takes for Dotsama ecosystem to support a cross-border payment use case, leveraging on XCM, OCW and Substrate pallets, challenges and recommendations. + + +### Project Details + +- Mockups/designs of any UI components + - Use Contracts-UI (or Polkadot.js) UI interface to interact with deployed smart contracts + +- Data models / API specifications of the core functionality + - ISO20022 XML data models that captures essential ISO20022 cross-border payment metadata + - ISO20022 data types to XCM mappings with custom data types if gaps + - Data securely stored off chain, indexed for queries + - ISO20022 messaging and payment events and stats + - Persisted off chain data storeage fo performance benchmarks, throughput, gas fees, binary size, payment latency and costs + +- An overview of the technology stack to be used + - Substrate off chain workers to process compute intensive tasks such as ISO20022 message wrangling + - Substrate off chain storage / indecing to persist string heavy ISO20022 messages + - ISO20022 messages parsing / mapping / processing using OCWs + - Substrate XCM frame pallet with transport methods for ISO20020 messaging + - Custom OCWs to support cross-border payment use case with message, events, stats and payment flow query capabilities + - Optional off chain connected cloud storage and HTTP requests +- Documentation of core components, protocols, architecture, etc. to be deployed + - Published article documenting detailed analysis of what it takes to support ISO20022 compliant cross-border payments on Dotsama blockchains + - Custom pallet(s) implementing cross-border payment logic + - Off chain worker logic processing compute and storage intensive payment processings + - Mapping from cross-border ISO20022 messages to XCM and XCMP messaging + - ISO20022 messages, payment history, events and stats, stored off chian with indexes for queries + - Gaps identified and solution recommendations + - Substrate based Dotsama blockchain as testnet to deploy sandbox +- PoC/MVP or other relevant prior work or research on the topic + - Our research shows that many challenges exist to support ISO20022 compliant cross border payment use case + - A traditional ISO20022 cross border payment means multiple transactions in various ISO20022 message types, with multiple hops among financial entities inter-connected via custom agreements / fee structures / sfovereign regulations, with no standards + - ISO20022 and XCM are at different granularies with a single cross-border payment mapping to a set of XCM messages with flow logic + - ISO20022 payment transactions have different fees / charges based on many factors + - Traditional cross-border payments on fiat rails do not have blockchain "gas fee" concept + - Data type incompatibilities between IS20022 and XCM, such as date and time, currency, float, array, etc. + - No out of box support of XML data processing and mapping such as XSD transformations + - No native foreign exchange / currency conversion support + - XCVM with instruction set for XCMP messaging is a totally different paradigm as compared to traditional message passing + - No existing gas light solution to handle compute intensive and indexable data storage for off chain payment processing + +- What your project is _not_ or will _not_ provide or implement + - This is not a complete cross border payment system given the scope of proof of concepts + - Likely this is the first ISO20022 project on Dotsama, there could be unexpected gaps discovered + - This project is not a full blown IS20022 implementation on Dotsama / Substrate but explore to expose gaps for future endeavors + - This project is not about payment identity / KYC / AML solutions + - This milestone is all about understanding what it takes to support ISO20022 compliant cross-border payments on Dotsama, not implementations which could come later with more clarity coming out of this project + +### Ecosystem Fit + +- Where and how does your project fit into the ecosystem? + - According to the RDP: "The goal of this RFP is to find teams that implement tools that make it easy and possible for the traditional finance industry to leverage Substrate and ink! smart contracts to interact with ISO 20022 in various ways" +- Who is your target audience (parachain/dapp/wallet/UI developers, designers, your own user base, some dapp's userbase, yourself)? + - Targeting ecosystem developers to leverage on the learning and tools to further develop ISO20022 compatible dApps, to make it possible for transitional financial institutions to interoperate with Polkadot / Kusama / Substrate blockchains based payment apps. +- What need(s) does your project meet? + - Explore possibilities and gaps of Polkadot / Substrate support of ISO20022 standard for future improvements +- Are there any other projects similar to yours in the Substrate / Polkadot / Kusama ecosystem? + - If so, how is your project different? + - If not, are there similar projects in related ecosystems? There are known blockchains already claim to support ISO20020 such as Ripple XRP, XLM, Algorand, etc. + +## Team + +### Team members + +- Name of team leader: Daniel Deng +- Consultants with ISO20022 and cross-border domain expertise + +### Contact + +- **Contact Name:** Daniel Deng +- **Contact Email:** OpenSmartContract@gmail.com + +### Legal Structure + +- **Registered Address:** No registred entity +- **Registered Legal Entity:** No registred entity + +### Team's experience + +Daniel is the Chief Product Officer at HeroDAO where he has led blockchain based smart contract products and development on Polkodot / Kusama blockchains. Previously at Meta he managed crypto (Libra / Diem) and fiat payments and web3 initiatives. Prior to that, he was Senior Director of Product Management at Visa managing Visa's global payment product portfolios and platforms. + +The project to add consultants from fintech / banks / financial institutions with relevant domain expertise in ISO20022 and cross-border payments. + +Here's a recent [Medium article](https://medium.com/@opensmartcontract/learn-ink-by-example-order-food-on-blockchain-a4024b2dee4a) on ink! smart contract with Rust macros implementing dApp on Dotsama chain, with [Smart Contract Deployment and Interaction Guide using Contracts-UI and Polkadot.js](https://github.com/InkSmartContract/BlockchainFoodOrder/blob/main/BlockchainFoodOrder%20Smart%20Contract%20Deployment%20and%20Interactions%20Guide.pdf). + +### Team Code Repos +- [Order Food on the Blockchain](https://github.com/InkSmartContract/BlockchainFoodOrder) + +Please also provide the GitHub accounts of all team members. +- [GitHub1](https://github.com/OpenSmartContract) +- [Github2](https://github.com/FPLeader) + +### Team LinkedIn Profiles (if available) +- [Profile](https://www.linkedin.com/in/dengdaniel) + +## Development Status + +- [Blockchain Food Order dApp](https://github.com/InkSmartContract/BlockchainFoodOrder/blob/main/Learn%20ink!%20by%20Example%20%E2%80%94%20Order%20Food%20on%20the%20Blockchain.pdf) +- [Smart Contract Deployment and Interaction Guide using Contracts-UI and Polkadot.js](https://github.com/InkSmartContract/BlockchainFoodOrder/blob/main/BlockchainFoodOrder%20Smart%20Contract%20Deployment%20and%20Interactions%20Guide.pdf) + +## Development Roadmap + +### Overview + +- **Estimated duration:** ~1-2 months +- **FTE:** 1,2 +- **Costs:** 25K USD + +### Milestone 1 + +- **Estimated duration:** ~1-2 months +- **FTE:** 1,2 +- **Costs:** 25K USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | Design documents with details on what it takes for Polkadot/Substrate to support ISO20022 messages, gaps and solution recommendations | +| 1. | Design the use case | Design an ISO20022 cross border payment use case with persona, end-to-end flow | +| 2. | Identify ISO20022 message types and examples for X-border payment | Specify all ISO20022 message types with examples for cross border payment, including reference data fields | +| 3. | Map ISO20022 <> XCM messages | Map ISO20022 cross-border payment message types to a set of XCM messages with processing logic, including identifying data type incompatibilities between IS20022 and XCM, replacement data types and necessary XML transformations | +| 4. | Map ISO20022 <> XCMP | Map ISO20022 cross-border payment messageing to XCMP for cross parachains transport| +| 5. | Specify off chain data storage | Specify off chain data structure, storage and indexes for ISO20022 messages, payments, events, stats| +| 6. | Specify off chian worker logic | Specify OCW logic for ISO20022 message processing, payment flow, error handling| +| 7. | Specify Substrate pallets | Specify custom pallet(s) to implement X-border payments and OCW integrations| +| 8. | Recommend blockchain gas fees handling in ISO20022 framework | Recommend solution how to fulfill blockchain gas fees in ISO20022 framework | +| 8. | Recommend how to implement ISO20022 cross-border charges & fees | Recommend solution how to implement ISO20022 cross-border payment inter-bank / X-border payment charges and fees | +| 9. | Specify query of ISO20022 messages and transactions | Specify query interface to retrieve selected ISO20022 messages and transactions| +| 10. | Publication to share with the broader community and get additional feedback | Medium article covering: 1) feasibility and comparative advantages of Substrate based ISO20022 compliant cross-border payments on Dotsama chain; 2) benefits of such a solution in contrast to traditional centralized cross-border payments; 3) recommendation of future works towards a scalable, performant and cost effective solution supporting ISO20022 on Polkadot/Kusama chains and beyond. | + +## Future Plans + +- Publish learning and share with the community, similar to this [ Medium article](https://medium.com/@opensmartcontract/learn-ink-by-example-order-food-on-blockchain-a4024b2dee4a) and/or [Contracts-UI and Polkadot.js Smart Contract Deployment and Interaction Guide](https://github.com/InkSmartContract/BlockchainFoodOrder/blob/main/BlockchainFoodOrder%20Smart%20Contract%20Deployment%20and%20Interactions%20Guide.pdf) +- Long term we intend to expand this ISO20022 PoC to: + - develop reusable tools / features to bring ISO20022 compliant payments to the Dotsama ecosystem + - Bring Polkadot / Kusama chains up to speed with Ripple XRP / XLM / Algorand / etc. on ISO20022 support + - Onramp transitional financial institutions worldwide to blockchain enabled cross border payments + - Leverage Dotsama's unique off chain computing, storage and connections (cloud, HTTP) capabilities to scale web3 dApps + - Support ISO20022 MX messages via Polkadot XCMP, and possible integration with IBC (Inter-Blockchain Communications) + - Future milestones implementing the use case with workload estimation with insights from this initial milestone + +## Referral Program (optional) + +You can find more information about the program [here](../README.md#moneybag-referral-program). +- **Referrer:** N/A +- **Payment Address:** N/A + +## Additional Information + +**How did you hear about the Grants Program?** Web3 Foundation Website and previous work interactions From 904861baa7c16ae64268da1cda0cd50e8cc446bb Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 13 Sep 2023 09:45:20 +0200 Subject: [PATCH 609/665] Update index.md add OpenSmartContract --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 64937111be9..532d16f96ce 100644 --- a/applications/index.md +++ b/applications/index.md @@ -68,6 +68,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Rust Syndicate x Decentration](https://www.decentration.org/) | [XCMSend](./xcmsend.md) | [GitHub](https://github.com/decentration) | ☐ | ☐ | ☐ | | [Off Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo Parachain Support](./tuxedo_parachain.md) | [GitHub](https://github.com/Off-Narrative-Labs) | ☐ | ☐ | ☐ | | [PolyCrypt GmbH](https://polycry.pt) | [Distributed Cryptography for Polkadot Wallets](./distributed_cryptography_for_polkadot_wallets.md) | [GitHub](https://github.com/perun-network) | ☐ | ☐ | ☐ | +| [Open Smart Contract](https://github.com/OpenSmartContract) | [ISO20022 PoC](./ISO20022.md) | [GitHub](https://github.com/OpenSmartContract) | ☐ | ☐ | ☐ | [🔝](#2023) From 6c9b16f1862eca391049b9d3ef3d79d4e7576daa Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 13 Sep 2023 09:48:15 +0200 Subject: [PATCH 610/665] fix website --- applications/ISO20022.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/ISO20022.md b/applications/ISO20022.md index df81129390d..fe5926a0662 100644 --- a/applications/ISO20022.md +++ b/applications/ISO20022.md @@ -139,8 +139,8 @@ Please also provide the GitHub accounts of all team members. | **0b.** | Documentation | Design documents with details on what it takes for Polkadot/Substrate to support ISO20022 messages, gaps and solution recommendations | | 1. | Design the use case | Design an ISO20022 cross border payment use case with persona, end-to-end flow | | 2. | Identify ISO20022 message types and examples for X-border payment | Specify all ISO20022 message types with examples for cross border payment, including reference data fields | -| 3. | Map ISO20022 <> XCM messages | Map ISO20022 cross-border payment message types to a set of XCM messages with processing logic, including identifying data type incompatibilities between IS20022 and XCM, replacement data types and necessary XML transformations | -| 4. | Map ISO20022 <> XCMP | Map ISO20022 cross-border payment messageing to XCMP for cross parachains transport| +| 3. | Map ISO20022 - XCM messages | Map ISO20022 cross-border payment message types to a set of XCM messages with processing logic, including identifying data type incompatibilities between IS20022 and XCM, replacement data types and necessary XML transformations | +| 4. | Map ISO20022 - XCMP | Map ISO20022 cross-border payment messageing to XCMP for cross parachains transport| | 5. | Specify off chain data storage | Specify off chain data structure, storage and indexes for ISO20022 messages, payments, events, stats| | 6. | Specify off chian worker logic | Specify OCW logic for ISO20022 message processing, payment flow, error handling| | 7. | Specify Substrate pallets | Specify custom pallet(s) to implement X-border payments and OCW integrations| From 5ce4aa6c3da06f79c1a0dcf8519a34c7338e5d77 Mon Sep 17 00:00:00 2001 From: Nikhil W3F <142136841+nikw3f@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:52:10 +0200 Subject: [PATCH 611/665] Update index.md (#1968) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 532d16f96ce..204176a0bf5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -58,7 +58,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [P2P.ORG](http://p2p.org/) | [P2P data platform](data_platform_with_deep_indexed_data_and_staking_reports.md) | [GitHub](https://github.com/p2p-org) | ☐ | ☐ | ☐ | | [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☐ | ☐ | | [Stake Plus Inc](https://stake.plus) | [Treasury Tracker](TreasuryTracker.md) | [GitHub](https://github.com/stake-plus) | ☐ | ☐ | ☐ | -| [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☐ | ☐ | +| [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | | [Infra3](https://network.infra-3.xyz) | [Hyperdot - Powerful data analysis and creations platform](Hyperdot.md) | [GitHub](https://github.com/Infra3-Network/hyperdot) | ☐ | ☐ | ☐ | | [David Semakula](https://github.com/davidsemakula) | [ink! analyzer (phase 2)](ink-analyzer-phase-2.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☐ | ☐ | | [Myriad Systems LTD.](https://myriad.social/) | [Myriad Social](myriad_social.md) | [GitHub](https://github.com/myriadsocial/myriad-node) | ☐ | ☐ | ☐ | From 1a4d2dbf62c12297cddd65da116cd660c357e9f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 13 Sep 2023 14:18:17 +0200 Subject: [PATCH 612/665] Update index.md Dotflow completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 204176a0bf5..7f921fa3c2e 100644 --- a/applications/index.md +++ b/applications/index.md @@ -97,7 +97,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☒ | ☐ | | [Nikita Orlov PR](https://github.com/stringnick) | [Faucet chat based bot](faucet-bot.md) | [GitHub](https://github.com/stringnick) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal Saas Pricing](societal_saas_pricing.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | -| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☐ | +| [MASTER UNION LLC.](https://github.com/TheDotflow) | [Dotflow](Dotflow.md) | [GitHub](https://github.com/TheDotflow) | ☐ | ☒ | ☒ | | [Antier Solutions](https://www.antiersolutions.com/) | [RFP/securityMarketPlace](Security_Marketplace.md) | [GitHub](https://github.com/ParthChaudhary31) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☒ | ☒ | | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☒ | ☒ | From 3c4884f712992ea3e3fe9cae5506c740f228733b Mon Sep 17 00:00:00 2001 From: Jafar <107645336+JafarAz@users.noreply.github.com> Date: Wed, 13 Sep 2023 15:03:11 +0100 Subject: [PATCH 613/665] Update CosmWasmVM-CoreProduct.md (#1890) * Update CosmWasmVM-CoreProduct.md * Update CosmWasmVM-CoreProduct.md * Update CosmWasmVM-CoreProduct.md --- applications/CosmWasmVM-CoreProduct.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/applications/CosmWasmVM-CoreProduct.md b/applications/CosmWasmVM-CoreProduct.md index ee82ff985e8..7cc754b3fba 100644 --- a/applications/CosmWasmVM-CoreProduct.md +++ b/applications/CosmWasmVM-CoreProduct.md @@ -83,8 +83,8 @@ We are the only team in the Substrate/Polkadot/Kusama ecosystem implementing Cos ### Team members -- Name of team leader: Hussein Ait-Lahcen -- Names of team members: Cor Pruijs, Abduallah Eryuzlu +- Name of team leader: Blas Rodriguez +- Names of team members: Dzmitry Lahoda, Kostya Kastsevich ### Contact @@ -105,9 +105,9 @@ We are the only team in the Substrate/Polkadot/Kusama ecosystem implementing Cos ### Team's experience -- Hussein Ait Lahcen: Principal Blockchain engineer at Composable Finance -- Abdullah Eryuzlu: Substrate Rust engineer at Composable Finance -- Cor Pruijs: Software engineer at Composable Finance +- Blas Rodriguez: CTO at Composable Finance +- Dzmitry Lahoda: Senior staff engineer at Composable Finance +- Kostya Kastsevich: Parachain Lead at Composable Finance ### Team Code Repos @@ -115,15 +115,13 @@ We are the only team in the Substrate/Polkadot/Kusama ecosystem implementing Cos GitHub accounts of all team members: -- https://github.com/hussein-aitlahcen -- https://github.com/aeryz -- https://github.com/cor +- https://github.com/blasrodri +- https://github.com/dzmitry-lahoda +- https://github.com/kkast ### Team LinkedIn Profiles (if available) -- https://tr.linkedin.com/in/abdullah-eryuzlu-675611182 -- https://fr.linkedin.com/in/hussein-a-967810a7 -- https://nl.linkedin.com/in/corpruijs +- https://ar.linkedin.com/in/blas-rodriguez-irizar ## Development Status :open_book: https://medium.com/supercolony/a-look-into-virtual-machines-and-smart-contract-runtimes-313cd7d494e3 @@ -132,7 +130,7 @@ https://medium.com/supercolony/a-look-into-virtual-machines-and-smart-contract-r ### Overview -- **Total Estimated Duration:** 11 Weeks +- **Total Estimated Duration:** February 2023 - September 2023 - **Full-Time Equivalent (FTE):** 1,5 FTE - **Total Costs:** 29,700 USD From 46fbb3559050b58dad1661986b2b88108026ef7f Mon Sep 17 00:00:00 2001 From: Oleksandra Burmenska Date: Thu, 14 Sep 2023 08:27:37 +0200 Subject: [PATCH 614/665] DAOsign (#1770) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * DAOsign application Create a DAOsign application file  * Delete DAOsign * Create DAOsign.md Project description update * Update DAOsign.md Adding an information about project purpose * Update DAOsign.md Add info about team members * Update DAOsign.md Adding milestone details * Update DAOsign.md Polkadot address update * Update DAOsign.md * Update DAOsign.md * Update DAOsign.md * Update DAOsign.md Project description details * Update DAOsign.md Update the roadmap * Update DAOsign.md * Update DAOsign.md * Update DAOsign.md * Update DAOsign.md * Update DAOsign.md Final iteration with Ramil. * Update DAOsign.md * Update DAOsign.md provide the requested information * Update DAOsign.md minor updates to the application: - license info - reusing brush-contracts info included * Update DAOsign.md Updated a license information and added an example of the smart contracts * update * correct name of the pallet * update deliverables to deploy to Astar testnet fix typos * update m2 deliverables * Update DAOsign.md updated a registered address * Update applications/DAOsign.md Co-authored-by: S E R A Y A * add UI design * add link to Proof technical design * * added description for Off-chain Relayer * realign milestones cost * updated seq diagram * Update applications/DAOsign.md Co-authored-by: S E R A Y A * add docker to m2 * added relayer as a separate milestone 3 --------- Co-authored-by: ramil Co-authored-by: S E R A Y A --- applications/DAOsign.md | 243 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 243 insertions(+) create mode 100644 applications/DAOsign.md diff --git a/applications/DAOsign.md b/applications/DAOsign.md new file mode 100644 index 00000000000..6410e337604 --- /dev/null +++ b/applications/DAOsign.md @@ -0,0 +1,243 @@ +# DAOsign + +- **Team Name:** DAOsign +- **Payment Address:** 13s3c37rwrZfa8WQcZPdqE1zi1hGAguf2TWfWMr8f5aLBrg +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + + +### Overview + +DAOsign is a decentralized platform for agreements and policies with publicly verifiable and authorized cryptographic proofs and Governance Automation, designed for DAOs. +Traditional methods of signing agreements, such as paper-based systems or legacy e-signatures, are prone to fraud and lack transparency, and offer no solution for verification of the signer's identity or signer’s authority to execute the agreement. Instead these systems rely on costly legal proceedings for enforce agreements. + +DAOsign provides publicly verifiable cryptographic proofs; secure, transparent and automated processing of complex Agreements and Policies. + +Furthermore, DAOsign provides robust Governance and Policy Builder platform to provide governance, workflow automation and controls for organization policies and procedures. + +### Project Details +A project goal is to store Agreements Proofs on Polkadot chain using Ink! smart contracts. + + +Deliveries include DAOsign platform with an ability to: +- create agreements including generating using ChatGPT (already implemented on our platform, currently available on our [testnet](https://testnet.daosign.org/) +- add and remove signers and observers of different levels of anonymity +- allow signing the documents with further storing of signature proofs on Astar testnet blockchain. + + +**Core DAOsign components** + +Screenshot 2023-05-27 at 16 51 43 + + +**Technical design** + +Proofs are implemented in the EIP-712 standard and adjusted to ink! ecosystem. Proofs digned using user’s EVM private key. +We are supporting this standard in Ink! smart contract to be able to verify the signature in ink! smart contract. +Also, we are implementing an adjusted EIP-2771 standard to allow Agreement Signers gas-free delegation to publish proof on-chain. +EIP-712 standard will be used for proofs, adaptation means that user data is converted to a binary bit; we use its hash (serialization vs deserialization) +And EIP-2771 standard - to securely send the proof and receive it. +So that EVM standards will be adapted to ink! ecosystem requirements. +Example (interfaces) of the smart contracts can be found here https://github.com/DAOsign/daosign-smart-contracts (Solidity version). + + +Detailed storyboard can be found here: https://consideritdone.storiesonboard.com/m/PUCLDvQC4kKwoRJ8kbm3MA . + +**Off-chain Relayer** + +Relayer is an off-chain component that accepts transaction (with EIP-712 signature from Metamask) from user, +signs it and sends to the network. This app will be developed using following technology stack: + +* Typescript/NodeJS +* express.js +* polkadot.js + +**Architectural diagram** + +![DAOsign_ Storing proofs using Ink!](https://github.com/Burmenska/Grants-Program/assets/1008882/297093a0-200a-4f78-babb-04ad6314fb35) + +**Definitions**: +* **Creator**: Author of agreement, define agreement content, signers +* **Signer**: Participant (Signer) of the agreement. Signs and sends transactions to a Relay +* **Relayer**: Receives signed requests off-chain from Signers and pays gas to turn it into a valid transaction that goes through a Trusted Forwarder +* **Trusted Forwarder**: A contract trusted by the Recipient to correctly verify signatures before forwarding the request from Signers +* **AgreementProof**: A contract that holds metadata and proofs for agreement.er + + +Agreement Proof entity represent 3 proofs: +* Proof of signature +* Proof of authority +* Proof of agreement + +The detailed Proof Technical Design is [here](https://github.com/w3f/Grants-Program/files/12183424/Proofs.Technical.Design.-.DAOSign.pdf) + +**UI Design** + +In Milestone 2 we have a frontend delivery. Here list of wireframes/designs with comments: + + +1. Adding toggle to allow store Agreement Proof on-chain (toggle above Sign Agreement button) +![Store proofs 0](https://github.com/w3f/Grants-Program/assets/1008882/40f89bfa-50fc-4944-8a64-af84337b713a) + +2. Enable that toggle and select Parity network from dropdown + +![Store proofs 1](https://github.com/w3f/Grants-Program/assets/1008882/87894c58-bc30-4e48-b74b-3eabfcad2779) + +3. After user click `Sign Agreement` and execute transaction, we show `On-chain Proof` transaction hash on Information panel +![Store proofs 6](https://github.com/w3f/Grants-Program/assets/1008882/88dfed66-5f88-4658-88b4-8a6198060de9) + + +### Ecosystem Fit + +DAOsign fit the Governance category and since, Polkadot and Kusama are designed to be community-driven networks that allow for decentralized governance. DAOsign can fit into this ecosystem by providing a platform for DAOs to manage their decision-making processes in a decentralized manner. +Our target audience is not only DAOs, but also all the companies, who have a need to deal with the agreement/policies management including the use case for managing Grants, that was presented to you during our introdution call. +Competitors analysis can be found here: https://docsend.com/view/sbexkxn5su3ahdg8 . Particularly in Substrate / Polkadot / Kusama ecosystems we are not aware about any tools, that provide exactly the same functionality. + + +## Team :busts_in_silhouette: + +### Team members + +- Team Leader, Founder: Eugene Fine https://github.com/ConsiderItDone, +- Solution Architect: Ramil Amerzyanov https://github.com/ramilexe +- Blockchain / Tech lead: Misha Kushka https://github.com/kushkamisha +- Director of Buisiness development and Partnerships: Oleksandra Burmenska https://github.com/burmenska + + + +### Contact + +- **Contact Name:** Eugene Fine +- **Contact Email:** eugene@daosign.org +- **Website:** daosign.org + +### Legal Structure + +- **Registered Address:** 2468 Brian Dr. Northbrook, IL 60062 +- **Registered Legal Entity:** DAOSIGN, LLC + +### Team's experience +**Eugene Fine:** CEO, Founder +Background: +Over 20 years of building, scaling, and managing technology organizations. Past experience: +- CTO for https://www.explorersurgical.com +- tech leadership contribution to https://bird.coach +- tech advisor and facilitator for polywrap.io +to name a few. +Also, Eugene is a founder at consideritdone.tech and daosign.org + +**Ramil Amerzyanov:** Solution Architect, CTO +Background: +12+ years in building complex enterprize solutions (all SDLC aspects), including 7+ years in Blockchain industry. +Past projects include: +- contribution to Ethereum standards development +- tech leadership for https://docsend.com/view/fjrvjtyzgm7wgrkj projects + +**Oleksandra Burmenska:** Director of Business Development and Partnerships +Background: +Engineering, MBA, and Psychology diplomas. Over a decade of experience in IT: development and managerial positions, last five years focused on the Blockchain industry. +Experience with enterprises and startup companies, scaling teams, and building blockchain products. +Previous blockchain projects include: +- successfully managed ICOs during 2017-2019 (example: Õpet – Medium ) +- contribution to Polywrap, NEAR, Axelar, GnosisSafe, Avalanche ecosystems +- contribution to nodle.com ecosystem: managing the block explorer development (before it moved to Subscan), leading the Landslide - Avalanche subnet development,etc. + +**Misha Kushka**: Tech Lead and Blockchain Developer +Background: 6+ years of professional experience as a developer, 4+ years of professional experience in the Blockchain field, 4+ years experience as a lead + +### Team Code Repos + +- https://github.com/ConsiderItDone +- https://github.com/DAOsign + +Please also provide the GitHub accounts of all team members. If they contain no activity, references to projects hosted elsewhere or live are also fine. + +- [Eugene Fine](https://github.com/ConsiderItDone) +- [Ramil Amerzyanov](https://github.com/ramilexe) +- [Oleksandra Burmenska](https://github.com/Burmenska) +- [Misha Kushka](https://github.com/kushkamisha) + +### Team LinkedIn Profiles (if available) + +- [Eugene Fine](https://www.linkedin.com/in/eugenefine/) +- [Ramil Amerzyanov](https://www.linkedin.com/in/ramil-amerzyanov/) +- [Oleksandra Burmenska](https://www.linkedin.com/in/oleksandra-burmenska/) +- [Misha Kushka](https://www.linkedin.com/in/mkushka/) + + +## Development Status :open_book: + +We are currently working on a tech demo (kind of a pre-beta version) and non-blockchain version of DAOsign is available here: https://testnet.daosign.org + +## Development Roadmap :nut_and_bolt: + +## Overview + +* **Total Estimated Duration:** 2 months +* **Full-Time Equivalent (FTE):** 2 FTE +* **Total Costs:** 48,100 USD + +### Milestone 1 - Smart Contract Development + +* **Estimated Duration:** 4 weeks +* **FTE:** 2 +* **Costs:** 24,050 USD + + +| Number | Deliverable | Specification | +|-------:|---------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can use DAOsign Smart Contract developed in ink! for proof verification. | +| 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** that explains what was done as part of the grant. And we will publish a series of articles that explains how DAOsign works from a high-level perspective. The content of the articles will be consistent with the functions at this stage. | +| 1. | Smart Contracts | DAOsign Smart Contract repo that includes following components: Agreement Contract, EIP712/EIP2771 standard implementation on Ink!. These smart contracts can be deployed to any substrate chain with contracts-pallet. | | + + +### Milestone 2 - DAOsign Application integration + +* **Estimated Duration:** 2 weeks +* **FTE:** 2 +* **Costs:** 12,025 USD + + +| Number | Deliverable | Specification | +|-------:|---------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. | +| 0d. | Docker | Dockerfile(s) provided in Milestone 1 will be used to test all the functionality delivered with this milestone. | +| 1. | DAOsign Ink! JS SDK | We will publish a npm/yarn package with the logic how to interact with Smart Contract from JS | +| 2. | DAOsign Application Integration | Integrate DAOsign application using SDK. DAOsign application (which is not part of this grant) will be open sourced as well. DAOsign is written using ReactJS on frontend and Typescript on backend | + + +### Milestone 3 - Relayer Development + +* **Estimated Duration:** 2 weeks +* **FTE:** 2 +* **Costs:** 12,025 USD + + +| Number | Deliverable | Specification | +|-------:|---------------|------------------------------------------------------------------------------------------------------------------------------------------------| +| 0a. | License | Apache 2.0 | +| 0b. | Documentation | We will provide both inline documentation of the code and a basic tutorial that explains how a user can run Relayer and broadcast transactions | +| 0c. | Testing Guide | Core functions will be fully covered by unit tests to ensure functionality and robustness. | +| 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Gas Relayer | Off-chain component for relaying transactions. Will be developed on Typescript/NodeJS using polkadot.js library | + + + +## Future Plans + +After the `ink!` version of the DAOsign protocol stack is fully tested, we would like to implement a `pallet` version for Polkadot ecosystems. Anyone who is integrating it can communicate with other ecosystems conveniently. + +Add support for multi-chain proof verification using [XCM](https://wiki.polkadot.network/docs/learn-xcm) and [IBC](https://ibcprotocol.org/) protocols. + + +## Additional Information :heavy_plus_sign: + +**How did you hear about the Grants Program?** + +By recommendation of Richard Casey from Parity. From 492875d8ac1a542da7e71131ee1b065694591a7c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 14 Sep 2023 08:32:09 +0200 Subject: [PATCH 615/665] Update index.md Add DAOsign --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 7f921fa3c2e..557e10f0057 100644 --- a/applications/index.md +++ b/applications/index.md @@ -69,6 +69,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Off Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo Parachain Support](./tuxedo_parachain.md) | [GitHub](https://github.com/Off-Narrative-Labs) | ☐ | ☐ | ☐ | | [PolyCrypt GmbH](https://polycry.pt) | [Distributed Cryptography for Polkadot Wallets](./distributed_cryptography_for_polkadot_wallets.md) | [GitHub](https://github.com/perun-network) | ☐ | ☐ | ☐ | | [Open Smart Contract](https://github.com/OpenSmartContract) | [ISO20022 PoC](./ISO20022.md) | [GitHub](https://github.com/OpenSmartContract) | ☐ | ☐ | ☐ | +| [DAOsign](https://daosign.org/) | [DAOsign](./DAOsign.md) | [GitHub](https://github.com/DAOsign) | ☐ | ☐ | ☐ | [🔝](#2023) From efa621f6346c1a331c9d2da24558dd1e4e3930c8 Mon Sep 17 00:00:00 2001 From: Noc2 Date: Thu, 14 Sep 2023 08:39:38 +0200 Subject: [PATCH 616/665] fix website --- applications/DAOsign.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/DAOsign.md b/applications/DAOsign.md index 6410e337604..bcfee2b6f94 100644 --- a/applications/DAOsign.md +++ b/applications/DAOsign.md @@ -28,7 +28,7 @@ Deliveries include DAOsign platform with an ability to: **Core DAOsign components** -Screenshot 2023-05-27 at 16 51 43 +Screenshot 2023-05-27 at 16 51 43 **Technical design** From eab3945d0be337a29524e3f41cc07db8468d6d6f Mon Sep 17 00:00:00 2001 From: ainhoa-a <95368257+ainhoa-a@users.noreply.github.com> Date: Thu, 14 Sep 2023 10:02:24 +0200 Subject: [PATCH 617/665] PoC Polkadot Conformance Tests (#1956) * hybrid node research grant proposal * Create polkadot_tests.md * Update polkadot_tests.md removed URL to PR from previous grant * Update polkadot_tests.md Correct level format --- applications/polkadot_tests.md | 151 +++++++++++++++++++++++++++++++++ 1 file changed, 151 insertions(+) create mode 100644 applications/polkadot_tests.md diff --git a/applications/polkadot_tests.md b/applications/polkadot_tests.md new file mode 100644 index 00000000000..f912d7a713b --- /dev/null +++ b/applications/polkadot_tests.md @@ -0,0 +1,151 @@ +# Polkadot Conformance Tests PoC + +- **Team Name:** Zondax AG +- **Payment Address:** (DAI ERC 20) 0xf50a09731dc32a64431920e10e1e58dce28e6b11 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + + +## Project Overview :page_facing_up: + +This grant application falls under this [RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/polkadot-protocol_conformance_tests.md) and it aims +to develop a comprehensive test suite dedicated to assessing the compliance of Host implementations against the official Polkadot Protocol Specification. + +### Overview + +The reliability and security of the Polkadot network are fundamentally contingent upon the flawless implementation of Hosts/Nodes. At present, +Substrate and Smoldot (implemented in Rust) +are actively used in production, while Gossamer (in Go) and Kagome (in C++) are undergoing advanced stages of development. +Our primary objective is to develop a comprehensive test suite dedicated to assessing the compliance of Host implementations +against the official Polkadot Protocol Specification. + +### Project Details + +Our objective will consist of developing a proof of concept for a test suite that can be run across various host implementations and executors. + +In this initial phase, we will concentrate on a few different points: + +- [Host API: cryptography primitives](https://spec.polkadot.network/chap-host-api#sect-crypto-api) +- [Trie proof verification](https://spec.polkadot.network/chap-host-api#sect-trie-api) +- [Scale encoding and decoding](https://spec.polkadot.network/id-cryptography-encoding#sect-scale-codec) + +The objective is to ensure conformance with the existing specifications and highlight possible deviations. +Moreover, we will organize the PoC in such a way that conformance reports can be generated after each run. + + +#### Technology and Languages + +We aim to develop this in Python or Typescript. We will investigate but at the moment, we see a much wider ecosystem in Python. + +Althoug previous work on this area has been developed in Julia, Python holds several advantages over Julia due to its extensive ecosystem, wide community support, and versatility. + +Python is also known for its cross-platform compatibility, facilitating the development of cross-platform applications. +Its ease of integration with other languages like C/C++ and Java enables the creation of applications with mixed-language components. + +There is some previous work that has been done [here](https://github.com/w3f/polkadot-tests) in Julia we plan to re-use some part of this work, rewrite it, updated it and confront it +against current specification since his code has not been updated since February 2023. + + +### Ecosystem Fit + +Zondax is a growing and distributed team with experience and projects for more than 50 blockchains. +Zondax has been contributing to the Substrate ecosystem since 2018-2019. The team has received and completed a large number of W3F grants +and currently maintains most Ledger apps for the ecosystem. +We have recently completed a [grant](https://github.com/w3f/Grants-Program/blob/master/applications/hybrid_node_research.md) on the research of an alternative host implementation. + +## Team :busts_in_silhouette: + +### Team members + +- 2 x Engineers +- 1 x Project Manager + +### Contact + +- **Contact Name:** Juan Leni and Ainhoa Aldave +- **Contact Email:** juan.leni@zondax.ch / ainhoa.aldave@zondax.ch +- **Website:** zondax.ch + +### Legal Structure + + +Zondax AG + +Dammstrasse 16 + +Zug 6300, Switzerland + +UID CHE-491.796.576 + +### Team's experience + +Over the last few years, Zondax has been involved in a large number of projects for most of the key players in the blockchain industry. +Our team includes experts in most blockchain aspects, from cryptography to data and protocol engineering. + +### Team Code Repos + +Most of our contributions to the blockchain ecosystem can be found in our GitHub organization [zondax](https://github.com/zondax) + +## Development Status :open_book: + +Not initiated. + +## Development Roadmap :nut_and_bolt: + +## Technical Scope: + +The scope of our work will consist on: + +- Review of specifications and conformance tests: The Polkadot specification and the corresponding conformance tests will be used as a reference of expected valid behavior: + - [Polkadot Spec](https://github.com/w3f/polkadot-spec) + - [Polkadot tests](https://github.com/w3f/polkadot-tests) + +- Analysis of previous work: previous work will be analysed to determine improvements, advantages and disadvantages. In this respect, we can already pinpoint the following repositories: + + - [Polkadot Tests](https://github.com/w3f/polkadot-tests) + - [PVF Conformance Testing Suite](https://github.com/LimeChain/polkadot-conformance) + - [Zombienet](https://github.com/paritytech/zombienet) + - [SCALE Codec Encoding](https://github.com/w3f/polkadot-tests/tree/main/fixtures/scale-codec) + - [State Trie Hashing](https://github.com/w3f/polkadot-tests/tree/main/fixtures/state-trie) + +- Test the test-suite against all implementations + - [Go: gossamer by ChainSafe](https://github.com/ChainSafe/gossamer) + - [C++: kagome by Soramitsu](https://github.com/soramitsu/kagome) + - [Rust: polkadot by Parity](https://github.com/paritytech/polkadot ) + - [Rust: smoldot by Parity](https://github.com/smol-dot/smoldot) + +### Overview + +- **Total estimated workload:** 4 weeks +- **Delivery time:**: 6 to 8 weeks +- **Full-Time Equivalent (FTE):** 2.5 FTE +- **Total Costs:** 28'800 DAI + +### Milestone 1 - PoC Implementation + +- **Estimated workload:** 4 working weeks +- **Delivery time:**: 6 to 8 weeks +- **FTE:** 2,5 +- **Costs:** 28'800 DAI + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 / GPLv3 / MIT | +| **0b.** | Documentation | We will provide a inline documentation of the code and inline documentation of the code and a basic tutorial | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an article explaining the research, design decisions and proof of concept | +| 1. | PoC code| General structure | +| 2a. | Code| PoC Tests: Host API: cryptography primitives | +| 2b. | Code| PoC Tests: Trie proof verification | +| 2c. | Code| PoC Tests: Scale encoding and decoding | + +*Testing in point 2, will not be comprehensive. We will concentrate on different cases to proof that the architecture and design is adequate. + +## Future Plans + +After we have completed this PoC, we aim to prepare a proposal for a long term test suite. + +## Additional Information :heavy_plus_sign: + +Zondax has been contributing to the Polkadot ecosystem for several years, and has succesfully completed several grants. +We have recently completed a grant on the research of an alternative host implementation. https://github.com/w3f/Grants-Program/pull/1324 From 5366b1b4f938c2da04761f12359e43f102800c2c Mon Sep 17 00:00:00 2001 From: David Hawig Date: Thu, 14 Sep 2023 10:04:57 +0200 Subject: [PATCH 618/665] Update index.md Add PoC Polkadot Conformance Tests --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 557e10f0057..7e696ea10c5 100644 --- a/applications/index.md +++ b/applications/index.md @@ -70,6 +70,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [PolyCrypt GmbH](https://polycry.pt) | [Distributed Cryptography for Polkadot Wallets](./distributed_cryptography_for_polkadot_wallets.md) | [GitHub](https://github.com/perun-network) | ☐ | ☐ | ☐ | | [Open Smart Contract](https://github.com/OpenSmartContract) | [ISO20022 PoC](./ISO20022.md) | [GitHub](https://github.com/OpenSmartContract) | ☐ | ☐ | ☐ | | [DAOsign](https://daosign.org/) | [DAOsign](./DAOsign.md) | [GitHub](https://github.com/DAOsign) | ☐ | ☐ | ☐ | +| [Zondax AG](https://zondax.ch/) | [PoC Polkadot Conformance Tests](./polkadot_tests.md) | [GitHub](https://github.com/zondax) | ☐ | ☐ | ☐ | [🔝](#2023) From 8398981e36245209d1c6df05e8c2fc5eba530472 Mon Sep 17 00:00:00 2001 From: David Semakula Date: Fri, 15 Sep 2023 20:16:19 +0300 Subject: [PATCH 619/665] Move P2P data platform proposal to applications directory (#1974) --- .../data_platform_with_deep_indexed_data_and_staking_reports.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename data_platform_with_deep_indexed_data_and_staking_reports.md => applications/data_platform_with_deep_indexed_data_and_staking_reports.md (100%) diff --git a/data_platform_with_deep_indexed_data_and_staking_reports.md b/applications/data_platform_with_deep_indexed_data_and_staking_reports.md similarity index 100% rename from data_platform_with_deep_indexed_data_and_staking_reports.md rename to applications/data_platform_with_deep_indexed_data_and_staking_reports.md From 6db7f8a21946469c564b3e255e0bf7ba2b3fca16 Mon Sep 17 00:00:00 2001 From: Nikhil W3F <142136841+nikw3f@users.noreply.github.com> Date: Mon, 18 Sep 2023 10:55:35 +0200 Subject: [PATCH 620/665] Update RFP link for ISO-8583-implementation.md (#1976) --- applications/ISO-8583-implementation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/ISO-8583-implementation.md b/applications/ISO-8583-implementation.md index 2a8f6789bbf..793db9fe492 100644 --- a/applications/ISO-8583-implementation.md +++ b/applications/ISO-8583-implementation.md @@ -4,7 +4,7 @@ - **Payment Address:** 0xc42D0562BB4e53f5e9D888df35e1B91eA0f19cC3 (USDC) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 -This application is in response to the [ISO-8583 RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Open/ISO_8583.md). +This application is in response to the [ISO-8583 RFP](https://github.com/w3f/Grants-Program/blob/master/docs/RFPs/Under%20Development/ISO_8583.md). ### Overview From 622a76f83f97a60e4002facb4c793da2b2bde893 Mon Sep 17 00:00:00 2001 From: Nikhil W3F <142136841+nikw3f@users.noreply.github.com> Date: Mon, 18 Sep 2023 10:56:52 +0200 Subject: [PATCH 621/665] Update index.md (#1975) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 7e696ea10c5..1f01e996eff 100644 --- a/applications/index.md +++ b/applications/index.md @@ -56,7 +56,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Eiger](https://www.eiger.co/) | [Storage solution on Polkadot](./Eiger_Storage_on_Polkadot_1.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang Playground](Solang_Playground.md) | [GitHub](https://github.com/salaheldinsoliman) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [P2P data platform](data_platform_with_deep_indexed_data_and_staking_reports.md) | [GitHub](https://github.com/p2p-org) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☐ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☒ | ☐ | | [Stake Plus Inc](https://stake.plus) | [Treasury Tracker](TreasuryTracker.md) | [GitHub](https://github.com/stake-plus) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | | [Infra3](https://network.infra-3.xyz) | [Hyperdot - Powerful data analysis and creations platform](Hyperdot.md) | [GitHub](https://github.com/Infra3-Network/hyperdot) | ☐ | ☐ | ☐ | From 25a09c348f03d55e91f149ec8e6992c470608585 Mon Sep 17 00:00:00 2001 From: S E R A Y A Date: Mon, 18 Sep 2023 12:53:51 +0200 Subject: [PATCH 622/665] Approve larch first delivery in wave list --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 1f01e996eff..d8aac8b16fb 100644 --- a/applications/index.md +++ b/applications/index.md @@ -142,7 +142,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [CoinFabrik](https://www.coinfabrik.com/) | [Scout - Security Analysis Tool](ScoutCoinFabrik.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [727.ventures](https://727.ventures/) | [Typechain-Polkadot Follow-up-2](typechain-polkadot-follow-up-2.md) | [GitHub](https://github.com/727-Ventures/typechain-polkadot) | ☐ | ☒ | ☒ | | [Mark Van de Vyver PhD(Dist)](https://www.student.uwa.edu.au/course/award-verification-service?family=van+de+vyver&family_partial=on&given=mark&search=Search) | [Substrate Tokenomics Survey](tokenomics-survey-2022.md) | [GitHub](https://github.com/taqtiqa-mark) | ☐ | ☒ | ☐ | -| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | +| [Zeeve](https://www.zeeve.io) | [Parachain deployment zoombienet testing automation](Zeeve_Parachain_deployment_zoombienet_testing_automation.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☒ | ☐ | | [Polytope Labs](https://research.polytope.technology/) | [Trie Verifier Implementation](solidity-trie-verifier.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | | [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | From aac108b81a6ba1c017929e139872bd2c128de6ed Mon Sep 17 00:00:00 2001 From: Roman <133760597+fidiroman@users.noreply.github.com> Date: Mon, 18 Sep 2023 09:49:54 -0500 Subject: [PATCH 623/665] Refined scope for M3, updated address. (#1971) --- applications/fidi-dotsight-analytics.md | 31 +++++++++++++------------ 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/applications/fidi-dotsight-analytics.md b/applications/fidi-dotsight-analytics.md index dc4ebeaeb57..d911dd5488b 100644 --- a/applications/fidi-dotsight-analytics.md +++ b/applications/fidi-dotsight-analytics.md @@ -174,9 +174,9 @@ Our decentralized platform will enable analysts and power users to interactively ### Legal Structure -**Registered Address:** 400 NW 7th Ave, #14310, Ft. Lauderdale, FL 33311, USA +**Registered Address:** Unit 2A, 17/F, Glenealy Tower, No.1 Glenealy, Central, Hong Kong SAR -**Registered Legal Entity:** FiDi Tech, Inc +**Registered Legal Entity:** FiDi Tech Ltd ### Team's experience @@ -219,14 +219,14 @@ All infrastructure deliverables belong to the teams’ domains of expertise and - **Full-Time Equivalent (FTE):** 3.5 FTE - **Total Costs:** 25,000 USD -### Milestone 1 — Data Interface API +### Milestone 1 — Data Interface - **Estimated duration:** 1mo - **FTE:** 4 - **Costs:** 7,500 USD -- Summary: This milestone covers a complete data interface connected to GiantSquid and FiDi dashboards. It also includes fully productionized custom Squids and FiDi views for Astar staking dApp analytics. -- Success: an open-sourced data interface as well as fully operational dashboards for two selected parachains +- Summary: This milestone covers a complete data interface connected to GiantSquid and any arbitrary data provider. +- Success: an open-sourced data interface with customizable middleware, mappers, aggregation logic, and data sources. | Number | Deliverable | Specification | | -----: | ----------- | ------------- | @@ -238,8 +238,6 @@ All infrastructure deliverables belong to the teams’ domains of expertise and | **1c.** | Off-chain sourced addresses support | We will provide rudimentary support for additional data materialization parameters, e.g., pricing via liquidity pool addresses. This will be extended to any off-chain data in an oracle-like fashion in future milestones. | | **2a.** | Data Interface for developers | We will provide a configuration-based interface (initially via git pull requests, then automated in Milestone 2) with key specifications for the new views. We will leverage React and Typescript on the frontend and Typescript with Nest and PGSQL on the backend. | **2b.** | Schema mapping and morphing | We will provide a configuration-based paradigm for specifying: the desired metrics mapping, aggregation logic, upstream GiantSquid URI, and desired materialized view.| -| **2c.** | Data interface: view construction | We will provide developers with the ability to select a desired analytical dashboard from the pre-selected collection (see five views explained in the architecture section; fully customizable views will make it to future milestones). These UI components will also be implemented via React and Typescript.| -| **2d.** | Data interface: Deployment | We will provide developers with the ability to schedule their customer view’s deployment (automatically at recurring times in the future milestones). The deployment action will be a UI module, and the propagation/consensus will occur via GitHub at first and via a PGSQL query in future milestones.| | **3a.** | Dashboards: Default Analytical Views | We will integrate the default views, i.e., pie chat, 1/3-metrics view, and list of assets, with the data interface and make it available for the ad-hoc developer deployment. For 3a-c UI components, we will similarly rely on React + Typescript.| | **3b.** | Dashboards: Advanced Staking View | We will integrate the advanced staking view, e.g., the dApps names, nominator TVLs, balances, rewards, and ranks, with the data interface and make it available for ad-hoc developer deployment. | | **4a.** | Lighthouse use cases: Squids for Wallet-specific metrics | We will implement new squids in GraphQL surfacing wallet-specific metrics for two parachains with the following metrics that need to be surfaced via GiantSquid: Free tokens, Vesting, EVM Deposits, and dApp names. | @@ -247,13 +245,13 @@ All infrastructure deliverables belong to the teams’ domains of expertise and | **4c.** | Lighthouse use cases: customized dApp views | As the first two use-cases, a feasibility proof and an accelerator, we will provide the community with a fully integrated customized dApp analytics dashboard leveraging the data interface (2a-2c), the advanced staking view (3b), and the data aggregation module (1a-1c). | -### Milestone 2 — Views with Network- and dApp-level Metrics +### Milestone 2 — POC Dashboards with Network-, dApp-level and custom Metrics - **Estimated Duration:** 1mo - **FTE:** 2.5 - **Costs:** 5,000 USD -- Summary: This milestone covers support for essential metrics at the parachain and dApp level under each chain. Many would require custom squids built as a part of this scope. +- Summary: This milestone covers support for essential metrics at the parachain and dApp level under each chain. Many would require custom pipelines built as a part of this scope. - Success: developer UI supports views with newly sourced metrics. | Number | Deliverable | Specification | @@ -261,7 +259,7 @@ All infrastructure deliverables belong to the teams’ domains of expertise and | **0a.** | License | Apache 2.0 | **0b.** | Documentation | We will provide documentation on every supported metrics class and an educational tutorial explaining the typical way to interpret the data, navigate the developer UI, specify the required metadata, deploy a data interface configuration, and select the desired dashboard. | | **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | -| **1a.** | dApp-level signals: collator metrics | We will generalize prior work from Milestone 1 to span collator/nominator activity and make metrics such as uptime, block production rate, block processing time, rank/nominator rank, name, and value locked available in the views. For 1a-2a, the respective in GraphQL squid query and GiantSquid's code are also in scope; the UI components will be written in React + Typescript and the backend code in Typescript + Nest + PGSQL.| +| **1a.** | dApp-level signals: collator metrics | We will generalize prior work from Milestone 1 to span collator/nominator activity and make metrics such as uptime, block production rate, block processing time, rank/nominator rank, name, and value locked available in the views. For 1a-2a, the respective GraphQL squid query and GiantSquid's code are also in scope; the UI components will be written in React + Typescript, and the backend code in Typescript + Nest + PGSQL.| | **1b.** | dApp-level signals: user activity | Additionally, the dApp-specific user activity metrics will be surfaced, e.g., UAW, net new wallets, historical transactions, volume, and balance per dApp. Respective squid query and GS code are also in scope. | | **2a.** | Network-level signals | We will generalize prior work from Milestone 1 to span L1-level metrics and activity made available in the developer UI, e.g., UAW per network, number of new wallets, adoption rates, unstaked tokens currently in wallets, tokens in circulation, and tokens staked or locked. Respective squid query and GS code are also in scope. | @@ -272,7 +270,7 @@ All infrastructure deliverables belong to the teams’ domains of expertise and - **FTE:** 2.5 - **Costs:** 5,000 USD -- Summary: This milestone covers a no-code option for developers to productionize new views on FiDi via specific squids on GiantSquid. +- Summary: This milestone covers a no-code option for developers to productionize new views on FiDi via arbitrary data sources including squids on GiantSquid. - Success: developer UI launched, and new users are able to productionize new views without any code. | Number | Deliverable | Specification | @@ -280,10 +278,13 @@ All infrastructure deliverables belong to the teams’ domains of expertise and | **0a.** | License | Apache 2.0 | **0b.** | Documentation | We will provide documentation on every supported metrics class and an educational tutorial explaining the typical way to interpret the data, navigate the developer UI, specify the required metadata, deploy a data interface configuration, and select the desired dashboard. | | **0c.** | Testing | Core functions will be fully covered by a unit and integration tests suite to ensure robustness, deployment, and serving times. | -| **1a.** | dApp-level signals: collator metrics | We will provide an intuitive web interface for specifying the desired metrics mapping, aggregation logic, upstream GiantSquid URI, and desired materialized view. The UI will be an extension of the one built in M2 and also leverage Typescript + React; and Nest + CloudSQL (PGSQL) + Typescript on the backend. | -| **1b.** | Online testing & deployment | We will provide an intuitive web interface for querying the new view for deployment and validating its configuration. The UI's part technology choices is same as 1a.| -| **2a.** | Deployment validation & View status | We will implement testing and validation layers to ensure the user-inputted configurations for newly spun-up views and GS queries are performant. We will surface the view “status,” e.g., up, down, missing data, and similar. | -| **2a.** | Automated and ad-hoc deployment | We will decouple the existing infrastructure to support ad-hoc and scheduled deployments for newly created views. The CI/CD and automation for 2a-b will rely on schedule App Engine workers. | +| **1a.** | dApp-level signals: collator metrics | We will provide an intuitive web interface for specifying the desired metrics mapping, aggregation logic, upstream data provider, and desired materialized view (dashboard). The UI willleverage Typescript + React; and Nest + CloudSQL (PGSQL) + Typescript on the backend. | +| **1b.** | Online testing & deployment | We will provide an intuitive web interface for querying the new view for deployment and validating its configuration. The UI's part technology choices is the same as 1a.| +| **2a.** | Deployment validation & View status | We will implement testing and validation layers to ensure the user-inputted configurations for newly spun-up views and queries are performant. We will surface the view “status,” e.g., up, down, missing data, and similar. | +| **2b.** | Automated and ad-hoc deployment | We will decouple the existing infrastructure to support ad-hoc and scheduled deployments for newly created views. The CI/CD and automation for 2a-b will rely on scheduled App Engine workers. | +| **2c.** | Data interface: view construction | We will provide developers with the ability to select a desired analytical dashboard from the pre-selected collection (see five views explained in the architecture section; fully customizable views will make it to future milestones). These UI components will also be implemented via React and Typescript.| +| **2d.** | Data interface: Deployment | We will provide developers with the ability to schedule their customer view’s deployment (automatically at recurring times in the future milestones). The deployment action will be a UI module, and the propagation/consensus will occur via GitHub at first and via a PGSQL query in future milestones.| + ### Milestone 4 — Interactive SQL Query Engine for Views From 3d051a0a54c1a5158efedd82f57ac73ce698f5cb Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 19 Sep 2023 03:01:11 -0400 Subject: [PATCH 624/665] Update RFP links (#1981) * Update IDE_for_ink_Smart_Contracts.md * Update ISO_20022.md * Update identity-directory.md * Update implementation-benchmarking.md * Update ISO_8583.md --- docs/RFPs/Open/ISO_20022.md | 4 ++-- docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md | 2 +- docs/RFPs/Under Development/ISO_8583.md | 2 +- docs/RFPs/Under Development/identity-directory.md | 2 +- docs/RFPs/Under Development/implementation-benchmarking.md | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/RFPs/Open/ISO_20022.md b/docs/RFPs/Open/ISO_20022.md index a61188b6e3a..6d2c1611c53 100644 --- a/docs/RFPs/Open/ISO_20022.md +++ b/docs/RFPs/Open/ISO_20022.md @@ -1,6 +1,6 @@ # RFP: ISO 20022 -* **Status:** Open +* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/ISO20022.md) * **Proposer:** [Noc2](https://github.com/Noc2) ## Project Description :page_facing_up: @@ -10,7 +10,7 @@ ISO (International Organization for Standardization) 20022 is becoming the de fa The goal of this RFP is to find teams that implement tools that make it easy and possible for the traditional finance industry to leverage substrate and ink! smart contracts to interact with ISO 20022 in various ways (e.g. cross border payments, card payments, etc.). These tools could be, but are not limited to: - (Java) APIs or packages that make it possible for the traditional finance industry to integrate a substrate-based ISO 20022 solution into their existing tech stack. -- Proof of concepts, potentially leveraging the unique [Off-Chain Features of Substrate](https://docs.substrate.io/v3/concepts/off-chain-features/) that show the advantages of using ISO 20022 together with Substrate. +- Proof of concepts, potentially leveraging the unique [Off-Chain Features of Substrate](https://docs.substrate.io/learn/offchain-operations/) that show the advantages of using ISO 20022 together with Substrate. - Efficient on-chain representation of the ISO 20022 XML or ASN.1-based syntax **Useful resources:** diff --git a/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md b/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md index d00e9afc75e..06640b5994f 100644 --- a/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md +++ b/docs/RFPs/Under Development/IDE_for_ink_Smart_Contracts.md @@ -11,7 +11,7 @@ The goal of this RFP is to find teams that would like to maintain the browser-ba **Useful resources:** - [ink!](https://use.ink/) -- [ink-playground](https://ink-playground.substrate.io) +- ~~[ink-playground](https://ink-playground.substrate.io)~~ (no longer hosted) - [GitHub ink-playground](https://github.com/paritytech/ink-playground) - [GitHub: ink! Remix plugin](https://github.com/blockchain-it-hr/ink-remix-plugin) diff --git a/docs/RFPs/Under Development/ISO_8583.md b/docs/RFPs/Under Development/ISO_8583.md index 1312749da23..c22ea4b91d5 100644 --- a/docs/RFPs/Under Development/ISO_8583.md +++ b/docs/RFPs/Under Development/ISO_8583.md @@ -12,7 +12,7 @@ Even though ISO 8583 is going to be replaced by [ISO 20022](https://github.com/w The goal of this RFP is to find teams that implement tools that make it easy and possible for the traditional finance industry to leverage substrate and ink! smart contracts to interact with ISO 8583 in various ways. These tools could be, but are not limited to: - (Java) APIs or packages that make it possible for the traditional finance industry to integrate a substrate-based ISO 8583 solution into their existing tech stack. -- Proof of concepts, potentially leveraging the unique [Off-Chain Features of Substrate](https://docs.substrate.io/v3/concepts/off-chain-features/) that show the advantages of using ISO 8583 together with Substrate. +- Proof of concepts, potentially leveraging the unique [Off-Chain Features of Substrate](https://docs.substrate.io/learn/offchain-operations/) that show the advantages of using ISO 8583 together with Substrate. - Efficient on-chain representation of the ISO 8583 syntax **Useful resources:** diff --git a/docs/RFPs/Under Development/identity-directory.md b/docs/RFPs/Under Development/identity-directory.md index 980863fc1bb..be652056b5b 100644 --- a/docs/RFPs/Under Development/identity-directory.md +++ b/docs/RFPs/Under Development/identity-directory.md @@ -1,6 +1,6 @@ # RFP: Substrate Identity Directory -* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/SubIdentity.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/substrate-identity-directory.md) +* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/blob/master/applications/SubIdentity.md), [Under Development 2](https://github.com/w3f/Grants-Program/blob/master/applications/Dotflow.md) * **Proposer:** swader * **Projects you think this work could be useful for**: Kusama, Polkadot, Substrate chains diff --git a/docs/RFPs/Under Development/implementation-benchmarking.md b/docs/RFPs/Under Development/implementation-benchmarking.md index 812327f734b..48acc6fb1a0 100644 --- a/docs/RFPs/Under Development/implementation-benchmarking.md +++ b/docs/RFPs/Under Development/implementation-benchmarking.md @@ -7,7 +7,7 @@ ## Project Description :page_facing_up: When a new team comes to the ecosystem, they are faced with a decision on how to best implement the logic that they need. -Traditionally in substrate, this has been a choice between a smart contract vs. runtime module (a.k.a. pallet) and elaborated on [in this StackOverflow question](https://stackoverflow.com/questions/56040779/when-should-i-build-a-substrate-runtime-module-versus-a-substrate-smart-contract) or [this entry in Substrate Developer Hub](https://substrate.dev/docs/en/knowledgebase/smart-contracts/#smart-contracts-vs-runtime-development). The choice has since been augmented by the possibility to deploy solidity contracts to an EVM-compatible chain, or even writing solidity code and compiling it to WASM with the help of a [solang](https://solang.readthedocs.io/en/latest) compiler. +Traditionally in substrate, this has been a choice between a smart contract vs. runtime module (a.k.a. pallet) and elaborated on [in this StackOverflow question](https://stackoverflow.com/questions/56040779/when-should-i-build-a-substrate-runtime-module-versus-a-substrate-smart-contract) or [this entry in Substrate Developer Hub](https://docs.substrate.io/design/decide-what-to-build/). The choice has since been augmented by the possibility to deploy solidity contracts to an EVM-compatible chain, or even writing solidity code and compiling it to WASM with the help of a [solang](https://solang.readthedocs.io/en/latest) compiler. As substrate is gaining traction, more and more tools will enable developers to write their logic in their language of choice and deploy on-chain, such as: @@ -17,7 +17,7 @@ As substrate is gaining traction, more and more tools will enable developers to This RFP calls for a benchmarking effort to help inform newcomers about the choice of the best tool for writing application logic. Apart from quantifiable metrics, we would like the outcome of this work to be a guide for developers, perhaps expanding on the aforementioned StackOverflow post. Depending on the outcome, the work might get integrated into our READMEs/wikis. -Before starting this effort, it might make sense to take a look at the official [runtime benchmarking docs](https://substrate.dev/docs/en/knowledgebase/runtime/benchmarking) to assess whether it can be leveraged in some way. +Before starting this effort, it might make sense to take a look at the official [runtime benchmarking docs](https://docs.substrate.io/test/benchmark/) to assess whether it can be leveraged in some way. ## Deliverables :nut_and_bolt: From abc9ab4a65675d04e54587a8d001216fd30a84d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 19 Sep 2023 09:23:03 +0200 Subject: [PATCH 625/665] Update index.md CoinFabrik on Ink complete --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index d8aac8b16fb..0e1f96b364c 100644 --- a/applications/index.md +++ b/applications/index.md @@ -56,7 +56,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Eiger](https://www.eiger.co/) | [Storage solution on Polkadot](./Eiger_Storage_on_Polkadot_1.md) | [GitHub](https://github.com/eigerco) | ☐ | ☐ | ☐ | | [Salaheldin Soliman](https://github.com/salaheldinsoliman) | [Solang Playground](Solang_Playground.md) | [GitHub](https://github.com/salaheldinsoliman) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [P2P data platform](data_platform_with_deep_indexed_data_and_staking_reports.md) | [GitHub](https://github.com/p2p-org) | ☐ | ☐ | ☐ | -| [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☒ | ☐ | +| [CoinFabrik](https://www.coinfabrik.com/) | [CoinFabrik On Ink Integration Tests](CoinFabrik_On_Ink_Integration_Tests.md) | [GitHub](https://github.com/CoinFabrik) | ☐ | ☒ | ☒ | | [Stake Plus Inc](https://stake.plus) | [Treasury Tracker](TreasuryTracker.md) | [GitHub](https://github.com/stake-plus) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | | [Infra3](https://network.infra-3.xyz) | [Hyperdot - Powerful data analysis and creations platform](Hyperdot.md) | [GitHub](https://github.com/Infra3-Network/hyperdot) | ☐ | ☐ | ☐ | From 7373be79d6129e29daccea2bf82f79e669dfe3ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20Forn=C3=B3s?= Date: Tue, 19 Sep 2023 17:28:36 +0200 Subject: [PATCH 626/665] Ocelloids XCM Transfer Monitoring Service (#1972) --- .../ocelloids_xcm_monitoring_service.md | 264 ++++++++++++++++++ 1 file changed, 264 insertions(+) create mode 100644 applications/ocelloids_xcm_monitoring_service.md diff --git a/applications/ocelloids_xcm_monitoring_service.md b/applications/ocelloids_xcm_monitoring_service.md new file mode 100644 index 00000000000..9ddc44b43b3 --- /dev/null +++ b/applications/ocelloids_xcm_monitoring_service.md @@ -0,0 +1,264 @@ +# Ocelloids XCM Transfer Monitoring Service + +- **Team Name:** SO/DA zone +- **Payment Address:** Fiat 04.05.2023, 16:37 +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 + +## Project Overview + +This grant proposal is a follow-up to the Ocelloids Monitoring SDK, previously delivered and available here: https://github.com/w3f/Grant-Milestone-Delivery/pull/934 + +The objective of this grant is to develop an open-source monitoring service using the Ocelloids SDK. This service will monitor XCM transfers across selected parachains. The primary purpose is to offer service providers integrating with a single chain (Asset Hub as starting point) and monitoring effects on other chains that are connected via HRMP and that use XCM as their message format. The service will support connecting to the configured networks through light clients in order to reduce infrastructure overhead for service providers. Users will have access to a self-hosted HTTP API to subscribe to XCM transfers and manage their subscriptions. A public Docker image will be published to facilitate service deployment. + +## Project Details + +The service will support bidirectional XCM transfers, namely asset teleports and reserve-based transfers, between selected parachains. + +The flow of the monitoring will work as follows: + +1. The service will monitor on the origin chain for the event `xcmpqueue.xcmpMessageSent` associated to the extrinsic sent by accounts of interest. The service will extract the XCM message hash from this event. +2. The service will query the storage in `parachainSystem.hrmpOutboundMessages` at the block of the event to get all outbound messages and filter for recipient chain IDs that are supported. Subsequently it will decode the message data to get the set of XCM instructions to filter for combinations of instructions related to asset teleports or reserve-based transfers (i.e. `ReserveAssetDeposited`, `ReceiveTeleportedAsset`, `WithdrawAsset`, and `DepositAsset`). Then, it will get the `blake2-256` hash of the message data to match it with the message hash obtained in Step 1. The service will store a persistent task to be matched in subsequent steps. +3. At the destination chain, the service will monitor for the events `xcmpqueue.success` and `xcmpqueue.fail`. It will match the message hash extracted from these events with the message hash of the origin. +4. It will send a notification to the configured webhook to inform of the status of the XCM transfer along with contextual information. See section [Notifications](#notifications) for details. + +Before using the service, users will need to configure the supported networks and connection providers. An example configuration can be found in the section [Service Configuration](#service-configuration). We will support connections to the network using both RPC clients and light clients. Further details on supported Substrate clients can be found in the [Supported Substrate Clients](#supported-substrate-clients) section. + +The service will expose an HTTP API for users to add subscriptions, specifying the channels they want to monitor and the accounts involved. Users can create multiple subscriptions and modify or delete them as needed. Users can also set up webhook endpoints to receive notifications related to their transfers. Detailed information about the API will be provided in the [Subscriptions API](#subscriptions-api) section. + +To keep the project manageable, the current scope includes support for Asset Hub, Astar and Acala. In the future, we plan to expand support to include more chains. + +### Notifications + +As previously mentioned, the monitoring service will accept webhook endpoints for delivering notifications. Initially, notifications will be provided for XCM message reception. + +The following types of notifications correspond to different scenarios: + +**XCM Execution Success** + +The XCM message sent from the origin chain was received and executed successfully. In this case, we will send an "XCM Transfer Success" notification, including contextual data such as the XCM message hash, block numbers of the XCM message on the origin and destination chains, sender account, beneficiary account, transferred asset and amount. + +**XCM Execution Fail** + +The XCM message was received at the destination chain but failed to execute correctly. In this case, an "XCM Transfer Fail" notification will be sent, including the XCM error returned in the event and additional contextual data. + +### Service Configuration + +The service will load a configuration file at startup, similar to the example provided below: + +```json +{ + "networks": [ + { + "name": "assethub", + "id": 1000, + "relay": "polkadot", + "provider": { + "type": "ws", + "url": "wss://asethub-rpc" + } + }, + { + "name": "parallel", + "id": 2012, + "relay": "polkadot", + "provider": { + "type": "smoldot" + } + } + ] +} +``` + +Other common service options, such as the listening port for the Subscriptions API, will be configurable using environment variables. + +### Subscriptions API + +#### API Methods + +`POST /api/subscriptions/{id}` + +Creates a new subscription document. To avoid the need for the client to store a server generated identifier, we will require the client to provide a unique subscription identifier. This will also allow the client to use meaningful identifiers e.g. `1000-2004-cohort1`. + +Example request body: + +```json +{ + "subject": "xcm-hrmp-transfers", + "args":{ + "origin": { + "network": "assethub", + "senders": [ + { + "accountId": "5GEWco3EGfM27Z9cAmVnzFnZ6Y7vkqNVvWM4NgQZj4n84Wh6", + "type": "AccountId32" + } + ] + }, + "destination": { + "network": "moonbeam" + }, + }, + "notification": { + "type": "webhook", + "url": "https://my-callback", + "maxRetries": 50 + } +} +``` + +`PATCH /api/subscriptions/{id}` + +Accepts a JSON Patch operations array according to [RFC6902](https://datatracker.ietf.org/doc/html/rfc6902) + +Example: + +```json +[ + { + "op": "add", + "path": "/args/origin/senders/1", + "value": { + "accountId": "5HWSEZr3DQXaN4Tk2Y9pYyAPKWeu28P94qeWWgUZ4k2mrbGB", + "type": "AccountId32" + } + } +] +``` + +The resulting patched document will be validated against the subscription document schema. + +`DELETE /api/subscriptions/{id}` + +Removes a subscription by ID. + +`GET /api/subscriptions` + +Returns the list of subscriptions. + +`GET /api/subscriptions/{id}` + +Returns the subscription document under the specified ID. + +`PUT /api/subscription/{id}` + +Replaces an existing subscription document by ID. + +### Supported Substrate Clients + +We will support WebSocket RPC endpoints and light clients. However, please note that light client support may be limited due to its experimental nature. + +During preliminary testing, we identified some limitations: + +1. Using the Smoldot through Subtrate-Connect only support bootnodes configured with secure WebSocket connection. In our exploration, we've seen that only Astar and Acala have bootnodes with secure WebSocket connections. However, it is easy to overcome this limitation since Smoldot supports all the connection types. Reference: [Github issue](https://github.com/paritytech/substrate-connect/issues/1543) + +2. Some runtimes, such as Moonbeam, currently cannot be compiled by the light client. Reference: [Github issue](https://github.com/smol-dot/smoldot/issues/1152) + +We will prioritize chains that are light client ready. + +### Storage + +We will provide persistent storage for operational data, including subscription configurations, processed block number and hashes, XCM messages and notifications. We will use [Level](https://github.com/Level/level) as the database abstraction backed by LevelDB. + +### Catch-up Mechanism + +We will implement a mechanism to process missed blocks in case the monitoring service experiences downtime. For each processed block, its hash and block height will be saved in the database. When the service restarts, it will begin following the current finalized blocks. If the parent hash of the finalized block does not match the last-known hash stored in the database, the service will start processing the missing parent hash blocks until all missing ones are processed. + +### Management Tools + +Since notifications and XCM message matching tasks are stored in the database and retried until success, we will provide a method to clear pending states. This is crucial to prevent indefinite retries of pending tasks. For example, if a webhook endpoint is changed while a notification is pending, it may never succeed. + +We will supply a script enabling administrators to inspect and remove XCM message matching and notification tasks from the database. + +### Tech Stack + +- Typescript +- Node.js +- Polkadot.js API +- Smoldot +- [Fastify](https://github.com/fastify/fastify) +- [Level](https://github.com/Level/level) + +## Ecosystem Fit + +This project aligns well with the growing demand for robust tooling and infrastructure necessary to fulfill Asset Hub's vision of becoming the main place for asset management within the Polkadot ecosystem. To expand its user base, Asset Hub must provide a solution that abstracts away the technical intricacies of cross-chain transfers and enhances the user experience for managing assets across the expansive Polkadot ecosystem. + +The Integrations Team at Parity is already taking initial steps toward achieving this goal by working on the Assets Transfer API and the NoS launch script. These efforts target custodians, exchanges, and institutions, simplifying integration with Asset Hub and the construction of XCM messages. The importance of these tools, along with the overarching vision for Asset Hub, is comprehensively outlined in Iker's [Polkadot forum post](https://forum.polkadot.network/t/new-tooling-and-infrastructure-to-facilitate-the-statemint-roadmap/1997). + +The addition of the Ocelloids XCM monitoring service will enhance this toolkit, providing institutions with a straightforward method to track their cross-chain transfers. This corresponds to step 4 of the "Withdrawals User Journey Example" in Iker's post, as detailed [here](https://forum.polkadot.network/t/new-tooling-and-infrastructure-to-facilitate-the-statemint-roadmap/1997#withdrawals-user-journey-example-5). + +With the inclusion of support for light clients in the service, institutions will experience a substantial reduction in infrastructure overhead since they will no longer need to run parachain nodes to monitor their transfers. + +Furthermore, the demand for a generalized monitoring solution with XCM support has been highlighted in discussions within the Polkadot community, as illustrated in this Polkadot forum post: [Generalized multichain monitoring solution](https://forum.polkadot.network/t/generalized-multichain-monitoring-solution/1297). + +## Team :busts_in_silhouette: + +### Team members + +- Marc Fornós +- Xueying Wang + +### Contact + +- **Contact Name:** Marc Fornós +- **Contact Email:** frozen.pomelo@gmail.com + +### Legal Structure + +N/A + +### Team's experience + +**Marc Fornós** has been designing and implementing software systems for 20 years. He is an expert in the area of distributed systems and data-intensive applications. His experience ranges from warehouse automation with radio-frequency terminals, to being the technical director of an airline post-sale revenue optimization software-as-a-service platform, generating millions in incremental revenue during eight years of operation. In the recent past, he was in charge of evolving a commercial Ethereum block explorer and bootstrapping an explorer for Substrate-based networks focused on the contracts pallet and ink! smart contracts. + +**Xueying Wang** pivoted to software development after completing an MSc. in Aerospace Engineering and has been in the industry for the past eight years. During this time, she pioneered conversational AI assistants for airlines, counting more than 20 assistants in production covering ten languages for customer service, FAQ and in-chat purchases. She also built a scalable publish-subscribe system to trigger actions on flight feed events for the automated agents. She participated in designing a composable Solid POD/RDF data browser and bootstrapping an explorer for Substrate-based networks focused on the contracts pallet and ink! smart contracts. + +### Team Code Repos + +- https://github.com/sodazone +- https://github.com/mfornos +- https://github.com/XY-Wang +- https://github.com/frozenpomelo (shared account) + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 2 months +- **Full-Time Equivalent (FTE):** 2 +- **Total Costs:** 28,000 EUR + +### Milestone 1 + +- **Estimated duration:** 2 months +- **FTE:** 2 +- **Costs:** 28,000 EUR + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both inline documentation of the code and a basic guide that explains how to set up and run the monitoring service. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile to ease the deployment and execution of the service. A Docker image of the service will be published in Docker Hub and Github Container Repository. | +| 1. | XCM Monitoring Service | The XCM monitoring service that supports asset teleports and reserve-based transfers between the following parachains: Asset Hub, Astar and Acala. The service will feature what was described in [Project Details](#project-details). | +| 2. | Management Tools | Administrator scripts to inspect and delete pending XCM messages matching and notification tasks, as described in [Management Tools](#management-tools). | + +## Future Plans + +For the XCM monitoring service, we have plans to expand its capabilities and reach which include: + +1. **Support for More Networks:** We plan to broaden the range of networks supported by the XCM monitoring service, enabling a more extensive and inclusive monitoring ecosystem. + +2. **Support for More XCM Protocols:** We will add support for XCMP when ready. + +3. **Enhanced Notifications:** Depending on user requirements and community feedback, we will extend our notification capabilities. This may involve providing notifications for asset transfers' initiation, such as when the block containing the XCM transfer is finalized on the origin chain. We are also considering notifications for when XCM messages sent through HRMP are processed on intermediate chains. + +Our long-term vision for Ocelloids extends beyond just monitoring XCM transfers. We aim to create a hassle-free, comprehensive monitoring portal for Substrate networks and smart contracts within the ecosystem. This portal will offer a set of advanced features, including: + +- Ready-to-use monitoring logic, i.e. monitoring programs, for the entire ecosystem. The XCM monitoring logic built through this grant could be one such monitoring program available. +- Marketplace for monitoring programs where users can subscribe to the programs that correspond to their needs. +- Advanced capabilities: anomaly and attack detection, machine learning, and forecasting. +- Real-time actionable insights on network, contract performance, compliance, and security. +- Multiple data centres for global, high-availability monitoring. +- Seamless integration with existing systems like Prometheus and SIEM. + +In summary, our future plans encompass not only expanding the technical capabilities of the XCM monitoring service but also positioning as a central hub for monitoring and managing Substrate networks and smart contracts within the broader multi-chain ecosystem. From 873d1edf811b4e771d094ef78cbb5732a2b8de08 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 20 Sep 2023 02:55:06 -0400 Subject: [PATCH 627/665] Update analysis-website-and-data-platform.md (#1984) --- .../Under Development/analysis-website-and-data-platform.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/RFPs/Under Development/analysis-website-and-data-platform.md b/docs/RFPs/Under Development/analysis-website-and-data-platform.md index 3bbc1cc0696..6d043841d71 100644 --- a/docs/RFPs/Under Development/analysis-website-and-data-platform.md +++ b/docs/RFPs/Under Development/analysis-website-and-data-platform.md @@ -1,6 +1,6 @@ # Analytics Website/Data Platform -* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/pull/1716), [Under Development 2](https://github.com/w3f/Grants-Program/pull/1768) +* **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/pull/1716), [Under Development 2](https://github.com/w3f/Grants-Program/pull/1768), [Under Development 3](https://github.com/w3f/Grants-Program/blob/master/applications/fidi-dotsight-analytics.md) * **Proposer:** [Keegan Quigley](https://github.com/keeganquigley) * **Teams/People that could deliver the RFP**: @web3go-xyz From 22ff1159c9cead8a01e9221c4c3efb79fef146d8 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 20 Sep 2023 02:55:33 -0400 Subject: [PATCH 628/665] Update index.md (#1983) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 0e1f96b364c..c51cca61239 100644 --- a/applications/index.md +++ b/applications/index.md @@ -104,7 +104,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [SO/DA zone](https://github.com/mfornos) | [Ocelloids Monitoring SDK grant application](ocelloids_monitoring_sdk.md) | [GitHub](https://github.com/mfornos) | ☐ | ☒ | ☒ | | [Antier Solutions Pvt. Ltd.](https://github.com/kulwindersingh-ant)| [Grants webapp](Grant_management_webapp.md) | [GitHub](https://github.com/kulwindersingh-ant) | ☐ | ☒ | ☒ | | [Zaniyar Jahany](https://github.com/Zaniyar/) | [Grantmaster](grantmaster.md) | [GitHub](https://github.com/Zaniyar/plant2earn/) | ☐ | ☐ | ☐ | -| [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☐ | ☐ | +| [FiDi Tech](https://fidi.tech/) | [FiDi DotSight: Analytics Data Platform for DotSama](fidi-dotsight-analytics.md)| [GitHub](https://github.com/fidi-tech) | ☐ | ☒ | ☐ | | [Ideal Labs](https://www.idealabs.network/) | [Cryptex](cryptex.md)| [GitHub](https://github.com/ideal-lab5) | ☐ | ☒ | ☐ | | [Xcavate](https://xcavate.io/) | [Real estate centric lending and asset minting protocol](Xcavate.md)| [GitHub](https://github.com/xcavateblockchain) | ☐ | ☐ | ☐ | | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | From bdfe678d4d700abc3fd69d2811c06516b9e59f4d Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 20 Sep 2023 09:04:11 +0200 Subject: [PATCH 629/665] Update index.md add Ocelloids XCM Transfer Monitoring Service --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index c51cca61239..5d89a454dd8 100644 --- a/applications/index.md +++ b/applications/index.md @@ -71,6 +71,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Open Smart Contract](https://github.com/OpenSmartContract) | [ISO20022 PoC](./ISO20022.md) | [GitHub](https://github.com/OpenSmartContract) | ☐ | ☐ | ☐ | | [DAOsign](https://daosign.org/) | [DAOsign](./DAOsign.md) | [GitHub](https://github.com/DAOsign) | ☐ | ☐ | ☐ | | [Zondax AG](https://zondax.ch/) | [PoC Polkadot Conformance Tests](./polkadot_tests.md) | [GitHub](https://github.com/zondax) | ☐ | ☐ | ☐ | +| [SO/DA zone](https://github.com/sodazone) | [Ocelloids XCM Transfer Monitoring Service](ocelloids_xcm_monitoring_service.md) | [GitHub](https://github.com/sodazone) | ☐ | ☐ | ☐ | [🔝](#2023) From 8c9fe740e206c309b7c1769c720359c78e8e7e5c Mon Sep 17 00:00:00 2001 From: Nikhil W3F <142136841+nikw3f@users.noreply.github.com> Date: Wed, 20 Sep 2023 10:11:20 +0200 Subject: [PATCH 630/665] ISO-8583-implementation milestone 1 (#1985) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 5d89a454dd8..638641193d9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -111,7 +111,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Syncra](https://syncra.xyz) | [No Code DAO Maker and ZK Powered Private Voting Solution](Syncra.md)| [GitHub](https://github.com/SyncraDAO) | ☐ | ☐ | ☐ | | [P2P.ORG](http://p2p.org/) | [Validator Monitoring Service](Validator_Monitoring_Service.md)| [GitHub](https://github.com/p2p-org/polkadot_monitoring_service) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Deep Account Analytics in Three Tiers for the Polkadot Data Alliance](DeepAccountAnalytics-PolkadotDataAlliance.md)| [GitHub](https://github.com/colorfulnotion/) | ☐ | ☐ | ☐ | -| [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☐ | ☐ | +| [Dastanbek Samatov](https://dastansam.github.io/) | [ISO-8553 PoC implementation](ISO-8583-implementation.md)| [GitHub](https://github.com/dastanbeksamatov) | ☐ | ☒ | ☐ | | [Eiger](https://www.eiger.co/) | [Substrate Move System Pallet, pt. 1](Substrate_Move_System_Pallet_1.md)| [GitHub](https://github.com/eigerco) | ☐ | ☒ | ☒ | | [Davanti](https://github.com/liangjh) | [Dot-ETL Project](dot_etl.md)| [GitHub](https://github.com/liangjh) | ☐ | ☐ | ☐ | | [ParaSpell](https://github.com/paraspell) | [LightSpell: XCM API](LightSpell-proposal.md)| [GitHub](https://github.com/paraspell) | ☐ | ☒ | ☒ | From 1660a5e5b1e1911698e57ce746f7beca05dd7028 Mon Sep 17 00:00:00 2001 From: Cwilli30 <144842888+Cwilli30@users.noreply.github.com> Date: Wed, 20 Sep 2023 09:22:22 -0400 Subject: [PATCH 631/665] Add StorageHub Proposal (#1970) * Add StorageHub Proposal * Update StorageHub.md * Update StorageHub.md --------- Co-authored-by: Stephen Shelton --- applications/StorageHub.md | 169 +++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 applications/StorageHub.md diff --git a/applications/StorageHub.md b/applications/StorageHub.md new file mode 100644 index 00000000000..93f5b783fee --- /dev/null +++ b/applications/StorageHub.md @@ -0,0 +1,169 @@ +# StorageHub Grant Application + +- **Team Name:** Moonsong Labs +- **Payment Address:** USD Wire Preferred +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 3 + +## Project Overview :page_facing_up: + +### Overview + +* Tagline Describer + * StorageHub is a decentralized storage public good parachain optimized for file based storage and larger data sets that are not suitable to be stored directly in standard parachain storage. The proposed parachain will provide developers in the Polkadot ecosystem with an alternate decentralized and substrate-based storage solution and functionality. + +* Purpose + * The goal of this project is to provide storage for web3 applications and protocols within the Polkadot & Kusama ecosystems. Unlike other storage protocols that focus on end user or enterprise storage scenarios, StorageHub’s feature set optimizes for web3 application storage use cases. StorageHub aims to provide a decentralized storage option that allows web3 applications to store large files and large data sets in a cost efficient way without sacrificing decentralization properties. + +* Problem + * Storage oriented chains, like Filecoin and Arweave, have emerged to provide more efficient and decentralized storage capabilities. However, these chains are standalone chains, and are not designed to interoperate with other chains. The problem is that web3 apps need smart contract logic and compute to be combined with storage to make a complete solution, but smart contracts and compute generally reside on different chains (e.g. Ethereum Mainnet, L2 rollups, Parachains) vs. on the storage optimized chains (Filecoin, Arweave). In response, these storage chains have tried to bolster their smart contract capabilities (e.g. Filecoin’s FVM, Arweave’s Smartweave), but they have and will continue to be hard pressed to convince all compute and smart contract activity to migrate to their chains. + + * The ideal scenario would be to combine smart contract execution from e.g. a Substrate based Polkadot parachain such as Moonbeam or Astar with storage from a storage optimized chain like Arweave. If we look at NFT scenarios as an example, this is happening. The scenario is that you have an NFT contract on Mainnet, that has a pointer to a JPEG via an Arweave URL. The problem is that this is a one-way pointer between 2 independent systems. It is up to the application to mediate interactions between the 2 chains in the client. There is no awareness or connection between the contract and the JPEG other than the URL pointer in the contract. What if the contract could update access to and ownership of the actual data itself? What if the contract could read and act on the data stored? Simple functionality like this would open up a large number of new scenarios. End user UX could be substantially improved by removing the need for the user to understand and interact directly with both the contract and the storage blockchains, using potentially different accounts, keys, etc. + +* Vision + * StorageHub is a storage optimized parachain that is designed to work with other Polkadot & Kusama parachains. It focuses on storing data in an efficient and decentralized way, while allowing that storage to be accessed, used, and managed by other parachains. It will be possible for users to directly interact with the storage on the chain, but StorageHub also seeks to natively interoperate with existing parachains via XCM. + +* Inspiration + * Amazon S3 + * (https://en.wikipedia.org/wiki/Amazon_S3) was a key building block of web2 cloud infrastructure that greatly eased and improved data storage in web2 applications. With S3 devs could store arbitrarily large amounts of data in their apps without needing to get bogged down with storage infrastructure or scaling concerns. StorageHub seeks to do something similar for web3 devs building on Polkadot. + + * Filecoin + * (https://filecoin.io/) is a storage optimized chain that creates a 2 sided marketplace of storage providers and storage consumers. The project is responsible for key innovations such as ipfs and libp2p, among other things. In many ways filecoin sets the standard for decentralized storage in the web3 space. Although the protocol seems focused on trying to compete with cloud and other centralized storage providers. + + * Arweave + * (https://www.arweave.org/) is a storage optimized chain like filecoin, but that emphasizes permanent storage vs creating a time based storage marketplace. Users pay once to store data on arweave forever. It is popular to use for metadata associated with NFTs, among other things. + + * Project Greenfield + * (https://github.com/bnb-chain/greenfield-whitepaper/blob/main/README.md) is a storage optimized chain designed to work with the BNB chain. It was born out of practical needs that the state of BNB chain is already many terabytes large and there is a need to offload unnecessary storage from the main BNB chain. There are lots of good cross chain ideas in Greenfield including having storage on Greenfield represented as NFTs on BNB chain which can be managed and whose ownership can be changed. + +### Project Details + +* Design and Implementation Principles + * StorageHub will be a Substrate-native implementation deployed to both Kusama and Polkadot. + * It will be a public good chain that uses DOT for fees, governance, and other utilities. + * It will offer native XCM support such that parachains can interact with stored data and metadata in a trustless way.. + * End users and Dapps should be able to store and retrieve stored data from the chain. + * The chain will create a 2 sided marketplace of storage providers and storage consumers. + * A minimum of N copies of any given piece of data should be stored such that the system can survive the loss of some copies without losing the original dataset. Erasure encoding or similar technique could be optionally used to achieve this. + * On the tradeoff spectrum between decentralization vs performance, we opt to always maintain good decentralization properties even if that means less performance is possible. + * There will need to be a network of storage providers that supply storage to the blockchain. + * The parachain will track metadata about the data being stored, and facilitate payments between the data owner and the storage provider. + * A set of metadata associated with any stored data will be managed by StorageHub. This will allow the data owner to control access, and to transfer ownership of the data to other parties. + * StorageHub doesn’t aim to have smart contract functionality itself. Rather it strives to integrate, work with, and complement other smart contract or native parachains. + * In creating the design for StorageHub, we will leverage previous research into polkadot and substrate based filestorage solutions such as: + * https://github.com/w3f/Grants-Program/pull/1888 + * https://github.com/common-good-storage/report/blob/master/src/first.md + +* Key Questions and Anticipated Challenges + * Existing storage networks focus more on storage but less on user accessibility to that data. But storage without accessibility isn’t that useful to users. Can we incorporate outside accessibility guarantees into the protocol? + * What type of storage will it provide? Only immutable hash/value type or will it support mutable references (like a filesystem, useful to store/manage a web service or page) + * What kind of XCM interaction (API) do we want to support? + * XCM (mostly HRMP) costs may make some scenarios prohibitive. + * Given the costs of XCM, to what degree does it make sense to store metadata on StorageHub vs on the controlling chain? + * What do sustainable economics look like for storage providers, especially given that a public good chain won’t have a token to help bootstrap this side of the market? + * How is data provided and stored without increasing PoV? This will most likely need to be a combination of offchain workers and a separate storage system. Regular substrate state can’t be used for larger data storage, it would be used to keep tracking information about where and what data is stored. + * What does this new data provider node look like and how does it work with other node types supporting the system? + * How will the system ensure that enough copies of a given piece of data are present and available, given that storage provider nodes can go offline at any time. + * How is it checked that data providers have the data they are being paid to store? What are the consequences of failing this check? + * How do you manage censorship of data? + * Different kinds of data that could be subject to take down requests. Data that e.g. a political party doesn’t like. Data that is illegal in a given jurisdiction due to copyright or similar. Data that is both illegal and morally offensive. + * Perhaps OpenGov tracks could be used for censorship takedowns. + * Or data storage providers could be given censorship controls, and a permissionless staking design would make it so token holders could vote out providers that are out of line with community censorship standards. + + +### Ecosystem Fit +* Where and How Does StorageHub Fit In + * There are currently no native Polkadot decentralized storage solutions and StorageHub aims to fill that gap. + * Crust provides an incentive layer on top of existing storage protocols like ipfs. Whereas StorageHub seeks to be a storage provider itself. + * StorageHub will be natively accessible by other parachains via XCM. + +* Target Audience + * StorageHub is targeted for chains, contracts, teams and individuals that require data storage of larger datasets, and who value that storage being decentralized, censorship resistant, and permanent as long as storage fees are paid. + * StorageHub will prioritize web3 developers that want to incorporate decentralized storage into their applications. This means a focus on APIs, SDKs, developer docs and education. + * StorageHub will secondarily provide a reference application which allows users to directly interact with the system, storing data and managing data storage. + +* Use Cases + * NFT, NFT marketplace, and Metaverse metadata storage + * Dapps that require data storage + * Personal and enterprise data storage - same as other storage chains. + * DAO owned data assets - DAOs operating on existing parachains can manage access to and ownership of data assets on StorageHub. + * “True” NFTs that can have the entirety of their associated data assets on-chain via a combination of an e.g. NFT contract and StorageHub stored assets. + * Markets for data sets using NFT marketplaces. + * New types of smart contracts that can act on StorageHub stored data on an one off or continuous basis + + +## Team :busts_in_silhouette: + +### Team members +* Team Leader: Derek Yoo +* Team: + * Alan Sapède + * Chase Williams + * Olivia Smith + * Engineers to be hired + +### Contact + +- **Contact Name:** Chase Williams +- **Contact Email:** Chase@moonsonglabs.com +- **Website:** https://moonsonglabs.com/ + +### Legal Structure + +- **Registered Address:** 1500 District Ave Burlington, MA 01803 +- **Registered Legal Entity:** Delaware C Corp + +### Team's experience + +* The Moonsong Labs protocol engineering team has deep expertise in Substrate, EVM, cross chain technologies, and launching parachains on Kusama and Polkadot. Our team is the core engineering team for the Moonbeam Network and have made significant contributions to the ecosystem, such as contributions to Frontier, the Moonwall testing framework, parachain-staking pallet, and xcm tools. The engineering team is made up of 13+ engineers and is rapidly growing.  + +* Team Example Code Repos: + * https://github.com/Moonsong-Labs + * https://github.com/moonbeam-foundation/moonbeam + +* Team LinkedIn Profiles: + * [Alan Sapede](https://www.linkedin.com/in/alansapede/) + * [Derek Yoo](https://www.linkedin.com/in/derek-yoo-8a050/) + * [Olivia Smith](https://www.linkedin.com/in/olivia-smith-69966616a/) + * [Chase Williams](https://www.linkedin.com/in/chase-williams-442712b1/) + * Engineering Team TBD + +## Development Roadmap :nut_and_bolt: + +### Overview +* Total Estimated Duration: 2 Months + * Milestone #1: 1 Month + * Milestone #2: 1 Month +* Full-Time Equivalent (FTE): 2.5 +* Total Costs: $84,500 (USD) + +### Milestone #1: Research & Design +* Estimated duration: 1 Month +* FTE: 2.5 +* Costs: $42,250 (USD) + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | Copyright and Licenses | CC BY 4.0 / GPLv3 | +| **0b.** | Research & Investigation | * Understand and clarify key requirements via conversations with key stakeholders
* Study existing solutions and designs to see what technologies and approaches can be leveraged vs. being created
* Research decentralized storage competitive projects, including but not limited to Filecoin, Arweave, Sia, Storj as well as existing storage work in the Polkadot ecosystem
* Examine trade offs other decentralized storage providers have made including, but not limited to retrieval times, small v. large files, resiliency, cost efficacy, security & privacy, redundancy, user learning curve and environmental sustainability
* Begin to design features compatible with Polkadot’s technical approach and philosophy
* The research & design document will include the gathered requirements and the list of researched solutions & features that could meet those requirements, as well as all supporting evidence and documentation that led to those proposed requirements and features. The document will also expand its research on the “Key Questions and Anticipated Challenges” section | +| **0c.** | Feature Analysis | * In depth research of the technical feasibility of key features and components
*Evaluation of proposed feature sets, inclusive of a detailed compatibility/tradeoff matrix leading to a clearly defined set of proposed StorageHub features
* Stakeholders will be asked to provide feedback on those compatibility/tradeoffs and to help choose a good combination of features
* Definition and documentation of key use cases and scenarios | +| **0d.** | Article | * The main deliverable for the first month is v0.5 of the research & design document. The research and design document will include the feature analysis, proposed MVP feature set including key use cases, and address the points in (0b.) and (0c.) | + +### Milestone #2: Technical Deliverables +* Estimated Duration: 1 month +* FTE: 2.5 +* Costs: $42,250 (USD) + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License Type | CC BY 4.0 / GPLv3 | +| **0b.** | Documentation | * For the second milestone we will provide v1.0 of the research & design document. The v1.0 document will include a high level technical design & architecture of StorageHub, including major subsystems, incorporating and building upon research from the first v0.5 milestone
* This v1.0 research and design document will be shared with key stakeholders to obtain specific feedback that will help us continue to refine StorageHub
* In addition to this, we will also begin to build prototype code that supports and tests the v1.0 technical design considerations. A basic tutorial will be included that explains how a user can run our prototype code and send test transactions | +| **0c.** | Testing & Testing Guide | * Software developed for this milestone will be prototype quality, and thus will not have the tests required for production deployment. However, the prototype code will be sufficient to demonstrate viability or compatibility of key aspects of the design approach
* As outlined in (0b.), a basic tutorial will be included that explains how a user can run our prototype code and send test transactions | +| **0d.** | Docker | * We will provide a Dockerfile(s) that can be used to run the prototype associated with this milestone | +| **0e.** | Prototype Code | * We will create a Substrate and or RUST prototype to validate proposed designs described in the v1.0 design doc. In particular, the approach for the data provider role, and being able to store data in a redundant fashion, and retrieve data from the provider
* The source code for the prototype will be delivered as part of the second month milestone. The prototype will have limited features (e.g. not decentralized, limited API, etc) or might not be complete but will provide sufficient functionalities to demonstrate key parts of the proposed design
* We will provide a Dockerfile(s) that can be used to run the prototype associated with this milestone | +| **0f.** | Resource Estimation & Planning | * Estimate the time, budget, and resources required to implement a minimum viable feature set for the project
* Break down the feature into smaller tasks or user stories
* Create a proposed project plan that includes implementation milestones, and responsibilities
* Include proposed next steps in the research and design doc | +| **0g.** | Article | * The main deliverables for this milestone are defined as below
* Progressing the v0.5 document to a v1.0 state outlined in section (0b.)
* A Substrate and or RUST prototype to validate proposed designs described in the v1.0, outlined in section (0e.)
* A basic tutorial will be included that explains how a user can run our prototype code and send test transactions outlined in section (0c.) | + + +## Future Plans +* We are currently in the process of hiring fulltime resources that will be dedicated to this engineering effort. +* The intended long term plan is to successfully complete this initial grant to then set us up to apply for a follow on long term grant From a097d07d25447a60ba4da0704c96b32d5e7530c1 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 20 Sep 2023 15:25:15 +0200 Subject: [PATCH 632/665] Update index.md Add StorageHub --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index 638641193d9..e78c751a9e0 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,6 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DAOsign](https://daosign.org/) | [DAOsign](./DAOsign.md) | [GitHub](https://github.com/DAOsign) | ☐ | ☐ | ☐ | | [Zondax AG](https://zondax.ch/) | [PoC Polkadot Conformance Tests](./polkadot_tests.md) | [GitHub](https://github.com/zondax) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/sodazone) | [Ocelloids XCM Transfer Monitoring Service](ocelloids_xcm_monitoring_service.md) | [GitHub](https://github.com/sodazone) | ☐ | ☐ | ☐ | +| [Moonsong Labs](https://moonsonglabs.com/) | [StorageHub](StorageHub.mdd) | [GitHub](https://github.com/Moonsong-Labs) | ☐ | ☐ | ☐ | [🔝](#2023) From 2753ba556fe270e792eb01896b5823b34555931a Mon Sep 17 00:00:00 2001 From: David Hawig Date: Wed, 20 Sep 2023 15:26:01 +0200 Subject: [PATCH 633/665] Update index.md Fix links --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index e78c751a9e0..2485f83ad6a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -72,7 +72,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [DAOsign](https://daosign.org/) | [DAOsign](./DAOsign.md) | [GitHub](https://github.com/DAOsign) | ☐ | ☐ | ☐ | | [Zondax AG](https://zondax.ch/) | [PoC Polkadot Conformance Tests](./polkadot_tests.md) | [GitHub](https://github.com/zondax) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/sodazone) | [Ocelloids XCM Transfer Monitoring Service](ocelloids_xcm_monitoring_service.md) | [GitHub](https://github.com/sodazone) | ☐ | ☐ | ☐ | -| [Moonsong Labs](https://moonsonglabs.com/) | [StorageHub](StorageHub.mdd) | [GitHub](https://github.com/Moonsong-Labs) | ☐ | ☐ | ☐ | +| [Moonsong Labs](https://moonsonglabs.com/) | [StorageHub](./StorageHub.md) | [GitHub](https://github.com/Moonsong-Labs) | ☐ | ☐ | ☐ | [🔝](#2023) From eff195ba25430cd92a6770182752148e2380617b Mon Sep 17 00:00:00 2001 From: Noc2 Date: Wed, 20 Sep 2023 14:38:12 +0100 Subject: [PATCH 634/665] Fix website --- applications/StorageHub.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/applications/StorageHub.md b/applications/StorageHub.md index 93f5b783fee..ac54a8ebfc4 100644 --- a/applications/StorageHub.md +++ b/applications/StorageHub.md @@ -144,8 +144,8 @@ | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | Copyright and Licenses | CC BY 4.0 / GPLv3 | -| **0b.** | Research & Investigation | * Understand and clarify key requirements via conversations with key stakeholders
* Study existing solutions and designs to see what technologies and approaches can be leveraged vs. being created
* Research decentralized storage competitive projects, including but not limited to Filecoin, Arweave, Sia, Storj as well as existing storage work in the Polkadot ecosystem
* Examine trade offs other decentralized storage providers have made including, but not limited to retrieval times, small v. large files, resiliency, cost efficacy, security & privacy, redundancy, user learning curve and environmental sustainability
* Begin to design features compatible with Polkadot’s technical approach and philosophy
* The research & design document will include the gathered requirements and the list of researched solutions & features that could meet those requirements, as well as all supporting evidence and documentation that led to those proposed requirements and features. The document will also expand its research on the “Key Questions and Anticipated Challenges” section | -| **0c.** | Feature Analysis | * In depth research of the technical feasibility of key features and components
*Evaluation of proposed feature sets, inclusive of a detailed compatibility/tradeoff matrix leading to a clearly defined set of proposed StorageHub features
* Stakeholders will be asked to provide feedback on those compatibility/tradeoffs and to help choose a good combination of features
* Definition and documentation of key use cases and scenarios | +| **0b.** | Research & Investigation | * Understand and clarify key requirements via conversations with key stakeholders
* Study existing solutions and designs to see what technologies and approaches can be leveraged vs. being created
* Research decentralized storage competitive projects, including but not limited to Filecoin, Arweave, Sia, Storj as well as existing storage work in the Polkadot ecosystem
* Examine trade offs other decentralized storage providers have made including, but not limited to retrieval times, small v. large files, resiliency, cost efficacy, security & privacy, redundancy, user learning curve and environmental sustainability
* Begin to design features compatible with Polkadot’s technical approach and philosophy
* The research & design document will include the gathered requirements and the list of researched solutions & features that could meet those requirements, as well as all supporting evidence and documentation that led to those proposed requirements and features. The document will also expand its research on the “Key Questions and Anticipated Challenges” section | +| **0c.** | Feature Analysis | * In depth research of the technical feasibility of key features and components
*Evaluation of proposed feature sets, inclusive of a detailed compatibility/tradeoff matrix leading to a clearly defined set of proposed StorageHub features
* Stakeholders will be asked to provide feedback on those compatibility/tradeoffs and to help choose a good combination of features
* Definition and documentation of key use cases and scenarios | | **0d.** | Article | * The main deliverable for the first month is v0.5 of the research & design document. The research and design document will include the feature analysis, proposed MVP feature set including key use cases, and address the points in (0b.) and (0c.) | ### Milestone #2: Technical Deliverables @@ -156,12 +156,12 @@ | Number | Deliverable | Specification | | -----: | ----------- | ------------- | | **0a.** | License Type | CC BY 4.0 / GPLv3 | -| **0b.** | Documentation | * For the second milestone we will provide v1.0 of the research & design document. The v1.0 document will include a high level technical design & architecture of StorageHub, including major subsystems, incorporating and building upon research from the first v0.5 milestone
* This v1.0 research and design document will be shared with key stakeholders to obtain specific feedback that will help us continue to refine StorageHub
* In addition to this, we will also begin to build prototype code that supports and tests the v1.0 technical design considerations. A basic tutorial will be included that explains how a user can run our prototype code and send test transactions | -| **0c.** | Testing & Testing Guide | * Software developed for this milestone will be prototype quality, and thus will not have the tests required for production deployment. However, the prototype code will be sufficient to demonstrate viability or compatibility of key aspects of the design approach
* As outlined in (0b.), a basic tutorial will be included that explains how a user can run our prototype code and send test transactions | +| **0b.** | Documentation | * For the second milestone we will provide v1.0 of the research & design document. The v1.0 document will include a high level technical design & architecture of StorageHub, including major subsystems, incorporating and building upon research from the first v0.5 milestone
* This v1.0 research and design document will be shared with key stakeholders to obtain specific feedback that will help us continue to refine StorageHub
* In addition to this, we will also begin to build prototype code that supports and tests the v1.0 technical design considerations. A basic tutorial will be included that explains how a user can run our prototype code and send test transactions | +| **0c.** | Testing & Testing Guide | * Software developed for this milestone will be prototype quality, and thus will not have the tests required for production deployment. However, the prototype code will be sufficient to demonstrate viability or compatibility of key aspects of the design approach
* As outlined in (0b.), a basic tutorial will be included that explains how a user can run our prototype code and send test transactions | | **0d.** | Docker | * We will provide a Dockerfile(s) that can be used to run the prototype associated with this milestone | -| **0e.** | Prototype Code | * We will create a Substrate and or RUST prototype to validate proposed designs described in the v1.0 design doc. In particular, the approach for the data provider role, and being able to store data in a redundant fashion, and retrieve data from the provider
* The source code for the prototype will be delivered as part of the second month milestone. The prototype will have limited features (e.g. not decentralized, limited API, etc) or might not be complete but will provide sufficient functionalities to demonstrate key parts of the proposed design
* We will provide a Dockerfile(s) that can be used to run the prototype associated with this milestone | -| **0f.** | Resource Estimation & Planning | * Estimate the time, budget, and resources required to implement a minimum viable feature set for the project
* Break down the feature into smaller tasks or user stories
* Create a proposed project plan that includes implementation milestones, and responsibilities
* Include proposed next steps in the research and design doc | -| **0g.** | Article | * The main deliverables for this milestone are defined as below
* Progressing the v0.5 document to a v1.0 state outlined in section (0b.)
* A Substrate and or RUST prototype to validate proposed designs described in the v1.0, outlined in section (0e.)
* A basic tutorial will be included that explains how a user can run our prototype code and send test transactions outlined in section (0c.) | +| **0e.** | Prototype Code | * We will create a Substrate and or RUST prototype to validate proposed designs described in the v1.0 design doc. In particular, the approach for the data provider role, and being able to store data in a redundant fashion, and retrieve data from the provider
* The source code for the prototype will be delivered as part of the second month milestone. The prototype will have limited features (e.g. not decentralized, limited API, etc) or might not be complete but will provide sufficient functionalities to demonstrate key parts of the proposed design
* We will provide a Dockerfile(s) that can be used to run the prototype associated with this milestone | +| **0f.** | Resource Estimation & Planning | * Estimate the time, budget, and resources required to implement a minimum viable feature set for the project
* Break down the feature into smaller tasks or user stories
* Create a proposed project plan that includes implementation milestones, and responsibilities
* Include proposed next steps in the research and design doc | +| **0g.** | Article | * The main deliverables for this milestone are defined as below
* Progressing the v0.5 document to a v1.0 state outlined in section (0b.)
* A Substrate and or RUST prototype to validate proposed designs described in the v1.0, outlined in section (0e.)
* A basic tutorial will be included that explains how a user can run our prototype code and send test transactions outlined in section (0c.) | ## Future Plans From 8ee69f74c1fe432f3e139a73e974d09d2d077ff0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 21 Sep 2023 10:16:51 +0200 Subject: [PATCH 635/665] Update index.md Fix pallet-maci link and status --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 2485f83ad6a..cbbe1bb5818 100644 --- a/applications/index.md +++ b/applications/index.md @@ -493,7 +493,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Nathan Schwermann](https://github.com/nschwermann) | [PolkaJ Android Support](./polkaj_android_support.md) | [GitHub](https://github.com/nschwermann) | ☐ | ☒ | ☐ | | [Acala](https://acala.network/) | [xtokens - XCM Implementation for Fungible Assets](./xtokens.md) | [GitHub](https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xtokens) | ☐ | ☒ | ☒ | | [NUTS Finance](https://nuts.finance/) | [Stable Asset](./stable-asset.md) | [GitHub](https://github.com/nutsfinance) | ☐ | ☒ | ☒ | -| [MVP Workshop](https://mvpworkshop.co/) | [pallet-maci (Minimal Anti Collusion Infrastructure)](./substrate_startkit_GUI.md) | [GitHub](https://github.com/MVPWorkshop) | ☐ | ☐ | ☐ | +| [MVP Workshop](https://mvpworkshop.co/) | [pallet-maci (Minimal Anti Collusion Infrastructure)](./pallet_maci.md) | [GitHub](https://github.com/MVPWorkshop) | ☒ | ☐ | ☐ | | [X-Predict](https://x-predict.com/) | [Decentralized prediction market](./XPredictMarket.md) | [GitHub](https://github.com/XPredictMarket) | ☐ | ☐ | ☐ | | [Chevdor](https://www.chevdor.com/) | SRTOOL App | [GitLab](https://gitlab.com/chevdor/srtool-app) | ☐ | ☒ | ☒ | | [Bit.Country](http://bit.country/) | [A decentralized world - Phase 2](./bit_country_m2.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | From bfaff3e3c96d03ce43a0907e09beefcd04d1d22a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 21 Sep 2023 12:09:34 +0200 Subject: [PATCH 636/665] Update how-to-apply.md --- docs/Process/how-to-apply.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/Process/how-to-apply.md b/docs/Process/how-to-apply.md index cd1d80b9dca..23e7f73261b 100644 --- a/docs/Process/how-to-apply.md +++ b/docs/Process/how-to-apply.md @@ -4,9 +4,15 @@ title: 1. Application --- -:::caution +:::tip -The process below is independent of the [level](../Introduction/levels.md). Payment is made in fiat, Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +If you want to apply in **private**, you can do so [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. + +::: + +:::info + +Payments can be made in fiat, Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). Please indicate your preference in the application [as outlined in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md?plain=1#L7). ::: From 5d434fc1771cd2c79352fb2a69252fce9cdb10c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 21 Sep 2023 12:21:21 +0200 Subject: [PATCH 637/665] Update process.md Add Square One link --- docs/process.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/docs/process.md b/docs/process.md index 70e5231d29d..a78f5ecad07 100644 --- a/docs/process.md +++ b/docs/process.md @@ -2,12 +2,15 @@ title: Apply --- -If you are certain you want to apply for a W3F grant, head straight to our [application process documentation](Process/how-to-apply.md). Otherwise, check out the flowchart below for a broad overview of which funding source your application might fit best. +:::tip +Check out the [Substrate Square One](https://substrate.io/ecosystem/square-one/) website for all kinds of ecosystem support opportunities. -## Funding Opportunities Overview +::: + +If you are certain you want to apply for a W3F grant, head straight to our [application process documentation](Process/how-to-apply.md). Alternatively, the flowchart below outlines where we think the grants program fits in relation to other popular funding opportunities. -For a longer list and a description of the programs listed below, check out [our page on alternative funding opportunities](funding.md). +## Funding Opportunities Overview ```mermaid flowchart LR @@ -30,3 +33,5 @@ flowchart LR click D "https://wiki.polkadot.network/docs/en/learn-treasury" "https://wiki.polkadot.network/docs/en/learn-treasury" _blank click H "https://www.substrate.io/builders-program/" "https://www.substrate.io/builders-program" _blank ``` + +For a longer list and a description of the programs listed below, check out the [Substrate Square One](https://substrate.io/ecosystem/square-one/) website and [our page on alternative funding opportunities](funding.md). From 3208999144d084d2353d594808940cc7ec69feb8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 21 Sep 2023 12:26:02 +0200 Subject: [PATCH 638/665] Update funding.md Add link to Square One --- docs/funding.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/funding.md b/docs/funding.md index 60f063e8a9c..3a36c19c2b0 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -5,6 +5,12 @@ title: 🪙 Alternative Funding Some funding sources might be more and some less suitable for your project throughout its various stages. We encourage you to explore alternative funding options listed below. Please note, however, that you should not seek to fund the **same scope of work** from multiple sources and that any team found doing so will have its Web3 Foundation support terminated. +:::tip + +If you are unsure about what's the best next step for you and your project, consider reaching out to the [Substrate Square One](https://substrate.io/ecosystem/square-one/) team. + +::: + ### Treasury The treasury is a pot of on-chain funds collected through transaction fees, slashing, staking inefficiencies, etc. The funds held in the treasury can be spent on spending proposals. Both [Polkadot](https://polkadot.network/) and [Kusama](https://kusama.network/) offer everyone the opportunity to apply for funding via the treasury. See: From 7e647170fa698b46b930e7602f22314215ab049d Mon Sep 17 00:00:00 2001 From: Jacob Lee Date: Thu, 21 Sep 2023 23:02:37 +0800 Subject: [PATCH 639/665] Update Claps.md (#1988) * Update Claps.md Submit amendment with timeline extension on development roadmap * Update Claps.md Update the estimated duration (total + milestones) 1. Total Estimated Duration: 8 months (Adjusted from 4.5 months) 2. Milestone 1 - Patient Identity and Security Framework Estimated Duration: 6 months (Adjusted from 2.5 months) --- applications/Claps.md | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/applications/Claps.md b/applications/Claps.md index 35ccb460388..885da5632f0 100644 --- a/applications/Claps.md +++ b/applications/Claps.md @@ -149,15 +149,38 @@ New project ## Development Roadmap :nut_and_bolt: +### Amendment - Timeline Extension (Sep, 18 2023) + +Due to unforeseen challenges and to ensure the quality of our deliverables, we are proposing an extension to the project timeline. + +Original Estimated End Date: *End of the 4.5 months from April 2023* +Revised Estimated End Date: **December 2023** + +**Reasons for Extension:** +- *Thank you for supporting Claps Health and granting us the opportunity to bring this vision to life. Since initiating the project in April 2023 (approved by middle of March), we've faced unforeseen challenges in the Rust and Substrate Technology learning curve. While we've onboarded experienced Substrate professionals to address this, the Item 3 related to zk-proof still to be develop.* + +- *Milestone 1: Patient Identity and Security Framework +Status: Delayed due to zk-proof +Estimated Completion Date: Oct 30, 2023* +- *Milestone 2: Patient Engagement and Data Sharing +Status: Delayed due to Milestone 1 +Estimated Completion Date: Dec 30, 2023* + +**Technical Specification amendment:** +- *Patient ID creation - Develop the patient ID creation tool in Javascript. Changed to Develop the patient ID creation tool in Dart.* +- *Patient ID on-chain authentication - zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by !ink Smart Contract. Changed to Patient ID on-chain authentication - zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by xcm, runtime module or !ink smart contract.* + +We assure the committee that despite the delay, the quality and scope of the project will remain consistent with our initial proposal. + ### Overview -- **Total Estimated Duration:** 4.5 months +- **Total Estimated Duration:** 8 months (Adjusted from 4.5 months) - **Full-Time Equivalent (FTE):** 4 FTE - **Total Costs:** 30,000 USD ### Milestone 1 - Patient Identity and Security Framework -- **Estimated Duration:** 2.5 month +- **Estimated Duration:** 6 months (Adjusted from 2.5 months) - **Developers:** FTE x 4 - **(Product Design x 1, Dapp Engineer x 1, System Engineer x 1, App Engineer x 1)** - **Costs:** 20,000 USD @@ -169,16 +192,16 @@ New project | 0c. | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | | 0d. | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | | 0e. | Article | We will post an article on Twitter and Meta(Facebook) for English and Mandarin speakers communities. | -| 1 | Patient ID creation | \- Develop the patient ID creation tool in Javascript.
\- Generate a new ID on client-side for the patient based on BIP39. (12 words passphrase)
\- Encrypted key store(private key) by patient user’s password (AES-256 GCM mode)
\- Implement the decentralized design using public key cryptography. (Client signed by private key) | +| 1 | Patient ID creation | \- Develop the patient ID creation tool in Dart.
\- Generate a new ID on client-side for the patient based on BIP39. (12 words passphrase)
\- Encrypted key store(private key) by patient user’s password (AES-256 GCM mode)
\- Implement the decentralized design using public key cryptography. (Client signed by private key) | | 2 | Patient profile management module | \- Patient profile off-chain management tools developed by JAVA
\- Support AWS S3 storage
\- Updating of patient profile
\- ECIES end-to-end data encryption to secure profile data transfer. | -| 3 | Patient ID on-chain authentication | \- zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by !ink Smart Contract
\- Receive credential by trust issuer (token file)
\- Zero-knowledge proof for on-chain authentication to prove patient ID without private information | +| 3 | Patient ID on-chain authentication | \- zkSNARKs Groth16 based on Non-Interactive Zero-Knowledge Proof (NIZKP) developed by xcm or runtime module or !ink Smart Contract
\- Receive credential by trust issuer (token file)
\- Zero-knowledge proof for on-chain authentication to prove patient ID without private information | | 4 | Challenge card dapp module | Provide a way for users to set personal goals, track their progress, and receive rewards for their efforts. Dapp developed in ink! smart contract.

\- Add challenge card
\- Add personalized mission
\- Delete challenge card
\- Receive daily mission
\- Receive rewards by mission completed
\- Receive rewards by challenge completed
\- Rewards by fungible tokens | | 5 | Create database | Create a docker container to start a mySQL database to store all the information, define the models to store and create tables and indexes. | | 6 | Database encryption module | We will implement a database encryption AES-256 GCM module of all stored and transmitted data to prevent unauthorized access or tampering. Developed by JAVA. | | 7 | Android apk | We will provide android apk for above challenge card data input and functional verification
We will provide android apk for user challenge card with wallet to receive rewards | | 8 | Testing | Achieve a testing coverage of the functionalities above 90% | -### Milestone 2 - CPatient Engagement and Data Sharing +### Milestone 2 - Patient Engagement and Data Sharing - **Estimated Duration:** 2 month - **Developers:** FTE x 4 - **(Product Design x 1, Dapp Engineer x 1, System Engineer x 1, APP Engineer x 1)** From 880f3d192a8dcde8f20705f969da96fc6e47df1c Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Thu, 21 Sep 2023 12:03:00 -0300 Subject: [PATCH 640/665] Update index.md (#1989) --- applications/index.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/applications/index.md b/applications/index.md index cbbe1bb5818..293918b54df 100644 --- a/applications/index.md +++ b/applications/index.md @@ -133,7 +133,7 @@ Use this page for an overview of all public grants and their status. Use the sid | [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | | [OmniBTC](https://omnibtc.finance/) | [Polkadot Smart Chain](psc.md) | [GitHub](https://github.com/OmniBTC/PSC) | ☐ | ☒ | ☒ | | [ChainSafe](https://chainsafe.io/) | [Multix - a simple interface to use complex multisigs](Multix-a-simple-UI-for-complex-multisig.md) | [GitHub](https://github.com/ChainSafe) | ☐ | ☒ | ☒ | -| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☐ | ☐ | +| [Composable Finance LTD](https://www.composable.finance/) | [CosmWasm VM](CosmWasmVM-CoreProduct.md) | [GitHub](https://github.com/ComposableFi/) | ☐ | ☒ | ☐ | | [Asyoume inc](https://www.asyou.me) | [Dao-entrance: online collaboration tool for web3](dao-entrance-phase-1.md) | [GitHub](https://github.com/DAO-entrance) | ☒ | ☒ | ☐ | | [Talentica Software](https://www.talentica.com/) | [ink!/pallet/solidity performance benchmarking](ink-pallet-benchmarking.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | | [Societal Labs Ltd.](https://www.sctl.xyz/) | [Societal - MVP - Phase 2](./societal_grant2.md) | [GitHub](https://github.com/sctllabs) | ☐ | ☒ | ☒ | @@ -149,8 +149,8 @@ Use this page for an overview of all public grants and their status. Use the sid | [Off-Narrative Labs](https://github.com/Off-Narrative-Labs) | [Tuxedo](tuxedo.md) | [GitHub](https://github.com/JoshOrndorff) | ☐ | ☒ | ☒ | | [FuzzLand](https://fuzz.land/) | [FuzzLand](FuzzLand.md) | [GitHub](https://github.com/fuzzland) | ☐ | ☐ | ☐ | | [Fuu](https://github.com/ff13dfly/) | [Anchor, On-chain Linked List pallet and Name Service](Anchor.md) | [GitHub](https://github.com/ff13dfly/Anchor) | ☐ | ☒ | ☒ | -| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☒ | ☐ | -| [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☐ | ☐ | +| [hack-ink](https://hack.ink/) | [Slothunter](slothunter.md) | [GitHub](https://github.com/hack-ink) | ☐ | ☒ | ☒ | +| [Invers Inc](https://invers.tech/) | [Zkwasm Rollups Transfer](zkwasm-rollups-transfer.md) | [GitHub](https://github.com/zero-network) | ☐ | ☒ | ☐ | | [decentraDOT](https://decentradot.com/) | [Cyclops Validator Dashboard](cyclops.md) | [GitHub](https://github.com/ArthurHoeke?tab=repositories) | ☐ | ☒ | ☒ | | [Anwesh Nayak](https://github.com/muddlebee) | [Mempool Dashboard - Version 2](polkadot-mempool-explorer-v2.md) | [GitHub](https://github.com/muddlebee) | ☐ | ☐ | ☐ | | [Tellor Inc](https://tellor.io/) | [Tellor Oracle Protocol](Tellor.md) | [GitHub](https://github.com/tellor-io/) | ☐ | ☒ | ☐ | From 8cca484f56c415df0d54da5971acf97f1eac5e59 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 21 Sep 2023 14:27:28 -0400 Subject: [PATCH 641/665] Update verida_network.md (#1990) --- applications/verida_network.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/verida_network.md b/applications/verida_network.md index 289b8b83b0a..78828d57795 100644 --- a/applications/verida_network.md +++ b/applications/verida_network.md @@ -3,6 +3,7 @@ - **Team Name:** Verida PTE LTD - **Payment Address:** 0x1596525C44f68b45CDd53db49b03A390e2687331 (USDC) - **Level:** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/887#issuecomment-1719349723) ## Project Overview :page_facing_up: From b560d6c9760cf1064afb8dbedb6fc45d84fb9a50 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Thu, 21 Sep 2023 14:43:21 -0400 Subject: [PATCH 642/665] Update wasmedge_substrate.md (#1991) --- applications/wasmedge_substrate.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/wasmedge_substrate.md b/applications/wasmedge_substrate.md index 12a3c89d54c..b464bb6cffa 100644 --- a/applications/wasmedge_substrate.md +++ b/applications/wasmedge_substrate.md @@ -3,6 +3,7 @@ - **Team Name:** Second State - **Payment Address:** 0xf212a28a62d01549c323a5feac7bbc8534064c41 (Ethereum USDT) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 2 +- **Status:** [Terminated](https://github.com/w3f/Grants-Program/pull/862#issuecomment-1730100588) ## Project Overview :page_facing_up: From c532482e3e56518af163e242d0de590d5714d254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 21 Sep 2023 22:31:55 +0200 Subject: [PATCH 643/665] Update RFPs (#1993) --- .../Open/anti-collusion_infrastructure.md | 5 ++- docs/RFPs/Open/xcm-tool.md | 6 ++-- .../Under Development/data_analysis_tools.md | 2 +- .../polkadot-protocol_conformance_tests.md | 34 +++++++++---------- docs/rfps.md | 12 +++---- 5 files changed, 29 insertions(+), 30 deletions(-) rename docs/RFPs/{Open => Under Development}/polkadot-protocol_conformance_tests.md (74%) diff --git a/docs/RFPs/Open/anti-collusion_infrastructure.md b/docs/RFPs/Open/anti-collusion_infrastructure.md index 01e8fca5e3d..7c202fdfa3f 100644 --- a/docs/RFPs/Open/anti-collusion_infrastructure.md +++ b/docs/RFPs/Open/anti-collusion_infrastructure.md @@ -22,5 +22,8 @@ The milestones below are just an initial draft. The milestones can be structured | 1. | Anti-collusion | Implement a mechanism to prevent bribery and collusion, leveraging encrypting votes (ZKPs) potentially via [Minimum Anti-Collusion Infrastructure (MACI)](https://ethresear.ch/t/minimal-anti-collusion-infrastructure/5413) | | 2. | Voting Example | Integrate a basic voting example that lets you test the mechanism | +### Previous grant applications - +- [Maki](https://github.com/w3f/Grants-Program/pull/1144) +- [pallet-maci](https://github.com/w3f/Grants-Program/pull/232) +- [Infimum](https://github.com/w3f/Grants-Program/pull/1948) diff --git a/docs/RFPs/Open/xcm-tool.md b/docs/RFPs/Open/xcm-tool.md index 252516cbede..d328524adfc 100644 --- a/docs/RFPs/Open/xcm-tool.md +++ b/docs/RFPs/Open/xcm-tool.md @@ -6,12 +6,12 @@ ## Project Description :page_facing_up: -XCM is the crosschain communication standard that will be used by all the parachains. Currently XCM is still in early stage but is already support some main usecases such as crosschain transfer of fungible tokens. +XCM is the crosschain communication standard that will be used by all the parachains. Currently XCM is still in an early stage, but already supports some main usecases such as crosschain transfer of fungible tokens. There are currently two major areas of XCM that are still awaiting to be improved: - Extend & improve [xcm-format](https://github.com/paritytech/xcm-format) to support more use cases - - We have few issues & PRs so we are on track on getting this done but of couse more helps as always welcome + - We have few issues & PRs so we are on track on getting this done, but of couse more help is as always welcome - Implement library & tools to ease the development of XCM related code - [xtokens](https://github.com/w3f/Open-Grants-Program/blob/master/applications/xtokens.md) handles the fungible asset implementations, and we also need a similar one for NFTs - We need some tool to allow developers to test XCM related code: https://github.com/paritytech/polkadot/issues/2544 @@ -21,4 +21,4 @@ The scope of the new project count be one of: - Develop tools to help developers to test XCM-related code - Develop pallets or utility libraries to better handle the async nature of XCM communication -- Develop a pallet to handle crosschain transfers of NFTs +- Develop a pallet to handle crosschain transfers of NFTs ([relevant discussion](https://github.com/paritytech/xcm-format/pull/35)https://github.com/paritytech/xcm-format/pull/35) diff --git a/docs/RFPs/Under Development/data_analysis_tools.md b/docs/RFPs/Under Development/data_analysis_tools.md index 67ba67103d1..656dd6b0ba4 100644 --- a/docs/RFPs/Under Development/data_analysis_tools.md +++ b/docs/RFPs/Under Development/data_analysis_tools.md @@ -1,6 +1,6 @@ # Data Analysis Tools for Substrate-based Blockchains -- **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/pull/1716), [Under Development 2](https://github.com/w3f/Grants-Program/pull/1768) +- **Status:** [Under Development 1](https://github.com/w3f/Grants-Program/pull/1716), [Under Development 2](https://github.com/w3f/Grants-Program/pull/1768), [Under Development 3](https://github.com/w3f/Grants-Program/pull/1883) - **Proposer:** [dsm-w3f](https://github.com/dsm-w3f), [michalisFr](https://github.com/michalisFr) ## Project Description :page_facing_up: diff --git a/docs/RFPs/Open/polkadot-protocol_conformance_tests.md b/docs/RFPs/Under Development/polkadot-protocol_conformance_tests.md similarity index 74% rename from docs/RFPs/Open/polkadot-protocol_conformance_tests.md rename to docs/RFPs/Under Development/polkadot-protocol_conformance_tests.md index 2852771e682..a262adbda0e 100644 --- a/docs/RFPs/Open/polkadot-protocol_conformance_tests.md +++ b/docs/RFPs/Under Development/polkadot-protocol_conformance_tests.md @@ -1,6 +1,6 @@ # Polkadot Protocol Conformance Tests -* **Status:** Open +* **Status:** [Under Development (Zondax)](https://github.com/w3f/Grants-Program/pull/1956), [Under Development (LimeChain)](https://github.com/w3f/Grants-Program/pull/1950) * **Proposer:** [Bhargav Bhatt](https://github.com/bhargavbh), [David Hawig](https://github.com/Noc2) * **Objectives:** Create and maintain a comprehensive test-suite for conformance of core functionalities of Polkadot Host. @@ -14,23 +14,23 @@ The objectives are multifold. The test-suite can: Initially, the focus would be on unit tests with tests designed and generated at the right layer of abstraction to accommodate the existing implementations. The scope of the test-suite covers all the components/protocols described in the Specification but we would like to prioritise the following: -- Mapping the consensus attack surface and producing fuzzing targets accordingly. Indicative, non-exhaustive list of potential targets can be seen below: - - Host API: - - sequences of storage and child-storage operations - - cryptography primitives, particularly those exposed in the Host API - - trie root +- Mapping the consensus attack surface and producing fuzzing targets accordingly. An indicative, non-exhaustive list of potential targets: + - Host API + - Sequences of storage and child-storage operations + - Cryptography primitives, particularly those exposed in the Host API + - Trie root - BABE - Block import - - block validation - - next/current validators aka VRF/block lottery - - secondary slot verification + - Block validation + - Next/current validators aka VRF/block lottery + - Secondary slot verification - GRANDPA - - block import - - block validation - - justification import & validation/verification -- trie proof verification -- scale encoding and decoding, for specific message types, and randomly generated ones -- parachain candidate validation + - Block import + - Block validation + - Justification import & validation/verification +- Trie proof verification +- Scale encoding and decoding, for specific message types, and randomly generated ones +- Parachain candidate validation The goal of the initial grant should be to develop a PoC. The long-term goal should be to develop a comprehensive test suite that is funded by the on-chain treasury. @@ -39,10 +39,8 @@ The goal of the initial grant should be to develop a PoC. The long-term goal sho - [GitHub polkadot-tests](https://github.com/w3f/polkadot-tests) - [Chopsticks](https://github.com/AcalaNetwork/chopsticks) - [Zombienet](https://github.com/paritytech/zombienet) -- [try-runtime](https://docs.substrate.io/reference/command-line-tools/try-runtime/) +- [try-runtime](https://paritytech.github.io/try-runtime-cli/try_runtime/) ## Deliverables The structure of the grant and the milestones depends highly on the project itself and the goal of the initial PoC. It’s therefore up to the applying team to come up with a milestone and delivery structure. - - diff --git a/docs/rfps.md b/docs/rfps.md index 0ecc235cf3a..b56fe3a3e0e 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -23,29 +23,27 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | -| [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 29.11.2021 | +| [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 21.09.2023 | | [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | | [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | -| [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 08.05.2023 | +| [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 21.09.2023 | | [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.11.2021 | | [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 07.01.2023 | -| [xcm-tool.md](RFPs/Open/xcm-tool.md) | 20.07.2021 | - +| [xcm-tool.md](RFPs/Open/xcm-tool.md) | 21.09.2023 | -
🟡 Under Development: One or more teams are working on this. We might be interested in additional implementations, but it’s better to double check this with the grants team. | RFP | Last Updated | | :-- | :----------: | | [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | | [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | -| [analysis-website-and-data-platform.md](RFPs/Under%20Development/analysis-website-and-data-platform.md) | 28.06.2023 | -| [data_analysis_tools.md](RFPs/Under%20Development/data_analysis_tools.md) | 28.06.2023 | +| [analysis-website-and-data-platform.md](RFPs/Under%20Development/analysis-website-and-data-platform.md) | 21.09.2023 | +| [data_analysis_tools.md](RFPs/Under%20Development/data_analysis_tools.md) | 21.09.2023 | | [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 02.06.2023 | | [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | | [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | From 7e790c3f789f4d8d7d021ec8266404441da5a000 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Thu, 21 Sep 2023 22:36:01 +0200 Subject: [PATCH 644/665] Update index.md --- applications/index.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/applications/index.md b/applications/index.md index 293918b54df..b4c3e3acf5a 100644 --- a/applications/index.md +++ b/applications/index.md @@ -5,12 +5,15 @@ layout: applications Use this page for an overview of all public grants and their status. Use the sidebar to navigate directly to a specific grant application document. -> **:loudspeaker:** This page provides an overview of accepted grant applications, their progress and a link to their GitHub repositories. In cases where the link points to an organization, you should be aware that the grant application itself **is often an independent project unrelated to other work done by the teams**. -> -> Furthermore, the page lists terminations which happened due to a breach of the terms of the grants programs. Additionally, teams might have decided to stop working on the grant—though not necessarily on the project itself—for various reasons, which is not reflected on this sheet. -> -> Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). +:::info +This page provides an overview of accepted grant applications, their progress and a link to their GitHub repositories. In cases where the link points to an organization, you should be aware that the grant application itself **is often an independent project unrelated to other work done by the teams**. + +Furthermore, the page lists terminations which happened due to a breach of the terms of the grants programs. Additionally, teams might have decided to stop working on the grant—though not necessarily on the project itself—for various reasons, which is not reflected on this sheet. + +Besides, **there is a clear difference between an application being accepted and the successful delivery of the respective project**, and only teams that have successfully delivered a milestone are allowed to make public announcements on the matter or to use our [badge](https://github.com/w3f/General-Grants-Program/blob/master/grants/grant-badge-guidelines.md). The badge can also never be used as a general endorsement for a team. Violations to this policy can be reported [here](mailto:grants@web3.foundation). + +::: - [2023](#2023) - [🏄 Wave 19 - Q3 2023](#️-wave-19---q3-2023) From 18ec8fc393295804506e3869ecf6a0ebc13a7060 Mon Sep 17 00:00:00 2001 From: Jonathan Brown Date: Fri, 22 Sep 2023 17:10:13 +0700 Subject: [PATCH 645/665] Create hybrid2.md (#1964) * Create hybrid2.md * Update applications/hybrid2.md Co-authored-by: S E R A Y A --------- Co-authored-by: S E R A Y A --- applications/hybrid2.md | 188 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 188 insertions(+) create mode 100644 applications/hybrid2.md diff --git a/applications/hybrid2.md b/applications/hybrid2.md new file mode 100644 index 00000000000..d74c7f2a1a9 --- /dev/null +++ b/applications/hybrid2.md @@ -0,0 +1,188 @@ +# Hybrid Indexer Follow-up + +- **Team Name:** Jonathan Brown +- **Payment Address:** 0x36a7401F269555916a0243E586234D3Bbf5A0c36 (DAI) +- **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1 + +## Project Overview :page_facing_up: + +This application is for a follow-up grant to the original Hybrid Block Explorer grant: https://github.com/w3f/Grants-Program/pull/1582 + +### Overview + +![Hybrid Architecture](https://raw.githubusercontent.com/ethernomad/hybrid-diagram/main/hybrid.png) + +The [original grant](https://github.com/w3f/Grants-Program/blob/master/applications/hybrid.md) for the Hybrid Block Explorer involved creating a [Rust library](https://github.com/hybrid-explorer/hybrid-indexer) that can be utilized to create an event indexer for any Substrate chain. A [Rust project](https://github.com/hybrid-explorer/polkadot-indexer/) to index all Polkadot-based chains was delivered. Additionally, a rudimentary [browser dapp](https://github.com/hybrid-explorer/hybrid-dapp) was produced to provide a user interface to query the index and load event details from the chain. + +This follow-up grant application is specifically to improve the indexer component of the project. + +### Project Details + +Before the indexer can be used effectively by the Polkadot community, there are various improvements that need to be made: + +#### Indexer Improvements + +* Currently there are two indexer threads, one for indexing new finalized blocks, and one to index old blocks. This is unnecessarily complex. Combining these threads will make the codebase much simpler. + +* The indexer needs to verify that it is indexing the correct chain. If it connects to the wrong endpoint or opens the wrong database, incorrect data would be present in the index. + +* Terminal output needs to be improved with configurable levels of verbosity. Statistics need to be output in a regular time interval, not block interval. + +* Error handling needs to be improved. Currently many error conditions are silently ignored. Exiting needs to be handled gracefully. + +#### Reverse Batch Indexing + +Currently when the indexer is indexing old blocks it starts at a specified block and works forward, eventually catching up with head. When the indexer is restarted it will resume where it left off. + +Typically users are more interested in recent blocks. If a user is indexing on their own device it can take many hours or days for the batch indexer to catch up with head. + +If the user wants to index from an earlier block, they have to re-index all the already indexed blocks. + +The solution is for the batch indexer to always start indexing backwards from head and store in the database which spans of blocks have been indexed with which version of the indexer. + +The indexer currently trusts that new finalized blocks are delivered sequentially. The indexer needs to verify that no blocks have been ommitted. If a block has been omitted or the WSS connection is broken and reestablished then the batch indexing will need to restart from head. + +#### Database Improvements + +* Currently, the event parameter types that are available to be indexed are hardcoded in the indexer library. The API needs to be extended so that chain indexers can specify custom parameter types, beyond those in Substrate. + +* In addition to indexing event parameters, the indexer can also index which variants of events have occurred. This is very useful. For example, the indexer can return all balance transfers that have occurred. This index is the largest because every event that occurs is a separate database entry. Making this index optional will greatly reduce the storage space for those users who do not need it. + +* Hybrid uses the Sled database library. Tunables [cache_capacity](https://docs.rs/sled/latest/sled/struct.Config.html#method.cache_capacity) and [mode](https://docs.rs/sled/latest/sled/struct.Config.html#method.mode) should be exposed in the indexer. + +#### WS API Improvements + +* Currently, to receive status updates it is necessary to continually query the indexer. It should be possible to subscribe to status updates. + +* It should be possible to query how much disk space is used for each index. This can be implemented using the following method: [size_on_disk](https://docs.rs/sled/latest/sled/struct.Db.html#method.size_on_disk). + +* It is currently possible to subscribe to event searches. It needs to be possible to unsubscribe. + +* A Rust library needs to be written to make it easier to query Hybrid indexes from Rust programs. + +## Team :busts_in_silhouette: + +### Team members + +Jonathan Brown + +### Contact + +- **Contact Name:** Jonathan Brown +- **Contact Email:** jbrown@acuity.social +- **Website:** n/a + +### Legal Structure + +- **Registered Address:** (shared privately) +- **Registered Legal Entity:** n/a + +### Team's experience + +Jonathan Brown is the sole developer of Hybrid Indexer and dapp. + +### Team Code Repos + +- https://github.com/hybrid-explorer/hybrid-indexer +- https://github.com/hybrid-explorer/polkadot-indexer +- https://github.com/hybrid-explorer/hybrid-dapp + +- https://github.com/ethernomad + +### Team LinkedIn Profiles (if available) + +- n/a + +## Development Status :open_book: + +Work on the deliverables defined in this application has not started yet. + +## Development Roadmap :nut_and_bolt: + +### Overview + +- **Total Estimated Duration:** 12 weeks +- **Full-Time Equivalent (FTE):** 1 +- **Total Costs:** 10,000 USD + +### Milestone 1 — Indexer Improvements + +- **Estimated duration:** 3 weeks +- **FTE:** 1 +- **Costs:** 2,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can specify chain identifying information and control logging verbosity. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Combine head and batch indexer threads | The codebase will be simplified by combining head and batch indexing into a single thread. | +| 2. | Check correct chain | The indexer will ensure that both the chain being indexed and the existing index database have the correct chain information. | +| 3. | Improved logging | Verbosity level will be controlled by command line parameter. Statistics will be output with a regular time interval, not block interval. | +| 4. | Improved error checking | All error conditions in the codebase will be handled correctly. Exiting will be handled gracefully. | + + +### Milestone 2 — Reverse Batch Indexing + +- **Estimated duration:** 3 weeks +- **FTE:** 1 +- **Costs:** 2,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can declare starting blocks for updated indexers. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Index backwards | When the indexer starts it should always start indexing backwards from head. | +| 2. | Store indexed spans | The indexer should store in the database a record of which spans of blocks have been indexed with which version of the indexer and utilize this information to avoid redundantly indexing blocks multiple times. | +| 3. | Declare indexer start blocks | Each chain indexer can declare which block each version of the indexer should start from. Automatically re-index blocks after upgrading the indexer. | + +### Milestone 3 — Database Improvements + +- **Estimated duration:** 3 weeks +- **FTE:** 1 +- **Costs:** 2,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can implement new indexes, omit the variant index and adjust database tunables. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 1. | Support additional indexes | Chain indexers will be able to define additional index parameter types that can be indexed. | +| 2. | Variant index optional | Variant indexing will be made optional. | +| 3. | Expose cache_capacity() and mode() | These Sled database parameters will be exposed on the command line. | + +### Milestone 4 — WebSocket API Improvements + +- **Estimated duration:** 3 weeks +- **FTE:** 1 +- **Costs:** 2,500 USD + +| Number | Deliverable | Specification | +| -----: | ----------- | ------------- | +| **0a.** | License | Apache 2.0 | +| **0b.** | Documentation | We will provide both **inline documentation** of the code and a basic **tutorial** that explains how a user can subscribe to status updates, unsubscribe, query index storage space, and use the Hybrid Rust API. | +| **0c.** | Testing and Testing Guide | Core functions will be fully covered by comprehensive unit tests to ensure functionality and robustness. In the guide, we will describe how to run these tests. | +| **0d.** | Docker | We will provide a Dockerfile(s) that can be used to test all the functionality delivered with this milestone. | +| 0e. | Article | We will publish an **article** describing the improvements to the indexer. | +| 1. | Status subscription | It will be possible to subscribe to status updates. | +| 2. | Unsubscribing | It will be possible to unsubscribe from status updates and event parameter watching. | +| 3. | Report each index size | It will be possible to get a report of how much storage space is used by each index. | +| 4. | Rust API | A Rust library will be developed to make it easier for Rust applications to query Hybrid indexes. | + +## Future Plans + +- indexing block prior to V14 metadata (block #7,229,126 on Polkadot). See [issue](https://github.com/paritytech/subxt/issues/793#issuecomment-1386902010). + +- desktop dapp - build a block explorer dapp in Rust + +- support for tokens and nfts + +- add support for ink! smart contracts with decentralized source code publishing + +- maintain Hybrid as the most decentralized Substrate block explorer + +- marketing From 924288a11d564459b2879d075f2fc6d83da6fc96 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Fri, 22 Sep 2023 12:12:50 +0200 Subject: [PATCH 646/665] Update index.md Add Hybrid Explorer --- applications/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/applications/index.md b/applications/index.md index b4c3e3acf5a..37e10456bcc 100644 --- a/applications/index.md +++ b/applications/index.md @@ -76,6 +76,7 @@ Besides, **there is a clear difference between an application being accepted and | [Zondax AG](https://zondax.ch/) | [PoC Polkadot Conformance Tests](./polkadot_tests.md) | [GitHub](https://github.com/zondax) | ☐ | ☐ | ☐ | | [SO/DA zone](https://github.com/sodazone) | [Ocelloids XCM Transfer Monitoring Service](ocelloids_xcm_monitoring_service.md) | [GitHub](https://github.com/sodazone) | ☐ | ☐ | ☐ | | [Moonsong Labs](https://moonsonglabs.com/) | [StorageHub](./StorageHub.md) | [GitHub](https://github.com/Moonsong-Labs) | ☐ | ☐ | ☐ | +| [Jonathan Brown](https://acuity.social/) | [Hybrid Explorer Phase 2](hybrid2.md) | [GitHub](https://github.com/hybrid-explorer) | ☐ | ☐ | ☐ | [🔝](#2023) From 006b99e817965ad9922b7294fc821888c293b382 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 22 Sep 2023 16:58:27 +0200 Subject: [PATCH 647/665] Change bg color of admonitions (#1996) --- src/css/custom.css | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/css/custom.css b/src/css/custom.css index daabdbe71ba..7bff5bdfc88 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -145,4 +145,15 @@ a.navbar__item{ a:hover.navbar__item{ background-size: 0 3px, 100% 3px; +} + +/* More prominent admonitions */ +.theme-admonition-danger { + border-left: 5px solid rgb(0, 0, 0); + background-color: rgba(255, 0, 0, 0.238); +} + +.theme-admonition-info { + border-left: 5px solid rgb(0, 0, 0); + background-color: rgba(255, 255, 0, 0.238); } \ No newline at end of file From c3b2175050ca0424d68fb1c92061e629767cf304 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Fri, 22 Sep 2023 16:59:51 +0200 Subject: [PATCH 648/665] Update rfps.md Fix link --- docs/rfps.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/rfps.md b/docs/rfps.md index b56fe3a3e0e..92c4bc5f66f 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -40,7 +40,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | -| [alternative_polkadot_host_implementations.md](RFPs/Open/alternative_polkadot_host_implementations.md) | 02.03.2023 | +| [alternative_polkadot_host_implementations.md](RFPs/Under%20Development/alternative_polkadot_host_implementations.md) | 02.03.2023 | | [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | | [analysis-website-and-data-platform.md](RFPs/Under%20Development/analysis-website-and-data-platform.md) | 21.09.2023 | | [data_analysis_tools.md](RFPs/Under%20Development/data_analysis_tools.md) | 21.09.2023 | From dd29552dd168da33da3e891d0128163b2da67722 Mon Sep 17 00:00:00 2001 From: Diogo <112647953+dsm-w3f@users.noreply.github.com> Date: Fri, 22 Sep 2023 15:37:49 -0300 Subject: [PATCH 649/665] Update index.md (#1998) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 37e10456bcc..422b02dd48b 100644 --- a/applications/index.md +++ b/applications/index.md @@ -63,7 +63,7 @@ Besides, **there is a clear difference between an application being accepted and | [Stake Plus Inc](https://stake.plus) | [Treasury Tracker](TreasuryTracker.md) | [GitHub](https://github.com/stake-plus) | ☐ | ☐ | ☐ | | [MOBR Systems](https://www.mobr.ai) | [Polkadot Analytics Platform](polkadot_analytics_platform.md) | [GitHub](https://github.com/mobr-ai) | ☐ | ☒ | ☐ | | [Infra3](https://network.infra-3.xyz) | [Hyperdot - Powerful data analysis and creations platform](Hyperdot.md) | [GitHub](https://github.com/Infra3-Network/hyperdot) | ☐ | ☐ | ☐ | -| [David Semakula](https://github.com/davidsemakula) | [ink! analyzer (phase 2)](ink-analyzer-phase-2.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☐ | ☐ | +| [David Semakula](https://github.com/davidsemakula) | [ink! analyzer (phase 2)](ink-analyzer-phase-2.md) | [GitHub](https://github.com/ink-analyzer) | ☐ | ☒ | ☐ | | [Myriad Systems LTD.](https://myriad.social/) | [Myriad Social](myriad_social.md) | [GitHub](https://github.com/myriadsocial/myriad-node) | ☐ | ☐ | ☐ | | [Liisa](www.liisa.io) | [Polkadot NFT Portfolio Tracker](LiisaPortfolioTracker.md) | [GitHub](https://github.com/LiisaNFT) | ☐ | ☐ | ☐ | | [NeoPower Digital](https://neopower.digital/) | [Roloi - XCM Payment Automation](./roloi-xcm-payment-automation.md) | [GitHub](https://github.com/NeoPower-Digital) | ☐ | ☐ | ☐ | From c5e5dc20c8f11e9f7c0a298e08c9097ac856bc30 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 25 Sep 2023 09:04:58 +0200 Subject: [PATCH 650/665] Update README.md Small fixes --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 2549a7dac51..e7486c5872b 100644 --- a/README.md +++ b/README.md @@ -41,14 +41,14 @@ Anyone is welcome to apply for a grant. Projects funded through our programs are Generally, your project will have better chances to be accepted if: - It presents a **well-researched** or tested concept, for which ideally you are able to show some prior work. -- You can demonstrate that the project will be **maintained** after completion of the grant, be it through an obvious commitment to the technology from your side, additional funding sources or an existing business model. +- You can demonstrate that the project will be **maintained** after completion of the grant, be it through an obvious commitment to the technology from your side, additional funding sources, or an existing business model. - Your team has **proven experience** with the relevant languages and technologies and/or a strong technical background. You will be asked to provide the GitHub profiles of your team members as part of your application, which we will examine for past activity and code quality. Naturally, you can also link to projects on other platforms. - Your application is **rich in technical details** and well-defined. - You can clearly present how your project stands out among competitors or implements technology that doesn't exist in the ecosystem yet. Additionally, it must fulfill the following requirements: -- All code produced as part of a grant must be **open-sourced**, and it must also not rely on closed-source software for full functionality. We prefer Apache 2.0, but GPLv3, MIT or Unlicense are also acceptable. +- All code produced as part of a grant must be **open-sourced**, and it must also not rely on closed-source software for full functionality. We prefer Apache 2.0, but GPLv3, MIT, or Unlicense are also acceptable. - We do not award grants for projects that have been the object of a successful token sale. - Applications must not mention a specific token. Furthermore, the focus of the application should lie on the software that is being implemented/research being carried out as part of the grant, and less on your project/venture/operation. For the purpose of the application and delivery, think about how others might also benefit from your work. - As a general rule, teams are asked to finish a grant before applying for another one. @@ -60,11 +60,11 @@ Please also heed our [Announcement Guidelines](https://github.com/w3f/Grants-Pro Finally, we take licensing and the right of all teams in and outside the ecosystem to be recognised for their work very seriously. Using others' work with no attribution or indication that this was not your own work as part of a milestone delivery **will lead to immediate termination**. Please reach out to us before submitting if you have any doubts on how to comply with a specific license and we'll be happy to help. -We also try to enforce our [code of conduct](CODE_OF_CONDUCT.md) and based on this may [block users](https://github.blog/2016-04-04-organizations-can-now-block-abusive-users/). +We also try to enforce our [code of conduct](CODE_OF_CONDUCT.md) and, based on this, may [block users](https://github.blog/2016-04-04-organizations-can-now-block-abusive-users/). ### Project Ideas -An overview of existing projects in the Web 3.0 Technology Stack along with broad project ideas we would potentially be interested in funding can be found [here](https://wiki.polkadot.network/docs/build-open-source), as well as a list of previously accepted applications [here](https://github.com/w3f/Grants-Program/blob/master/applications/index.md). +An overview of existing projects in the Web 3.0 Technology Stack, along with broad project ideas we would potentially be interested in funding, can be found [here](https://wiki.polkadot.network/docs/build-open-source), as well as a list of previously accepted applications [here](https://github.com/w3f/Grants-Program/blob/master/applications/index.md). [Requests For Proposals](https://github.com/w3f/Grants-Program/blob/master/docs/rfps.md) (RFPs) represent concrete ideas for projects that we would like to see implemented. Several teams may apply for the same RFP, so even if another team has already applied to implement a certain RFP, we invite you to do the same if you're interested. @@ -74,7 +74,7 @@ If you have a **good concept of the technical challenges** that your idea entail ### Support -The scope of our Grants Programs consists of funding and feedback on delivered milestones. This means that we do not provide hands-on support as part of a grant, but if you face specific issues during development, we will do our best and try to direct you to the correct resources. If this sounds like something you would like however, you may also want to apply to Parity's [Substrate Builders Program](https://www.substrate.io/builders-program/), which provides hands-on technical, ecosystem and strategical long-term support and access to extensive resources. You can find general documentation and more information on Substrate on the [Substrate Developer Hub](https://substrate.dev/), and we encourage you to join the [community](https://substrate.dev/en/community) in order to get help with specific issues or to stay up to date with the most recent developments. +The scope of our Grants Programs consists of funding and feedback on delivered milestones. This means that we do not provide hands-on support as part of a grant, but if you face specific issues during development, we will do our best and try to direct you to the correct resources. If this sounds like something you would like however, you may also want to apply to Parity's [Substrate Builders Program](https://www.substrate.io/builders-program/), which provides hands-on technical, ecosystem, and strategical long-term support and access to extensive resources. You can find general documentation and more information on Substrate on the [Substrate Developer Hub](https://substrate.dev/), and we encourage you to join the [community](https://substrate.dev/en/community) in order to get help with specific issues or to stay up to date with the most recent developments. For questions about the grants program itself, see our [FAQ](docs/faq.md#frequently-asked-questions). @@ -113,7 +113,7 @@ Evaluators are individuals able to evaluate the technology delivered as a result #### W3F Operations Team -The Operations Team takes care of legal documents, invoicing and remittances. +The Operations Team takes care of legal documents, invoicing, and remittances. - [Melanie Diener](https://github.com/meldien) - [Federica Dubbini](https://github.com/fededubbi) @@ -122,7 +122,7 @@ The Operations Team takes care of legal documents, invoicing and remittances. ## :level_slider: Levels -The W3F Grants Program offers different grant levels to help you best depending on your current stage. +The W3F Grants Program offers different grant levels to help you best, depending on your current stage. ### :hatching_chick: Level 1 (= InstaGrants) @@ -147,7 +147,7 @@ The W3F Grants Program offers different grant levels to help you best depending ## :pencil: Process -> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on the [Polkadot and Kusama Asset Hub](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on the [Polkadot Asset Hub](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. ### 1. Application @@ -164,8 +164,8 @@ The W3F Grants Program offers different grant levels to help you best depending 1. The [committee](#w3f-grants-committee) can (and usually does) issue comments and request changes on the pull request. 2. Clarifications and amendments made in the comments _need to be included in the application_. You may address feedback by directly modifying your application and leaving a comment once you're done. Generally, if you don't reply within 2 weeks, the application will be closed due to inactivity, but you're always free to reopen it as long as it hasn't been rejected. - 3. When all requested changes are addressed and the terms and conditions have been signed, someone will mark your application as `ready for review` and share it internally with the rest of the committee. - 4. The application will be accepted and merged as soon as it receives the required number of approvals (see [levels](#level_slider-levels)), or closed after two weeks of inactivity. Unless specified otherwise, the day on which it is accepted will be considered the starting date of the project, and will be used to estimate delivery dates. + 3. When all requested changes are addressed, and the terms and conditions have been signed, someone will mark your application as `ready for review` and share it internally with the rest of the committee. + 4. The application will be accepted and merged as soon as it receives the required number of approvals (see [levels](#level_slider-levels)) or closed after two weeks of inactivity. Unless specified otherwise, the day on which it is accepted will be considered the starting date of the project, and will be used to estimate delivery dates. ### 3. Milestone Delivery and Payment @@ -175,7 +175,7 @@ The W3F Grants Program offers different grant levels to help you best depending - Accepted grant applications can be amended at any time. However, this _necessitates a reevaluation by the committee_ and the same number of approvals as an application (according to the [levels](#level_slider-levels)). If your application has been accepted and, during development, you find that your project significantly deviates from the original specification, please open a new pull request that modifies the existing application. This also applies in case of significant delays. - If your _delivery schedule_ significantly changes, please also open a pull request with an updated timeline. -- If your deliveries are significantly delayed and we cannot get a hold of you, we will terminate the grant (3 approvals required, regardless of level. If a member of the committee creates the termination PR, only 2 more approvals are required). +- If your deliveries are significantly delayed, and we cannot get a hold of you, we will terminate the grant (3 approvals required, regardless of level. If a member of the committee creates the termination PR, only two more approvals are required). ## :mailbox_with_mail: Suggest a Project @@ -183,7 +183,7 @@ If you think that we should support the development of certain tools or projects **Submit an idea:** -If you have an idea for a project or would like to highlight an area in which you'd like to see teams build, but lack the technical background to create a detailed outline, you're welcome to open an [issue](https://github.com/w3f/Grants-Program/issues/new) or add it to the [tech stack](https://wiki.polkadot.network/docs/build-open-source) as a potentially interesting project. We will review your suggestion and, if necessary, will create an RFP based on it and reach out to teams able to build it. +If you have an idea for a project or would like to highlight an area in which you'd like to see teams build but lack the technical background to create a detailed outline, you're welcome to open an [issue](https://github.com/w3f/Grants-Program/issues/new) or add it to the [tech stack](https://wiki.polkadot.network/docs/build-open-source) as a potentially interesting project. We will review your suggestion and, if necessary, will create an RFP based on it and reach out to teams able to build it. **Submit an RFP (Request for Proposals):** @@ -222,7 +222,7 @@ Please note that: We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. -In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). +In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](applications/application-template.md)). Payment is made in Bitcoin, USDT (on Polkadot), or USDC/DAI (Ethereum). ## :bulb: Help @@ -311,7 +311,7 @@ The treasury is a pot of on-chain funds collected through transaction fees, slas From time to time, Web3 Foundation and/or Parity organise hackathons to promote quick prototyping of Polkadot related ideas. We highly encourage you to participate in these hackathons. Bear in mind, however, that you cannot submit the **same work** for a hackathon and the Grants Program. If you have worked or are planning to work on a project for a hackathon, your grant application should either propose a different set of features or otherwise build on top of your hackathon work. The same applies in reverse, although that will likely be less common. -The best way to find out about upcoming hackathons is by following Polkadot on the various social channels, such as Element or Twitter. +The best way to find out about upcoming hackathons is by following Polkadot on various social channels, such as Element or Twitter. ### Other Grant or Bounty Programs From 0b3e8f044e9712c9f1f826f1c5e367824acc1cbf Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 25 Sep 2023 09:07:15 +0200 Subject: [PATCH 651/665] Update pull_request_template.md small fixes --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 365efb7229a..825d0e78e2d 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -14,7 +14,7 @@ - [x] The [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md) has been copied and aptly renamed (`project_name.md`). - [ ] I have read the [application guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md). -- [ ] Payment details have been provided (bank details via email _or_ BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) address in the application). +- [ ] Payment details have been provided (bank details via email _or_ BTC, Ethereum (USDC/DAI), or Polkadot (USDT) address in the application). - [ ] The software delivered for this grant will be released under an open-source license specified in the application. - [ ] The initial PR contains only one commit (squash and force-push if needed). - [ ] The grant will only be announced once the first milestone [has been accepted](https://github.com/w3f/Grant-Milestone-Delivery#process) (see the [announcement guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/announcement-guidelines.md)). From 6fad656144755afd0fc888741e923ed15548ed53 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 25 Sep 2023 09:09:39 +0200 Subject: [PATCH 652/665] Update referral-program.md small changes --- docs/referral-program.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/referral-program.md b/docs/referral-program.md index 702aae8b2b2..71e9a535823 100644 --- a/docs/referral-program.md +++ b/docs/referral-program.md @@ -5,4 +5,4 @@ title: 💰 Referral Program We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. -In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md)). Payment is made in Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). +In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md)). Payment is made in Bitcoin, USDT (Polkadot), or USDC/DAI (Ethereum). From 44e10264b537225172d2b38505e616bec318bd41 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Mon, 25 Sep 2023 09:10:44 +0200 Subject: [PATCH 653/665] Update how-to-apply.md Small changes --- docs/Process/how-to-apply.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Process/how-to-apply.md b/docs/Process/how-to-apply.md index 23e7f73261b..cd533b99870 100644 --- a/docs/Process/how-to-apply.md +++ b/docs/Process/how-to-apply.md @@ -12,7 +12,7 @@ If you want to apply in **private**, you can do so [:arrow_right: here](https:// :::info -Payments can be made in fiat, Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum). Please indicate your preference in the application [as outlined in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md?plain=1#L7). +Payments can be made in fiat, Bitcoin, USDT (Polkadot), or USDC/DAI (Ethereum). Please indicate your preference in the application [as outlined in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md?plain=1#L7). ::: From 7644e7f8687f7012260267901c606cc40e036593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 25 Sep 2023 10:52:48 +0200 Subject: [PATCH 654/665] change admonition background colors (#2001) --- src/css/custom.css | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/css/custom.css b/src/css/custom.css index 7bff5bdfc88..4919a1b86a7 100644 --- a/src/css/custom.css +++ b/src/css/custom.css @@ -150,10 +150,20 @@ a:hover.navbar__item{ /* More prominent admonitions */ .theme-admonition-danger { border-left: 5px solid rgb(0, 0, 0); - background-color: rgba(255, 0, 0, 0.238); + background-color: rgba(255, 0, 0, 0.15); } .theme-admonition-info { border-left: 5px solid rgb(0, 0, 0); - background-color: rgba(255, 255, 0, 0.238); -} \ No newline at end of file + background-color: rgba(0, 0, 0, 0.15); +} + +.theme-admonition-caution { + border-left: 5px solid rgb(0, 0, 0); + background-color: rgba(255, 255, 0, 0.15); +} + +.theme-admonition-tip { + border-left: 5px solid rgb(0, 0, 0); + background-color: rgba(0, 255, 0, 0.15); +} From d60e2b5a94836f4c6ce3fe7449de086252c7d71e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 25 Sep 2023 11:25:51 +0200 Subject: [PATCH 655/665] Update payment options (#2000) * update-payment-options * remove empty lines on admonitions --- .github/pull_request_template.md | 2 +- README.md | 12 +- applications/application-template-research.md | 31 ++--- applications/application-template.md | 26 +++-- .../maintenance/maintenance-template.md | 2 +- docs/Process/how-to-apply.md | 6 +- docs/Support Docs/T&Cs.md | 107 +++++++++--------- .../milestone-deliverables-guidelines.md | 4 - docs/funding.md | 2 - docs/process.md | 2 - docs/referral-program.md | 2 +- 11 files changed, 100 insertions(+), 96 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 825d0e78e2d..b8eacc22228 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -14,7 +14,7 @@ - [x] The [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md) has been copied and aptly renamed (`project_name.md`). - [ ] I have read the [application guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/grant_guidelines_per_category.md). -- [ ] Payment details have been provided (bank details via email _or_ BTC, Ethereum (USDC/DAI), or Polkadot (USDT) address in the application). +- [ ] Payment details have been provided (bank details via email _or_ Polkadot (USDC & USDT) or BTC address in the application). - [ ] The software delivered for this grant will be released under an open-source license specified in the application. - [ ] The initial PR contains only one commit (squash and force-push if needed). - [ ] The grant will only be announced once the first milestone [has been accepted](https://github.com/w3f/Grant-Milestone-Delivery#process) (see the [announcement guidelines](https://github.com/w3f/Grants-Program/blob/master/docs/Support%20Docs/announcement-guidelines.md)). diff --git a/README.md b/README.md index e7486c5872b..2b12402c6ea 100644 --- a/README.md +++ b/README.md @@ -147,7 +147,13 @@ The W3F Grants Program offers different grant levels to help you best, depending ## :pencil: Process -> **:loudspeaker:** The process below is independent of the [level](#level_slider-levels). Payment is made in fiat, Bitcoin, USDT (on the [Polkadot Asset Hub](https://support.polkadot.network/support/solutions/articles/65000181800-what-is-statemint-and-statemine-and-how-do-i-use-them-)) or USDC/DAI (Ethereum). If you want to apply in **private**, you can apply [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +:::tip +If you want to apply in **private**, you can do so [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. +::: + +:::info +Payments can be made in USDT and USDC on the Polkadot [AssetHub](https://wiki.polkadot.network/docs/learn-assets), Bitcoin and fiat (USD, EUR, CHF). Please indicate your preference in the application [as outlined in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md?plain=1#L7). +::: ### 1. Application @@ -222,7 +228,7 @@ Please note that: We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. -In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](applications/application-template.md)). Payment is made in Bitcoin, USDT (on Polkadot), or USDC/DAI (Ethereum). +In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](applications/application-template.md)). Payment is made in Bitcoin or USDT/USDC on Polkadot AssetHub. ## :bulb: Help @@ -318,7 +324,7 @@ The best way to find out about upcoming hackathons is by following Polkadot on v Below is a list of other grant and bounty programs in the Polkadot/Substrate ecosystem: - [Acala Grants Program](https://acala.network/ecosystem-program) -- [Aleph Zero Funding Program](https://alephzero.org/ecosystem-funding-program) +- [Aleph Zero Funding Program](https://alephzero.org/ecosystem-funding-program) - [Astar / Shiden Network Builders Program](https://github.com/PlasmNetwork/Builders-Program) - [Crust Grants Program](https://github.com/crustio/Crust-Grants-Program) - [Darwinia Grants Program](https://github.com/darwinia-network/collaboration/blob/master/grant/README.md#grant-program) diff --git a/applications/application-template-research.md b/applications/application-template-research.md index f191321f29f..21591ec65c0 100644 --- a/applications/application-template-research.md +++ b/applications/application-template-research.md @@ -1,13 +1,15 @@ # Name of your Research Project1 -> This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a `>` (such as this one) should be removed. Please use markdown instead of HTML (e.g. `![](image.png)` instead of ``). +> This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a `>` (such as this one) should be removed. Please use markdown instead of HTML (e.g. `![](image.png)` instead of ``). > > See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. -- **Team Name:** Legal name of your team (e.g. Duo) -- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) + +- **Team Name:** Legal name of your team (e.g. JsonCorp) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the Polkadot ( for USDC & USDT) or Bitcoin payment address. Please also specify the currency. (e.g. 0x8920... (USDC)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > :exclamation: *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* +> ## Project Overview :page_facing_up: If this application is in response to an RFP, please indicate this on the first line of this section. @@ -22,24 +24,25 @@ Please provide the following: - A brief description of your project. - An indication of how your project relates to / integrates into Substrate / Polkadot / Kusama. - An indication of why your team is interested in creating this project. -- An indication if your project is academic research, i.e., intended to be published in an academic peer-reviewed venue, or a technical one, to be published as a technical report on the internet. +- An indication if your project is academic research, i.e., intended to be published in an academic peer-reviewed venue, or a technical one, to be published as a technical report on the internet. ### Project Details We expect the teams to already have a solid idea about your project's expected final state. Therefore, we ask the teams to submit (where relevant): -- The problem(s) that you want to investigate, and why these are important. +- The problem(s) that you want to investigate, and why these are important. - Research questions/hypothesis. -- The methodology that will be applied. +- The methodology that will be applied. - The data collection and analysis procedures. - The expected results and how they would be double-checked by the grants team (reproducibility of the data analysis). - Relevant related work. -- Intended venue for results publication and the timeline for publication. -- What your project is _not_ or will _not_ provide or implement +- Intended venue for results publication and the timeline for publication. +- What your project is *not* or will *not* provide or implement - This is a place for you to manage expectations and clarify any limitations that might not be obvious Things that shouldn’t be part of the application (see also our [FAQ](../docs/faq.md)): -- The (future) tokenomics of your project + +- The (future) tokenomics of your project - Business-oriented activities (marketing, business planning), events or outreach ### Ecosystem Fit @@ -93,6 +96,7 @@ Please also provide the GitHub accounts of all team members. If they contain no - https://www.linkedin.com/ ### Google Scholar Profiles (Or other research indexer profile, ex. Researchgate) + - https://scholar.google.com/citations?user= - https://scholar.google.com/citations?user= @@ -107,11 +111,11 @@ If you've already started working on your project or it is part of a larger proj ## Development Roadmap :nut_and_bolt: -This section should break the research development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories, including research [here](../docs/Support%20Docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the deliverable we should expect in as much detail as possible_, plus how we can verify that deliverable. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. +This section should break the research development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories, including research [here](../docs/Support%20Docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe *the deliverable we should expect in as much detail as possible*, plus how we can verify that deliverable. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. -Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We _recommend_ that teams structure their roadmap as 1 milestone ≈ 1 month. +Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We *recommend* that teams structure their roadmap as 1 milestone ≈ 1 month. -> :exclamation: If any of your deliverables is based on somebody else's work, make sure you cite it. If your research contains software artifacts in the same situation, make sure you work and publish _under the terms of the license_ of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Teams that submit others' work without attributing it will be immediately terminated.** +> :exclamation: If any of your deliverables is based on somebody else's work, make sure you cite it. If your research contains software artifacts in the same situation, make sure you work and publish *under the terms of the license* of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Teams that submit others' work without attributing it will be immediately terminated.** ### Overview @@ -155,9 +159,10 @@ Please include here - how you intend to use, enhance, promote and support your project in the short term, and - the team's long-term plans and intentions in relation to it. -## Referral Program (optional) :moneybag: +## Referral Program (optional) :moneybag: You can find more information about the program [here](../README.md#moneybag-referral-program). + - **Referrer:** Name of the Polkadot Ambassador or GitHub account of the Web3 Foundation grantee - **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) diff --git a/applications/application-template.md b/applications/application-template.md index bd01ca873c0..807793e767d 100644 --- a/applications/application-template.md +++ b/applications/application-template.md @@ -1,13 +1,15 @@ # Name of your Project -> This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a `>` (such as this one) should be removed. Please use markdown instead of HTML (e.g. `![](image.png)` instead of ``). +> This document will be part of the terms and conditions of your agreement and therefore needs to contain all the required information about the project. Don't remove any of the mandatory parts presented in bold letters or as headlines (except for the title)! Lines starting with a `>` (such as this one) should be removed. Please use markdown instead of HTML (e.g. `![](image.png)` instead of ``). > > See the [Grants Program Process](https://github.com/w3f/Grants-Program/#pencil-process) on how to submit a proposal. -- **Team Name:** Legal name of your team (e.g. Duo) -- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) + +- **Team Name:** Legal name of your team (e.g. JsonCorp) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the Polkadot (for USDC & USDT) or Bitcoin payment address. Please also specify the currency. (e.g. 0x8920... (USDC)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > :exclamation: *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* + ## Project Overview :page_facing_up: If this application is in response to an RFP, please indicate this on the first line of this section. @@ -32,12 +34,13 @@ We expect the teams to already have a solid idea about your project's expected f - An overview of the technology stack to be used - Documentation of core components, protocols, architecture, etc. to be deployed - PoC/MVP or other relevant prior work or research on the topic -- What your project is _not_ or will _not_ provide or implement +- What your project is *not* or will *not* provide or implement - This is a place for you to manage expectations and to clarify any limitations that might not be obvious Things that shouldn’t be part of the application (see also our [FAQ](../docs/faq.md)): -- The (future) tokenomics of your project + +- The (future) tokenomics of your project - For non-infrastructure projects—deployment and hosting costs, maintenance or audits - Business-oriented activities (marketing, business planning), events or outreach @@ -72,7 +75,7 @@ Help us locate your project in the Polkadot/Substrate/Kusama landscape and what ### Team's experience -Please describe the team's relevant experience. If your project involves development work, we would appreciate it if you singled out a few interesting projects or contributions made by team members in the past. +Please describe the team's relevant experience. If your project involves development work, we would appreciate it if you singled out a few interesting projects or contributions made by team members in the past. If anyone on your team has applied for a grant at the Web3 Foundation previously, please list the name of the project and legal entity here. @@ -104,11 +107,11 @@ If you've already started implementing your project or it is part of a larger re ## Development Roadmap :nut_and_bolt: -This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/Support%20Docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe _the functionality we should expect in as much detail as possible_, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. +This section should break the development roadmap down into milestones and deliverables. To assist you in defining it, we have created a document with examples for some grant categories [here](../docs/Support%20Docs/grant_guidelines_per_category.md). Since these will be part of the agreement, it helps to describe *the functionality we should expect in as much detail as possible*, plus how we can verify and test that functionality. Whenever milestones are delivered, we refer to this document to ensure that everything has been delivered as expected. -Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We _recommend_ that teams structure their roadmap as 1 milestone ≈ 1 month. +Below we provide an **example roadmap**. In the descriptions, it should be clear how your project is related to Substrate, Kusama or Polkadot. We *recommend* that teams structure their roadmap as 1 milestone ≈ 1 month. -> :exclamation: If any of your deliverables is based on somebody else's work, make sure you work and publish _under the terms of the license_ of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Projects that submit other people's work without proper attribution will be immediately terminated.** +> :exclamation: If any of your deliverables is based on somebody else's work, make sure you work and publish *under the terms of the license* of the respective project and that you **highlight this fact in your milestone documentation** and in the source code if applicable! **Projects that submit other people's work without proper attribution will be immediately terminated.** ### Overview @@ -122,7 +125,7 @@ Below we provide an **example roadmap**. In the descriptions, it should be clear - **FTE:** 1,5 - **Costs:** 8,000 USD -> :exclamation: **The default deliverables 0a-0d below are mandatory for all milestones**, and deliverable 0e at least for the last one. +> :exclamation: **The default deliverables 0a-0d below are mandatory for all milestones**, and deliverable 0e at least for the last one. | Number | Deliverable | Specification | | -----: | ----------- | ------------- | @@ -155,9 +158,10 @@ Please include here - how you intend to use, enhance, promote and support your project in the short term, and - the team's long-term plans and intentions in relation to it. -## Referral Program (optional) :moneybag: +## Referral Program (optional) :moneybag: You can find more information about the program [here](../README.md#moneybag-referral-program). + - **Referrer:** Name of the Polkadot Ambassador or GitHub account of the Web3 Foundation grantee - **Payment Address:** BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) diff --git a/applications/maintenance/maintenance-template.md b/applications/maintenance/maintenance-template.md index c3e13f35146..aeb5ffddb07 100644 --- a/applications/maintenance/maintenance-template.md +++ b/applications/maintenance/maintenance-template.md @@ -5,7 +5,7 @@ > See the [Maintenance Grants Process](https://github.com/w3f/Grants-Program#hammer_and_wrench-maintenance-grants) on how to submit a proposal. - **Team Name:** Legal name of your team (e.g. JsonCorp) -- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the BTC, Ethereum (USDC/DAI) or Polkadot/Kusama (USDT) payment address. Please also specify the currency. (e.g. 0x8920... (DAI)) +- **Payment Address:** In the case of fiat payment, please share your bank account privately with grants@web3.foundation via your contact email (see below) and enter the date when you shared the information with us (e.g. Fiat 24.12.1971, 11:59) here. Otherwise, provide the Polkadot (for USDC & USDT) or Bitcoin payment address. Please also specify the currency. (e.g. 0x8920... (USDC)) - **[Level](https://github.com/w3f/Grants-Program/tree/master#level_slider-levels):** 1, 2 or 3 > ⚠️ *The combination of your GitHub account submitting the application and the payment address above will be your unique identifier during the program. Please keep them safe.* diff --git a/docs/Process/how-to-apply.md b/docs/Process/how-to-apply.md index cd533b99870..c48f43b3ab5 100644 --- a/docs/Process/how-to-apply.md +++ b/docs/Process/how-to-apply.md @@ -5,15 +5,11 @@ title: 1. Application :::tip - If you want to apply in **private**, you can do so [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. - ::: :::info - -Payments can be made in fiat, Bitcoin, USDT (Polkadot), or USDC/DAI (Ethereum). Please indicate your preference in the application [as outlined in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md?plain=1#L7). - +Payments can be made in USDT and USDC on the Polkadot [AssetHub](https://wiki.polkadot.network/docs/learn-assets), Bitcoin and fiat (USD, EUR, CHF). Please indicate your preference in the application [as outlined in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md?plain=1#L7). ::: diff --git a/docs/Support Docs/T&Cs.md b/docs/Support Docs/T&Cs.md index 69468d88c17..8ba6919da9b 100644 --- a/docs/Support Docs/T&Cs.md +++ b/docs/Support Docs/T&Cs.md @@ -37,7 +37,7 @@ The terms defined in this section whenever used in these Terms and Conditions sh "Milestones" mean any and all of the milestones specified in the final version of the application under Development Roadmap and approved by the Grants Committee in accordance with the Procedure as well as placed in the applications folder of the W3F Grants Program Repository at ; -"Polkadot" means a scalable heterogeneous multi-chain framework developed by, or the development of which has been procured by Web 3.0. that has the features described in the white paper ("Polkadot: Vision For A Heterogeneous Multi-Chain Framework -- Draft 1") or as otherwise determined by Web 3.0. in its sole discretion from time to time) and utilizes DOTs as the blockchain token native to its operation and/or functioning; +"Polkadot" means a scalable heterogeneous multi-chain framework developed by, or the development of which has been procured by Web 3.0. that has the features described in the white paper ("Polkadot: Vision For A Heterogeneous Multi-Chain Framework -- Draft 1") or as otherwise determined by Web 3.0. in its sole discretion from time to time) and utilizes DOTs as the blockchain token native to its operation and/or functioning; "Procedure" means the procedure in connection with the Web 3.0 Foundation Grants Program, as established in Section 4 below; @@ -53,19 +53,19 @@ The terms defined in this section whenever used in these Terms and Conditions sh If You are submitting an application for a Grant, You represent and warrant that: -- each of the following statements is true and accurate and all of the information You provided was and shall remain true and complete; -- If You are registering on behalf of a legal entity, such legal entity is duly organized and validly existing under the applicable laws of the jurisdiction of its organization and you are duly authorized by such legal entity to act on its behalf; -- You are of legal age to form a binding contract (at least 18 years old in most jurisdictions); -- You have the right, full power and authority to enter into these Terms and Conditions, to exercise your rights and perform your obligations under these Terms and Conditions and in doing so will not violate any other agreement to which You are a Party nor any laws; -- these Terms and Conditions constitutes a legal, valid and binding obligation on You which are enforceable against You in accordance with their terms; -- no consent, authorisation, licence or approval of or notice to any governmental authority nor your shareholders, partners, members, other record or beneficial owners or other any relevant person (as applicable) is required to authorise the execution, delivery, validity, enforceability or admissibility in evidence of the performance by You of your obligations under these Terms and Conditions; -- You are not a citizen of, or resident in or located in, or incorporated or otherwise : - 1. listed on any of the following lists (each a Sanctions List): the Consolidated United Nations Security Council Sanctions List; the Specially Designated Nationals and Blocked Persons List or the Sectoral Sanctions Identification List maintained by the US Office of Foreign Assets Control (OFAC); the Consolidated List of Persons, Groups and Entities subject to EU Financial Sanctions; the Consolidated List of Financial Sanctions Targets or List of persons subject to restrictive measures in view of Russia's actions destabilising the situation in Ukraine, maintained by the UK Treasury; the Overall List of Sanctioned Individuals, Entities and Organizations maintained by the Swiss State Secretariat for Economic Affairs (SECO); 'Ordinance lists of the Swiss Federal Council'; or any similar list maintained by, or public announcement of sanctions made by, any other Sanctions Authority (as defined below); - 2. owned or controlled by, or acting on behalf of or for the benefit of, any person on a Sanctions List; - 3. located in, resident in or incorporated under the laws of (as applicable) Syria, Iran, Cuba, Crimea or North Korea, or any other country or territory which, after the Effective Date, becomes the target of such comprehensive, country-wide or territory-wide Sanctions (as defined below) as currently apply to the aforementioned territories; or - 4. the target of any sanctions laws, regulations, embargoes or restrictive measures (Sanctions), as amended from time to time, administered, enacted or enforced by: the United Nations, the United States, the European Union or any Member State thereof, the United Kingdom, Switzerland or the respective Governmental Authorities and agencies of any of the foregoing responsible for administering, enacting or enforcing Sanctions, including without limitation, OFAC, the US Department of State, the United Kingdom Treasury or the SECO (Sanctions Authority). +- each of the following statements is true and accurate and all of the information You provided was and shall remain true and complete; +- If You are registering on behalf of a legal entity, such legal entity is duly organized and validly existing under the applicable laws of the jurisdiction of its organization and you are duly authorized by such legal entity to act on its behalf; +- You are of legal age to form a binding contract (at least 18 years old in most jurisdictions); +- You have the right, full power and authority to enter into these Terms and Conditions, to exercise your rights and perform your obligations under these Terms and Conditions and in doing so will not violate any other agreement to which You are a Party nor any laws; +- these Terms and Conditions constitutes a legal, valid and binding obligation on You which are enforceable against You in accordance with their terms; +- no consent, authorisation, licence or approval of or notice to any governmental authority nor your shareholders, partners, members, other record or beneficial owners or other any relevant person (as applicable) is required to authorise the execution, delivery, validity, enforceability or admissibility in evidence of the performance by You of your obligations under these Terms and Conditions; +- You are not a citizen of, or resident in or located in, or incorporated or otherwise : + 1. listed on any of the following lists (each a Sanctions List): the Consolidated United Nations Security Council Sanctions List; the Specially Designated Nationals and Blocked Persons List or the Sectoral Sanctions Identification List maintained by the US Office of Foreign Assets Control (OFAC); the Consolidated List of Persons, Groups and Entities subject to EU Financial Sanctions; the Consolidated List of Financial Sanctions Targets or List of persons subject to restrictive measures in view of Russia's actions destabilising the situation in Ukraine, maintained by the UK Treasury; the Overall List of Sanctioned Individuals, Entities and Organizations maintained by the Swiss State Secretariat for Economic Affairs (SECO); 'Ordinance lists of the Swiss Federal Council'; or any similar list maintained by, or public announcement of sanctions made by, any other Sanctions Authority (as defined below); + 2. owned or controlled by, or acting on behalf of or for the benefit of, any person on a Sanctions List; + 3. located in, resident in or incorporated under the laws of (as applicable) Syria, Iran, Cuba, Crimea or North Korea, or any other country or territory which, after the Effective Date, becomes the target of such comprehensive, country-wide or territory-wide Sanctions (as defined below) as currently apply to the aforementioned territories; or + 4. the target of any sanctions laws, regulations, embargoes or restrictive measures (Sanctions), as amended from time to time, administered, enacted or enforced by: the United Nations, the United States, the European Union or any Member State thereof, the United Kingdom, Switzerland or the respective Governmental Authorities and agencies of any of the foregoing responsible for administering, enacting or enforcing Sanctions, including without limitation, OFAC, the US Department of State, the United Kingdom Treasury or the SECO (Sanctions Authority). -- You will comply with any laws applicable to Your software (built based upon the Polkadot network) and not engage in any illegal activities. In particular, You will not use the Polkadot network to facilitate infringement of any third party intellectual property rights or data privacy rights. +- You will comply with any laws applicable to Your software (built based upon the Polkadot network) and not engage in any illegal activities. In particular, You will not use the Polkadot network to facilitate infringement of any third party intellectual property rights or data privacy rights. You shall indemnify and hold harmless Web 3.0 from any third party claims (including reasonable attorney's costs) raised against Web 3.0 based on an alleged infringement of the above representations and warranties. @@ -73,10 +73,10 @@ You shall indemnify and hold harmless Web 3.0 from any third party claims (inclu To apply for the Web 3.0 Foundation Grants Program, your application shall fulfill the following criteria: -- it shall be a research or software-based project, which contributes to the advancement of the Polkadot ecosystem; -- the Software shall be released under the Apache license version 2.0.; -- You must accept payment in fiat, Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum); -- You will need to submit the application and deliver the milestones according to the process specified below; +- it shall be a research or software-based project, which contributes to the advancement of the Polkadot ecosystem; +- the Software shall be released under the Apache license version 2.0.; +- You must accept payment in USDT or USDC/DAI on Polkadot AssetHub, fiat or BTC; +- You will need to submit the application and deliver the milestones according to the process specified below; The grants process consists of five parts, each of them described in more detail below: @@ -88,7 +88,7 @@ To apply for a grant of the Web3 Foundation Grants Program, the grantee needs to **(ii) Application review process:** -The Web 3.0 grants committee, which is specified on the [Grants-Program GitHub repository ](https://github.com/w3f/Grants-Program)(the "Grants Committee"), can issue comments and request changes on the grant application pull request (the submission of the grant application on GitHub). As soon enough members of the Grants Committee approve the pull request, the terms and conditions are signed off and all requested changes are addressed, the application is officially accepted. The application is now a part of the [W3F Grants-Program GitHub repository](https://github.com/w3f/Grants-Program). The time point of the acceptance by the Grants Committee is hereby stored on GitHub and counts as the official beginning of the grant. The original submission is stored with a unique commit hash (identifier) and can not be altered by any party. The final version approved by the Grants Committee of the Specifications, the Time Schedule and Milestones will be placed in the applications folder of the W3F Grants Program Repository at via the merge function of GitHub. +The Web 3.0 grants committee, which is specified on the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program)(the "Grants Committee"), can issue comments and request changes on the grant application pull request (the submission of the grant application on GitHub). As soon enough members of the Grants Committee approve the pull request, the terms and conditions are signed off and all requested changes are addressed, the application is officially accepted. The application is now a part of the [W3F Grants-Program GitHub repository](https://github.com/w3f/Grants-Program). The time point of the acceptance by the Grants Committee is hereby stored on GitHub and counts as the official beginning of the grant. The original submission is stored with a unique commit hash (identifier) and can not be altered by any party. The final version approved by the Grants Committee of the Specifications, the Time Schedule and Milestones will be placed in the applications folder of the W3F Grants Program Repository at via the merge function of GitHub. **(iii) Milestone delivery process:** @@ -96,7 +96,7 @@ To submit one of the possible multiple milestones specified in the application, **(iv) Milestone review process:** -The Grants Evaluators, who are specified on the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program), can issue comments and request changes on the milestone delivery pull request. +The Grants Evaluators, who are specified on the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program), can issue comments and request changes on the milestone delivery pull request. a) Purpose and object of the milestone review process @@ -123,40 +123,41 @@ As soon as one evaluator approves the pull request, the delivery is officially a **(v) Payment process:** -The Operations Team specified in the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program), gets notified once the above-specified delivery was accepted. As soon as any feedback is provided by the evaluators, this feedback first needs to be resolved. After this, the Operations Team makes the payment to the Bitcoin, USDT (on Kusama or Polkadot) or USDC/DAI (Ethereum) address specified in the initial application. +The Operations Team specified in the [Grants-Program GitHub repository](https://github.com/w3f/Grants-Program), gets notified once the above-specified delivery was accepted. As soon as any feedback is provided by the evaluators, this feedback first needs to be resolved. After this, the Operations Team makes the payment to the bank account, Bitcoin or Polkadot AssetHub (for USDT and USDC) address specified in the initial application. + ## 5. Scope of these Terms and Conditions The subject matter of these Terms and Conditions is (i) the development of the Software by You in accordance with the Specifications, Milestones and Time Schedule, as well as any related activities (including any development activities undertaken before the Effective Date in relation to the Software) (collectively referred to as "Development Work") in accordance with the terms of these Terms and Conditions. -In performing your obligations under these Terms and Conditions, You shall: +In performing your obligations under these Terms and Conditions, You shall: -1. use reasonable skill and care; -2. comply with any date or time specified according to the Time Schedule; -3. perform your obligations in accordance with good industry practice, being practices in relation to the development of software and related deliverables the same as or similar to the Software that are usually followed by other suppliers in the same industry, including adherence to industry codes of practice and industry standards in relation to such products and services; -4. perform your obligations in accordance with all laws and codes of conducts applicable; -5. ensure that your development team consists of a sufficient number of appropriately skilled and experienced individuals -6. develop the Software as an open source software under the Apache license version 2.0. +1. use reasonable skill and care; +2. comply with any date or time specified according to the Time Schedule; +3. perform your obligations in accordance with good industry practice, being practices in relation to the development of software and related deliverables the same as or similar to the Software that are usually followed by other suppliers in the same industry, including adherence to industry codes of practice and industry standards in relation to such products and services; +4. perform your obligations in accordance with all laws and codes of conducts applicable; +5. ensure that your development team consists of a sufficient number of appropriately skilled and experienced individuals +6. develop the Software as an open source software under the Apache license version 2.0. -Unless expressly agreed otherwise in writing by the Foundation, the Grantee shall not subcontract, even partially, the development of the project/deliverable to any third party. If the project/deliverable, in whole or in part, is subcontracted to a third party without the consent of the Foundation, the Foundation is entitled to immediately terminate the Grant Agreement and to recover the grant amount already disbursed. +Unless expressly agreed otherwise in writing by the Foundation, the Grantee shall not subcontract, even partially, the development of the project/deliverable to any third party. If the project/deliverable, in whole or in part, is subcontracted to a third party without the consent of the Foundation, the Foundation is entitled to immediately terminate the Grant Agreement and to recover the grant amount already disbursed. The Parties acknowledge and agree that the requirements set out in the Milestones may only be varied or amended by submitting another pull request and the following reevaluation by the committee under the same conditions as the initial application review process specified above. ## 6. Obligations of User -1. You shall deliver the Software, as well as all related deliverables, including but not limited to the source code, to Web 3.0 free of defects, fully compliant with the Specifications and in accordance with the Time Schedule. +1. You shall deliver the Software, as well as all related deliverables, including but not limited to the source code, to Web 3.0 free of defects, fully compliant with the Specifications and in accordance with the Time Schedule. -2. Web 3.0 shall be in the position to further developing, re-engineering and using the delivered Software without any technical or other limitations. +2. Web 3.0 shall be in the position to further developing, re-engineering and using the delivered Software without any technical or other limitations. -3. You shall bear all costs and expenses incurred in connection with the Development Work. +3. You shall bear all costs and expenses incurred in connection with the Development Work. -4. You shall remain positive towards the Foundation, the Foundation representatives and its goals, plans and projects. You shall advocate for the Foundation's projects' and sub-projects' aims during the term of the Agreement. +4. You shall remain positive towards the Foundation, the Foundation representatives and its goals, plans and projects. You shall advocate for the Foundation's projects' and sub-projects' aims during the term of the Agreement. -5. You shall, at all times during the term of the Agreement refrain from making, causing to be made, publishing, ratifying, endorsing, re-publishing or promulgating any and all disparaging remarks or derogatory, false, negative, critical, vilifying or otherwise detrimental statements or comments, whether implied or expressed, made in any format to any party or entity with respect to the Foundation, its officers, directors, employees, council members, advisors or otherwise affiliated individuals, entities and projects, including, but not limited to negative statements pertaining to: - 1. any management style, methods of doing business, quality of products and services, the business affairs, operation, financial condition and standing in the community; and - 2. any treatment of its officers, directors, employees, council members, advisors or otherwise affiliated individuals and any circumstances surrounding any such employment and/or separation of employment from the Foundation or advisory relationships. +5. You shall, at all times during the term of the Agreement refrain from making, causing to be made, publishing, ratifying, endorsing, re-publishing or promulgating any and all disparaging remarks or derogatory, false, negative, critical, vilifying or otherwise detrimental statements or comments, whether implied or expressed, made in any format to any party or entity with respect to the Foundation, its officers, directors, employees, council members, advisors or otherwise affiliated individuals, entities and projects, including, but not limited to negative statements pertaining to: + 1. any management style, methods of doing business, quality of products and services, the business affairs, operation, financial condition and standing in the community; and + 2. any treatment of its officers, directors, employees, council members, advisors or otherwise affiliated individuals and any circumstances surrounding any such employment and/or separation of employment from the Foundation or advisory relationships. -6. You agree to forbear from making any public or non-confidential statement with respect to any claim or complaint against the Foundation without having obtained the Foundation’s prior written consent. +6. You agree to forbear from making any public or non-confidential statement with respect to any claim or complaint against the Foundation without having obtained the Foundation’s prior written consent. 7. You agree that during the term of this agreement together with the Schedules (or any of each SOW), including extensions or modifications thereto, and for a period of nine (9) months thereafter, neither Grantee nor the Foundation will recruit, directly or indirectly hire, solicit or employ, engage as an independent contractor, any employee or independent contractor of either party, or any employee or independent contractor of any of the other subcontractors, who are involved in the development, use, or provision of the Services, without the prior written approval of the party whose employee or independent contractor is being considered for employment or engagement as an independent contractor, except as otherwise required by law. If one of the parties breaches this section, this party shall pay forty thousand dollars ($40,000.00) for each person hired as liquidated damages. The parties agree that quantifying losses arising from breach of this section is inherently difficult and stipulate that the agreed upon sum is not a penalty, but rather a reasonable measure of damages, based upon the parties’ experience in the software development industry and given the nature of the losses that may result from such breach. @@ -188,7 +189,7 @@ You hereby warrant that: (c) there are no licenses or rights current in effect in favor of any third party to use the Software and the related deliverables which would impair the rights granted to Web 3.0. as provided for under these Terms and Conditions; and -(d) You have disclosed all previous involvement of any team member in the Web 3.0 grant process, including, but not limited to: Closed, Rejected, Accepted, Delivered and Pending grant applications. +(d) You have disclosed all previous involvement of any team member in the Web 3.0 grant process, including, but not limited to: Closed, Rejected, Accepted, Delivered and Pending grant applications. (e) there is no pending or threatened claim, action, suit, investigation or proceeding of any kind challenging, alleging or asserting that the Software and the related deliverables were improperly or invalidly granted or are otherwise not protected as Intellectual Property Rights. @@ -202,7 +203,7 @@ You further warrant that the Software and the related deliverables: Your liability for a single loss event shall be limited to the aggregate total of all sums paid by Web 3.0. to You under these Terms and Conditions. Nevertheless, You shall not be held liable for indirect, special, punitive, exemplary, incidental or consequential damages or losses arising out of these Terms and Conditions. -Furthermore, You shall hold Web 3.0. as well as its sublicensees harmless against any and all liability and damages for the infringement of Intellectual Property Rights of third parties, insofar as the infringement of such third party rights was caused by the intended use of the Software according to the Specifications. Web 3.0. shall immediately inform You in writing of any third party claims asserted and authorize You to conduct the defense, including the conclusion of a settlement, entirely at its own costs. In this respect, You shall use best efforts to provide Web 3.0. with the right to continue, or let continuing, using the Software or replace or modify the Software without deterioration or limitations of the functions and criteria agreed in the Specifications and without any additional costs. Should none of these measures be possible, Web 3.0. shall be entitled to withdraw from these Terms and Conditions and request the reimbursement of the Grant. +Furthermore, You shall hold Web 3.0. as well as its sublicensees harmless against any and all liability and damages for the infringement of Intellectual Property Rights of third parties, insofar as the infringement of such third party rights was caused by the intended use of the Software according to the Specifications. Web 3.0. shall immediately inform You in writing of any third party claims asserted and authorize You to conduct the defense, including the conclusion of a settlement, entirely at its own costs. In this respect, You shall use best efforts to provide Web 3.0. with the right to continue, or let continuing, using the Software or replace or modify the Software without deterioration or limitations of the functions and criteria agreed in the Specifications and without any additional costs. Should none of these measures be possible, Web 3.0. shall be entitled to withdraw from these Terms and Conditions and request the reimbursement of the Grant. If You or Web 3.0. delegates the performance of an obligation or the exercise of a right under these Terms and Conditions to an associate, they are liable to the other Party for any loss or damage the associate causes intentionally or negligently in carrying out such tasks. @@ -244,8 +245,8 @@ The headings used herein are inserted only as a matter of convenience and for re ## 13. Referral Program -If you were referred to the Web 3.0 Foundation Grants Program by a person who is either a Polkadot Ambassador or, in any case, a person considered by Web 3.0 as being active in the Polkadot Ecosystem (a “Valid Referee”), upon signature of this Terms and Conditions you could indicate to Web 3.0 the name of this Valid Referee, provided that he/she gave you his/her consent to share his/her identity with Web 3.0. Web 3.0, as part of its grant referral program, will grant to the Valid Referee a referral bonus of the amount at that time allocated as bonus under such program. -For the avoidance of any doubt, Web 3.0 reserves the right to decide - at its complete discretion - if an individual is (and/or continues to be) a Valid Referee, and only in this case the referee will be entitled to receive the referral bonus. +If you were referred to the Web 3.0 Foundation Grants Program by a person who is either a Polkadot Ambassador or, in any case, a person considered by Web 3.0 as being active in the Polkadot Ecosystem (a “Valid Referee”), upon signature of this Terms and Conditions you could indicate to Web 3.0 the name of this Valid Referee, provided that he/she gave you his/her consent to share his/her identity with Web 3.0. Web 3.0, as part of its grant referral program, will grant to the Valid Referee a referral bonus of the amount at that time allocated as bonus under such program. +For the avoidance of any doubt, Web 3.0 reserves the right to decide - at its complete discretion - if an individual is (and/or continues to be) a Valid Referee, and only in this case the referee will be entitled to receive the referral bonus. ## 14. Applicable Law and Jurisdiction @@ -266,19 +267,19 @@ HOWEVER, YOU SHALL AT ALL TIMES NOTE THAT NO PARTY (NEITHER WE OR YOU), INCLUDIN You shall at all times acknowledge and agree that certain risks exist in relation to using the Polkadot network. You fully acknowledge and agree that: -- No Party, including but not limited to the Parties involved, ​owns or controls the Polkadot network. It is built by the end users themselves. -- No Party, including but not limited to the Parties involved, has any authority to approve, prevent, restrict or anyhow exercise control over any interaction that occurs through the Polkadot network. You and end users are free to build their own network and network-based applications and provide them to customers under their own terms and conditions, provided that such applications should also run and be offered in a decentralized manner (as e.g. distributed ledger technology or often referred to as "blockchain" or any future adaptations of such technologies) without central oversight. -- You shall not have any expectations over the performance, suitability for business or interoperability of the Polkadot network for Your own business purposes. -- Polkadot network source code has not passed a third party security audit and can be potentially unstable and could cause unexpected effects and system failures. You are aware of this risk and must address it within Your own privacy compliance model when establishing technical and organizational measures on data security for Your end customers. -- By using the Polkadot network You covenant, represent, and warrant that Your use of the network complies with Your jurisdiction of residence and You are fully able and legally competent to use the Polkadot network. -- In the event Your use of the Polkadot network does not comply with the applicable law of Your jurisdiction of residence, You shall be fully liable for any consequences incurred thereof and fully acknowledge and agree that ​We ​shall not be held liable for Your use of the Polkadot network -- There is a risk that advances in cryptography or technical advances (such as the development of quantum computers) could present risks to blockchain-based applications and cryptocurrencies, Ethereum or tokens which could result in the theft or loss of such elements. -- The network (as well as any network You build based upon it) is susceptible to mining attacks (including but not limited to double-spend attacks, majority mining power attacks, "selfish-mining" attacks and race condition attacks. Despite the efforts of Web 3.0, the risk of known or novel mining attacks exists. -- There are risks associated with using the network, such as e.g. failure of hardware, software and Internet connections. You acknowledge that Web 3.0 shall not be responsible for any communication failures, disruptions, errors, distortions or delays You may experience when using the network. -- network source code is provided on an "AS IS" basis, without warranties and conditions of any kind, either express or implied, including, without limitation, any warranties or conditions of title, merchantability, fitness for a particular purpose, and non-infringement, unless otherwise required by mandatory applicable law. -- The entire risk as to the quality and performance of using the network is borne by You. -- You are solely responsible for determining the appropriateness of using or redistributing the network source code and/or any Derivative Work and assume any risks associated with Your exercise of permission granted under this License. -- You are solely responsible to regularly check for any modifications and updates to the network source code published at +- No Party, including but not limited to the Parties involved, ​owns or controls the Polkadot network. It is built by the end users themselves. +- No Party, including but not limited to the Parties involved, has any authority to approve, prevent, restrict or anyhow exercise control over any interaction that occurs through the Polkadot network. You and end users are free to build their own network and network-based applications and provide them to customers under their own terms and conditions, provided that such applications should also run and be offered in a decentralized manner (as e.g. distributed ledger technology or often referred to as "blockchain" or any future adaptations of such technologies) without central oversight. +- You shall not have any expectations over the performance, suitability for business or interoperability of the Polkadot network for Your own business purposes. +- Polkadot network source code has not passed a third party security audit and can be potentially unstable and could cause unexpected effects and system failures. You are aware of this risk and must address it within Your own privacy compliance model when establishing technical and organizational measures on data security for Your end customers. +- By using the Polkadot network You covenant, represent, and warrant that Your use of the network complies with Your jurisdiction of residence and You are fully able and legally competent to use the Polkadot network. +- In the event Your use of the Polkadot network does not comply with the applicable law of Your jurisdiction of residence, You shall be fully liable for any consequences incurred thereof and fully acknowledge and agree that ​We ​shall not be held liable for Your use of the Polkadot network +- There is a risk that advances in cryptography or technical advances (such as the development of quantum computers) could present risks to blockchain-based applications and cryptocurrencies, Ethereum or tokens which could result in the theft or loss of such elements. +- The network (as well as any network You build based upon it) is susceptible to mining attacks (including but not limited to double-spend attacks, majority mining power attacks, "selfish-mining" attacks and race condition attacks. Despite the efforts of Web 3.0, the risk of known or novel mining attacks exists. +- There are risks associated with using the network, such as e.g. failure of hardware, software and Internet connections. You acknowledge that Web 3.0 shall not be responsible for any communication failures, disruptions, errors, distortions or delays You may experience when using the network. +- network source code is provided on an "AS IS" basis, without warranties and conditions of any kind, either express or implied, including, without limitation, any warranties or conditions of title, merchantability, fitness for a particular purpose, and non-infringement, unless otherwise required by mandatory applicable law. +- The entire risk as to the quality and performance of using the network is borne by You. +- You are solely responsible for determining the appropriateness of using or redistributing the network source code and/or any Derivative Work and assume any risks associated with Your exercise of permission granted under this License. +- You are solely responsible to regularly check for any modifications and updates to the network source code published at ### Intellectual property diff --git a/docs/Support Docs/milestone-deliverables-guidelines.md b/docs/Support Docs/milestone-deliverables-guidelines.md index b573c40cedd..ddda52aa2a3 100644 --- a/docs/Support Docs/milestone-deliverables-guidelines.md +++ b/docs/Support Docs/milestone-deliverables-guidelines.md @@ -29,9 +29,7 @@ Since all code developed under a grant must be open source, it is necessary to p If your delivery comprises multiple repositories, make sure to include the license in each of them. :::danger - You should also verify that the code you submit doesn't violate any other licenses, as a failure to comply with the license of reused code will result in an immediate rejection of the milestone and termination of the grant. - ::: ### Documentation @@ -95,9 +93,7 @@ Each item in the list should include a link to the deliverable itself, e.g.: - a link to a specific commit, pull request or issue in a public repository. :::tip - **Please highlight anything that deviates from the contract** and include further information that you think is relevant to the deliverable, either alongside the appropriate deliverable or under [Additional Information](#additional-information). - ::: | Number | Deliverable | Link | Notes | diff --git a/docs/funding.md b/docs/funding.md index 3a36c19c2b0..54a3977aa63 100644 --- a/docs/funding.md +++ b/docs/funding.md @@ -6,9 +6,7 @@ title: 🪙 Alternative Funding Some funding sources might be more and some less suitable for your project throughout its various stages. We encourage you to explore alternative funding options listed below. Please note, however, that you should not seek to fund the **same scope of work** from multiple sources and that any team found doing so will have its Web3 Foundation support terminated. :::tip - If you are unsure about what's the best next step for you and your project, consider reaching out to the [Substrate Square One](https://substrate.io/ecosystem/square-one/) team. - ::: ### Treasury diff --git a/docs/process.md b/docs/process.md index a78f5ecad07..828b5dfc53a 100644 --- a/docs/process.md +++ b/docs/process.md @@ -3,11 +3,9 @@ title: Apply --- :::tip - Check out the [Substrate Square One](https://substrate.io/ecosystem/square-one/) website for all kinds of ecosystem support opportunities. ::: - If you are certain you want to apply for a W3F grant, head straight to our [application process documentation](Process/how-to-apply.md). Alternatively, the flowchart below outlines where we think the grants program fits in relation to other popular funding opportunities. ## Funding Opportunities Overview diff --git a/docs/referral-program.md b/docs/referral-program.md index 71e9a535823..5bce2450643 100644 --- a/docs/referral-program.md +++ b/docs/referral-program.md @@ -5,4 +5,4 @@ title: 💰 Referral Program We give away 500 USD to each referral of a successful grant application by _anyone having previously worked on a Web3 Foundation grant_ or _a [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors)_. Web3 Foundation and Parity employees do not qualify for the program, even if they previously worked on a grant. -In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md)). Payment is made in Bitcoin, USDT (Polkadot), or USDC/DAI (Ethereum). +In order to be eligible for the referral bonus, the application itself must contain the name of the [Polkadot Ambassador](https://wiki.polkadot.network/docs/ambassadors) or the GitHub account of the grantee as well as the payment address for the referral bonus (see the [application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md)). Payment is made in Bitcoin or USDT/USDC on Polkadot AssetHub. From 5ea25cd70c0f49c709ab9043c57546842374584f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 25 Sep 2023 11:46:40 +0200 Subject: [PATCH 656/665] Update more RFPs --- .../validator-selection-algorithm.md | 2 +- .../decentralized-security-marketplace.md | 8 ++--- .../grant_management_webapp.md | 31 ++++++------------- docs/rfps.md | 26 ++++++++-------- 4 files changed, 27 insertions(+), 40 deletions(-) rename docs/RFPs/{Under Development => Closed}/validator-selection-algorithm.md (96%) diff --git a/docs/RFPs/Under Development/validator-selection-algorithm.md b/docs/RFPs/Closed/validator-selection-algorithm.md similarity index 96% rename from docs/RFPs/Under Development/validator-selection-algorithm.md rename to docs/RFPs/Closed/validator-selection-algorithm.md index 5956cce6d10..3402a8bc06a 100644 --- a/docs/RFPs/Under Development/validator-selection-algorithm.md +++ b/docs/RFPs/Closed/validator-selection-algorithm.md @@ -1,6 +1,6 @@ # RFP: Validator Selection Algorithm -* **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/validators_selection.md) +* **Status:** [Closed](https://github.com/w3f/Grants-Program/blob/master/applications/validators_selection.md) * **Proposer:** [jonasW3F](https://github.com/jonasW3F) ## Project Description diff --git a/docs/RFPs/Under Development/decentralized-security-marketplace.md b/docs/RFPs/Under Development/decentralized-security-marketplace.md index f2dda7b7cd2..53f23905e48 100644 --- a/docs/RFPs/Under Development/decentralized-security-marketplace.md +++ b/docs/RFPs/Under Development/decentralized-security-marketplace.md @@ -5,14 +5,14 @@ ## Project Description :page_facing_up: -According to the [*Immunefi's 2022 annual report*](https://assets.ctfassets.net/t3wqy70tc3bv/1ObYJk9jzWS4ExHICslYep/e2b5cee51268e47ee164c4dffbd78ad4/Immunefi_Crypto_Losses_2022_Report.pdf), there has been a total loss of ~$3.77B because of hacks in the web3 space. To increase the protocol's security, audits and bug bounties can be a useful tool. +According to the [*Immunefi's 2022 annual report*](https://assets.ctfassets.net/t3wqy70tc3bv/1ObYJk9jzWS4ExHICslYep/e2b5cee51268e47ee164c4dffbd78ad4/Immunefi_Crypto_Losses_2022_Report.pdf), there has been a total loss of ~$3.77B because of hacks in the web3 space. To increase a protocol's security, audits and bug bounties can be a useful tool. -A **decentralized security marketplace** would allow projects to find reviewers/testers/auditors/whitehats, and vice versa. This would benefit everyone: +A **decentralized security marketplace** would allow projects to find reviewers/testers/auditors/whitehats and vice versa to pursue structured tests and audits. This would benefit everyone: - **Projects** would increase their security; - **Developers** would have the possibility to earn while using their skills, improving them; - The **ecosystem** would be more secure, with more projects being audited and more developers learning about security. -The original thought is to make it as a smart contract platform, deployable on an existing parachain (that supports WASM smart contracts, such as [Astar](https://docs.astar.network/docs/getting-started) or [Watr](https://docs.watr.org/builders/substrate-contracts)) using [ink!](https://paritytech.github.io/ink/) ([here](https://github.com/paritytech/awesome-ink) you can see some examples). +Ideally, this marketplace would be built as a smart contract platform deployable on any existing parachain (that supports WASM smart contracts, such as [Astar](https://docs.astar.network/docs/getting-started) or [Watr](https://docs.watr.org/builders/substrate-contracts)) using [ink!](https://paritytech.github.io/ink/) ([here](https://github.com/paritytech/awesome-ink) you can see some examples). **Note**: This use case can be extended/applied to other areas. The main problem to solve here is to find a way to manage the *delayed* transaction between two parties (i.e., [escrow](https://en.wikipedia.org/wiki/Escrow)), and to ensure fairness and transparency (e.g., a reviewer is not able to deliver all the reports in time, and the project's team would like to decide whether to extend the escrow duration or just to pay a lower percentage of the established bounty). @@ -25,8 +25,8 @@ To ensure fairness and transparency, the marketplace could have the following ac ## Deliverables :nut_and_bolt: - The followings could be the initial deliverables of the project. Of course, improvements and additions are more than welcome. + 1) Initial **research and design** of the protocol: - You can refer to what [Immunefi](https://immunefi.com/explore/) and [Code4rena](https://code4rena.com/) are doing (but bring that on-chain); - How to ensure the trustless interaction (e.g., projects could lock a percentage of the bounty to open the request); diff --git a/docs/RFPs/Under Development/grant_management_webapp.md b/docs/RFPs/Under Development/grant_management_webapp.md index 918d8d73d0d..7e4c23aaa21 100644 --- a/docs/RFPs/Under Development/grant_management_webapp.md +++ b/docs/RFPs/Under Development/grant_management_webapp.md @@ -10,23 +10,18 @@ Web3 Foundation manages grant applications and deliveries in two github reposito * [Grants](https://github.com/w3f/Grants-Program) * [Deliveries](https://github.com/w3f/Grant-Milestone-Delivery) -All the grant applications, approvals, deliveries and evaluations are pushed into github as PRs and documents, -so that all processes are public and transparent. - -You can find all the details about how applications and deliveries are submitted in the [Grants Program Website](https://w3f.github.io/Grants-Program/), -or by browsing the two repositories above. +All the grant applications, approvals, deliveries and evaluations are pushed into GitHub as PRs and Markdown documents, so that all processes are public and transparent. +You can find all the details about how applications and deliveries are submitted in the [Grants Program Website](https://w3f.github.io/Grants-Program/), or by browsing the two repositories above. ## Project Description :page_facing_up: The objective of this RFP is a web application that publishes all the information contained in -the W3F grants repositories in a way that facilitates easier navigation for the grants committee. Though the software would initially be used for the W3F Grants Program, any interested third parties would ideally be able to utilize the application for their own grants program. - -By providing an API, it will also allow for pulling the data in a structured way in order to make it easy to calculate statistics or track different metrics. +the W3F grants repositories in a way that facilitates easier navigation for the grants committee. Though the software would initially be used for the W3F Grants Program, any interested third parties should ideally be able to utilize the application for their own purposes. -The Web3 Foundation Grants Program is unique in that everything is openly and transparently published on GitHub. As a result of this RFP, we hope the W3F Grants Program can set an example of how other grant programs can leverage a simple yet powerful process to manage their grants. -Therefore, the web application and the structure of our repositories can be re-used by other grant programs. +By providing an API, it will also allow for pulling the data in a structured way in order to make it easy to calculate statistics, track different metrics and publish data. +The Web3 Foundation Grants Program is unique in that everything is openly and transparently published on GitHub. As a result of this RFP, we hope the W3F Grants Program can set an example of how other grant programs can leverage a simple yet powerful process to manage their grants. Therefore, the web application and the structure of our repositories should be reusable by other grant programs. ## Existing prototype @@ -34,11 +29,9 @@ A quick and dirty prototype already exists for the application: - [Backend](https://github.com/w3f/w3f_grants_backend) - [Frontend](https://github.com/w3f/w3f_grants_frontend) -These examples are just an initial experiment to test how the app could work, and are completely undocumented, -but please feel free to contact [us](grants@web3.foundation) if you need help trying them out or simply discuss. - -Also, these are just an option, and the RFP doesn't require building from these. Proposers are free to propose the framework and approach of their choice. +These examples are just an initial experiment to test how the app could work, and are completely undocumented, but please feel free to [contact us](mailto:grants@web3.foundation) if you need help trying them out or to simply discuss. +Also, using these is completely optional and the RFP doesn't require building from these. Proposers are free to propose the framework and approach of their choice. ## Deliverables :nut_and_bolt: @@ -53,8 +46,6 @@ For example: ![screenshot_grants_page](https://github.com/keeganquigley/Grants-Program/assets/1389409/0eda6f0b-071d-4d44-9835-196167479c07) - - ### Grants details - Shows the grant information @@ -66,14 +57,12 @@ For example: ![screenshot_grants_details](https://github.com/keeganquigley/Grants-Program/assets/1389409/098962a3-249f-4fa5-8c03-9d0dbc7f32eb) - ### Teams - Provide a view at the team level. - Contact information. - Grants and applications, and their current status. - ### Applications - Current grant applications. @@ -99,13 +88,11 @@ For example: - The web app should ideally separate frontend from backend logic, and publish an API to fetch the structured data. - ## Additional Notes -- The features proposed above represent an opinion on what the grant management webapp should do and look like, -but are neither exhaustive nor strict requirements. Teams are welcome to propose their own design and vision for this product. +- The features proposed above represent an _suggestion_ on what the grant management webapp should do and look like, but are neither exhaustive nor strictly required. Teams are welcome to propose their own design and vision for this product. -- Web3 Foundation's grants program should be just an example/first step. +- The Web3 Foundation's Grants Program should be just an example/first step. Ideally, the tool (combining GitHub + website) can benefit other grant programs and on-chain treasuries. - Long term goals: diff --git a/docs/rfps.md b/docs/rfps.md index 92c4bc5f66f..5348ab55b13 100644 --- a/docs/rfps.md +++ b/docs/rfps.md @@ -24,12 +24,11 @@ If you find an open RFP here that you think you can address, feel free to [submi | RFP | Last Updated | | :-- | :----------: | | [anti-collusion_infrastructure.md](RFPs/Open/anti-collusion_infrastructure.md) | 21.09.2023 | -| [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [formal_guarantees_for_grandpa.md](RFPs/Open/formal_guarantees_for_grandpa.md) | 07.10.2022 | -| [ISO_20022.md](RFPs/Open/ISO_20022.md) | 31.05.2022 | +| [ISO_20022.md](RFPs/Open/ISO_20022.md) | 20.09.2023 | | [parachain_validation_conformance_testing.md](RFPs/Open/parachain_validation_conformance_testing.md) | 18.01.2023 | | [polkadot-protocol_conformance_tests.md](RFPs/Open/polkadot-protocol_conformance_tests.md) | 21.09.2023 | -| [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.11.2021 | +| [sub-consensus.md](RFPs/Open/sub-consensus.md) | 23.02.2022 | | [uptane-for-substrate-design-and-scope.md](RFPs/Open/uptane-for-substrate-design-and-scope.md) | 04.03.2023 | | [user-account-access-analysis.md](RFPs/Open/user-account-access-analysis.md) | 07.01.2023 | | [xcm-tool.md](RFPs/Open/xcm-tool.md) | 21.09.2023 | @@ -44,30 +43,30 @@ If you find an open RFP here that you think you can address, feel free to [submi | [alternative-polkadot-js-api-console.md](RFPs/Under%20Development/alternative-polkadot-js-api-console.md) | 19.05.2023 | | [analysis-website-and-data-platform.md](RFPs/Under%20Development/analysis-website-and-data-platform.md) | 21.09.2023 | | [data_analysis_tools.md](RFPs/Under%20Development/data_analysis_tools.md) | 21.09.2023 | -| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 02.06.2023 | -| [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 06.06.2023 | -| [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 30.05.2022 | -| [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 05.04.2023 | -| [implementation-benchmarking.md](RFPs/Under%20Development/implementation-benchmarking.md) | 06.06.2023 | -| [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 05.07.2021 | -| [ISO_8583.md](RFPs/Under%20Development/ISO_8583.md) | 31.05.2022 | +| [decentralized-security-marketplace.md](RFPs/Under%20Development/decentralized-security-marketplace.md) | 25.09.2023 | +| [grant_management_webapp.md](RFPs/Under%20Development/grant_management_webapp.md) | 25.09.2023 | +| [identity-directory.md](RFPs/Under%20Development/identity-directory.md) | 20.09.2023 | +| [IDE_for_ink_Smart_Contracts.md](RFPs/Under%20Development/IDE_for_ink_Smart_Contracts.md) | 20.09.2023 | +| [implementation-benchmarking.md](RFPs/Under%20Development/implementation-benchmarking.md) | 20.09.2023 | +| [ink!_smart_contract_block_explorer.md](RFPs/Under%20Development/ink_smart_contract_block_explorer.md) | 20.09.2023 | +| [ISO_8583.md](RFPs/Under%20Development/ISO_8583.md) | 20.09.2023 | | [move_smart_contract_pallet.md](RFPs/Under%20Development/move_smart_contract_pallet.md) | 02.08.2023 | | [multi-chain-block-explorer.md](RFPs/Under%20Development/multi-chain-block-explorer.md) | 23.11.2021 | | [privacy-enhancement-polkadot-extension.md](RFPs/Under%20Development/privacy-enhancement-polkadot-extension.md) | 27.05.22 | | [raft-validators.md](RFPs/Under%20Development/raft-validators.md) | 23.05.2023 | | [scale-codec-comparator.md](RFPs/Under%20Development/scale-codec-comparator.md) | 30.05.2022 | -| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Under%20Development/Static-Analysis-for-Runtime-Pallets.md) | 05.07.2023 | -| [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 07.12.2022 | +| [Static-Analysis-for-Runtime-Pallets.md](RFPs/Under%20Development/Static-Analysis-for-Runtime-Pallets.md) | 05.07.2023 |
-
🔴 Closed: This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we would be interested in signing a maintenance grant. +
🔴 Closed: This RFP is either closed, on hold, or no longer useful. However, if it’s implemented and not maintained, we might be interested in signing a maintenance grant. | RFP | Last Updated | | :-- | :----------: | | [a-and-v-topology.md](RFPs/Closed/a-and-v-topology.md) | 04.09.2023 | | [appi.md](RFPs/Closed/appi.md) | 20.07.2021 | +| [bpf-contracts.md](RFPs/Open/bpf-contracts.md) | 06.01.2023 | | [candle-auction.md](RFPs/Closed/candle-auction.md) | 02.02.2022 | | [crowdloan_front_end_template.md](RFPs/Closed/crowdloan_front_end_template.md) | 25.04.2023 | | [epassport-zk-validation.md](RFPs/Closed/epassport-zk-validation.md) | 21.03.2023 | @@ -79,6 +78,7 @@ If you find an open RFP here that you think you can address, feel free to [submi | [social-recovery-wallet.md](RFPs/Closed/social-recovery-wallet.md) | 03.03.2023 | | [staking-rewards-collector-front-end.md](RFPs/Closed/staking-rewards-collector-front-end.md) | 20.07.2021 | | [uncollateralized-stablecoin-research.md](RFPs/Closed/uncollateralized-stablecoin-research.md) | 01.01.2023 | +| [validator-selection-algorithm.md](RFPs/Under%20Development/validator-selection-algorithm.md) | 25.09.2023 | | [validator-setup-maintenance.md](RFPs/Closed/validator-setup-maintenance.md) | 24.08.2023 | | [wallet-aggregator-library.md](RFPs/Closed/wallet-aggregator-library.md) | 09.03.2023 | From 9b4863cb877f11f1fcb51db9ff9561de5d99198f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Mon, 25 Sep 2023 13:23:40 +0200 Subject: [PATCH 657/665] Update index.md Fix pallet-maci termination indicator --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 422b02dd48b..a9d52880792 100644 --- a/applications/index.md +++ b/applications/index.md @@ -497,7 +497,7 @@ Besides, **there is a clear difference between an application being accepted and | [Nathan Schwermann](https://github.com/nschwermann) | [PolkaJ Android Support](./polkaj_android_support.md) | [GitHub](https://github.com/nschwermann) | ☐ | ☒ | ☐ | | [Acala](https://acala.network/) | [xtokens - XCM Implementation for Fungible Assets](./xtokens.md) | [GitHub](https://github.com/open-web3-stack/open-runtime-module-library/tree/master/xtokens) | ☐ | ☒ | ☒ | | [NUTS Finance](https://nuts.finance/) | [Stable Asset](./stable-asset.md) | [GitHub](https://github.com/nutsfinance) | ☐ | ☒ | ☒ | -| [MVP Workshop](https://mvpworkshop.co/) | [pallet-maci (Minimal Anti Collusion Infrastructure)](./pallet_maci.md) | [GitHub](https://github.com/MVPWorkshop) | ☒ | ☐ | ☐ | +| [MVP Workshop](https://mvpworkshop.co/) | [pallet-maci (Minimal Anti Collusion Infrastructure)](./pallet_maci.md) | [GitHub](https://github.com/MVPWorkshop) | ☐ | ☐ | ☐ | | [X-Predict](https://x-predict.com/) | [Decentralized prediction market](./XPredictMarket.md) | [GitHub](https://github.com/XPredictMarket) | ☐ | ☐ | ☐ | | [Chevdor](https://www.chevdor.com/) | SRTOOL App | [GitLab](https://gitlab.com/chevdor/srtool-app) | ☐ | ☒ | ☒ | | [Bit.Country](http://bit.country/) | [A decentralized world - Phase 2](./bit_country_m2.md) | [GitHub](https://github.com/bit-country) | ☐ | ☒ | ☒ | From 1f85e04886229788231d6a8a2c3539c6b473c27b Mon Sep 17 00:00:00 2001 From: Xcavate Date: Mon, 25 Sep 2023 14:48:54 +0100 Subject: [PATCH 658/665] Remove two deliverables from application (#1995) * New Grant Proposal: Xcavate - the future of real estate finance & property investment * Update Project_Xcavate.md hosted images on our server * Update Project_Xcavate.md correction to image URLs * Delete XCAV-WEB-3-Grant-Application-Image-1.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-2.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-3.jpg hosted elsewhere * Delete XCAV-WEB-3-Grant-Application-Image-4.jpg hosted elsewhere * Update Project_Xcavate.md Reduced scope of work to focus on onboarding the project in to the Polkadot eco system * Updates to grant submission Hopefully addressing the questions / issues raised * move project file requested to move file to applications folder * Add files via upload * Delete Project_Xcavate.md old project submission * Rename Project_Xcavate_feb2023.md to Xcavate.md * Update Xcavate.md Revised W3F grant to only focus on building a PoC of the lending protocol dApp * Update Xcavate.md Revised application... more details and new dev team added * Update Xcavate.md Added new member of the team * Update Xcavate.md added another team member * Update Xcavate.md added current symbol to milestone fund request + moved the milestone deliverables inline with template. updated one team members linkedin and full name. * Update Xcavate.md Adapt grant application to focus on ink! contract use case * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md * Update Xcavate.md team Removed one member and added a new member * Update Xcavate.md team member role * Update Xcavate.md Amended grant application - remove two deliverables * Update Xcavate.md Removed the following deliverables: | 5. | Verification pallet | * We need to remove this deliverable because it is reliant on the Acurast Oracle Pallet which is struggling due to Substrate dependency issues | | 7. | Decentralized Developer Loan dApp / Front End Repo | We are struggling to interact through the frontend dApp so wish to remove this as a deliverable, however interacting through polkadot.js is fine. | --- applications/Xcavate.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/applications/Xcavate.md b/applications/Xcavate.md index c306efbafb0..be84904589e 100644 --- a/applications/Xcavate.md +++ b/applications/Xcavate.md @@ -4,7 +4,7 @@ - **Team Name:** Xcavate - **Payment Address:** 5E28NSFGwYB9C39bYdRAQ79UKRsM6shxkJr3LG4hehycwfJc -- **Total Costs:** $10000 USDT (Polkadot - Statemint) +- **Total Costs:** $8500 USDT (Polkadot - Statemint) - **Level:** 1 ## Project Overview @@ -85,6 +85,8 @@ Integrate DID's and Real Estae NFTs in to the their wallet to improve the UI/UX * Alex Ward – COO * Ganish Oli - Substrate Developer * Rene Hürter - Substrate Developer +* Alan - Full Stack Developer +* Victor Chukwonoso - Product Designer * Neeraj Choubisa - Full Stack Developer * Victor Chukwonoso - UI/UX Designer @@ -104,6 +106,8 @@ Integrate DID's and Real Estae NFTs in to the their wallet to improve the UI/UX Richard Houldsworth – 10 years in web 2.0 dev space – serial Entrepreneur Alex Ward – 25 years in the global property market – serial Entrepreneur Ganish Oli - ink! smart contract developer and substrate blockchain developer. +Rene Hürter - Currently studying to become a blockchain developer. Alchemy University Ethereum Bootcamp 11/2022. Scaling Ethereum 2023 Hackathon 11/03/2023. Consensus 2023 Hackathon (Web3athon 2023) 17/04/2023. +Alan Ma - Full-Stack developer who likes to work with JavaScript/Typescript (React, Next.js, Redux, Vue.js, Node), Blockchain(Bitcoin, Ethereum, Cosmos, Solidity, Rust), Golang, Python among others. Since I graduated from the university, I’ve joined several companies and dev teams to build web/mobile and web3 apps. Rene Hürter - I am currently studying to become a blockchain developer. Alchemy University Ethereum Bootcamp 11/2022. Scaling Ethereum 2023 Hackathon 11/03/2023. Consensus 2023 Hackathon (Web3athon 2023) 17/04/2023. Neeraj Choubisa - A Passionate Full Stack Blockchain Ethereum Based Web Developer, Third-Year student at Indian Institute of Information Technology, Dharwad @@ -112,6 +116,8 @@ Neeraj Choubisa - A Passionate Full Stack Blockchain Ethereum Based Web Develope https://github.com/xcavateblockchain https://github.com/xcavate2022 https://github.com/ganesh1233456 +https://github.com/RecrafterH +https://github.com/meanking https://github.com/Kali-Decoder https://github.com/RecrafterH @@ -137,13 +143,13 @@ We have been taking time to play with Substrate to form initial local nodes. We - **Total Estimated Duration:** 2 months - **Full-Time Equivalent (FTE):** 4 -- **Total Costs:** $10000 USDT +- **Total Costs:** $8500 USDT ### Milestone 1 — Initial POC of lending protocol - **Estimated Duration:** 2 months - **FTE:** 4 -- **Costs:** $10000 USDT +- **Costs:** $8500 USDT We will build on the excellent work we have achieved developing the Real Estate NFT marketplace for the hackerearth.com hackerthon. @@ -154,16 +160,14 @@ In the first milestone, the features for the PoC will be implemented and tested | 0a. | License | Apache 2.0 | | 0b. | Documentation | The documentation will be provided to show the whole architecture of the Xcavate Network. | | 0c. | Testing and Testing Guide | The testing guide will be provided to test each component. | -| 0d. | Docker | We will provide a dockerfile to demonstrate the full functionality of our chain | +| 0d. | VS Code Instructions | We have struggled to create docker images and a container, which allows interaction between the frontend, backend & node however VS code is working as expected. | | 0e. | Tutorial | We will write a tutorial about how to use Xcavate Network. | | 0f. | Article | We will write an article published on media channels. | -| 1 | Xcavate Node Repo | We will create a customized chain node with Substrate 2.0 Framework. | -| 2 | Xcavate Loan App Repo | All smart contracts will be written in Ink! to handle all the on chain runtime events related pallet functions such as; 1) Assess loan application criteria 2) Creation and management of multisig wallet 3) Minting and transfer of LAND NFTs 4) Defining and executing the loan APR structure 5) Monitor and execute real estate build stage checks 5) Deliver tranches of loan amounts to wallets 6) Manage the loan repayment and NFT transfer. | +| 1 | Xcavate Node Repo | We will create a customized chain node with Substrate 2.0 Framework. | +| 2 | Xcavate Loan App Repo | All smart contracts will be written in Ink! to handle all the on chain runtime events related pallet functions such as; 1) Assess loan application criteria 2) Creation and management of multisig wallet 3) Minting and transfer of LAND NFTs 4) Defining and executing the loan APR structure 5) Monitor and execute real estate build stage checks 5) Deliver tranches of loan amounts to wallets 6) Manage the loan repayment and NFT transfer. | | 3. | Loan management pallet | * Manage loan application ** Land details' ** Registration * Manage loan interest percentage ** Based on land and experience * Approve/Reject request | | 4. | Staking pallet | * User can stake native token * Calculate APR * Distribute payouts | -| 5. | Verification pallet | * Verification of user identity * Manage users identity * Manage loan request | -| 6. | DAO | The PoC will have a basic DAO structure that will be created using the OpenGov pallet to ensure rewards can be given to the real estate build stage checkers (As we progress in to the MVP stage this will be expanded to form a full governance structure). | -| 7. | Decentralized Developer Loan dApp / Front End Repo | It's a webpage working with Xcavate Network, it's implemented based on polkadot.js as planned. | +| 5. | DAO | The PoC will have a basic voting structure to ensure rewards can be given to the real estate build stage checkers (As we progress in to the MVP stage this will be expanded to form a full governance structure). | ## Future Plans From 2a1adc523d4783332c1a3a484cf81c2fd5b17c11 Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Tue, 26 Sep 2023 03:13:43 -0400 Subject: [PATCH 659/665] Update RFPs (#2003) * rfp update * Rename privacy-enhancement-polkadot-extension.md to privacy-enhancement-polkadot-extension.md * rfp updates * Rename multi-chain-block-explorer.md to multi-chain-block-explorer.md * Update scale-codec-comparator.md * Rename scale-codec-comparator.md to scale-codec-comparator.md * Update scale-codec-comparator.md * Update scale-codec-comparator.md * Update Static-Analysis-for-Runtime-Pallets.md * Update Static-Analysis-for-Runtime-Pallets.md --- .../multi-chain-block-explorer.md | 2 +- .../privacy-enhancement-polkadot-extension.md | 2 +- .../{Under Development => Closed}/scale-codec-comparator.md | 6 +++--- .../Static-Analysis-for-Runtime-Pallets.md | 4 ++-- docs/RFPs/Under Development/raft-validators.md | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) rename docs/RFPs/{Under Development => Closed}/multi-chain-block-explorer.md (85%) rename docs/RFPs/{Under Development => Closed}/privacy-enhancement-polkadot-extension.md (93%) rename docs/RFPs/{Under Development => Closed}/scale-codec-comparator.md (71%) diff --git a/docs/RFPs/Under Development/multi-chain-block-explorer.md b/docs/RFPs/Closed/multi-chain-block-explorer.md similarity index 85% rename from docs/RFPs/Under Development/multi-chain-block-explorer.md rename to docs/RFPs/Closed/multi-chain-block-explorer.md index 1eb11a23444..2d413cb3104 100644 --- a/docs/RFPs/Under Development/multi-chain-block-explorer.md +++ b/docs/RFPs/Closed/multi-chain-block-explorer.md @@ -1,6 +1,6 @@ # Multi-chain Block Explorer -* **Status:** Open +* **Status:** [Implemented 1](https://github.com/colorfulnotion/polkaholic), [Implemented 2](https://polkadot.subscan.io/) * **Teams/People that could deliver the RFP:** @clearloop, @carlhong ## Project Description :page_facing_up: diff --git a/docs/RFPs/Under Development/privacy-enhancement-polkadot-extension.md b/docs/RFPs/Closed/privacy-enhancement-polkadot-extension.md similarity index 93% rename from docs/RFPs/Under Development/privacy-enhancement-polkadot-extension.md rename to docs/RFPs/Closed/privacy-enhancement-polkadot-extension.md index 0f88d9b39b1..e5b991e38f0 100644 --- a/docs/RFPs/Under Development/privacy-enhancement-polkadot-extension.md +++ b/docs/RFPs/Closed/privacy-enhancement-polkadot-extension.md @@ -1,6 +1,6 @@ # Privacy Enhancement for Polkadot Extension -* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/polkadot-js-extension-per-account-auth.md) +* **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/polkadot-js-extension-per-account-auth.md). GH [issue](https://github.com/polkadot-js/extension/issues/1037) has been closed. * **Proposer:** jonasW3F * **Projects you think this work could be useful for** [optional]: https://github.com/polkadot-js/extension * **Teams/People that could deliver the RFP:** @celrisen diff --git a/docs/RFPs/Under Development/scale-codec-comparator.md b/docs/RFPs/Closed/scale-codec-comparator.md similarity index 71% rename from docs/RFPs/Under Development/scale-codec-comparator.md rename to docs/RFPs/Closed/scale-codec-comparator.md index c94dd707ff8..79d713fe8fd 100644 --- a/docs/RFPs/Under Development/scale-codec-comparator.md +++ b/docs/RFPs/Closed/scale-codec-comparator.md @@ -1,11 +1,11 @@ # SCALE Codec Comparator -* **Status:** [In progress](https://github.com/arijitAD/dotscale) for Golang, submissions for other languages welcome, [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/scale-codec-comparator.md) +* **Status:** [Implemented for ten encoding types](https://github.com/w3f/Grants-Program/blob/master/applications/scale-codec-comparator.md) * **Proposer:** [Marcin Górny](https://github.com/mmagician/) ## Project Description :page_facing_up: -To date, there are [9 published](https://substrate.dev/docs/en/knowledgebase/advanced/codec#implementations) implementations of the SCALE Codec. Since each is implemented by a different team & [the reference implementation](https://github.com/paritytech/parity-scale-codec) still introduces small fixes, it would be beneficial to compile a table of feature-completeness. +To date, there are [9 published](https://docs.substrate.io/reference/scale-codec/) implementations of the SCALE Codec. Since each is implemented by a different team & [the reference implementation](https://github.com/paritytech/parity-scale-codec) still introduces small fixes, it would be beneficial to compile a table of feature-completeness. This would provide (some) assurance that the implementation in a given language is safe & sound to use. One approach would be to provide wrappers to the Rust reference implementation, like in [scale.rb](https://github.com/itering/scale.rb/blob/develop/src/lib.rs) and using the Foreign Function Interface (e.g. [here](https://github.com/itering/scale.rb/blob/develop/spec/ffi_helper.rb)) to call these directly from within the library. @@ -24,7 +24,7 @@ Stage 2: To take this a step further, a GitHub action could be integrated to run * **FTE:** 1 * **Costs:** ~ 10,000 DAI -For each library listed on [substrate.dev](https://substrate.dev/docs/en/knowledgebase/advanced/codec#implementations): +For each library listed on [substrate.dev](https://docs.substrate.io/reference/scale-codec/): * Create a PR, providing a FFI to Rust's reference implementation. * Ensure feature completeness, by ensuring there are comprehensive unit tests for each data type. diff --git a/docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md b/docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md index 8c88c275f5d..ad50f2d40d4 100644 --- a/docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md +++ b/docs/RFPs/Under Development/Static-Analysis-for-Runtime-Pallets.md @@ -1,10 +1,10 @@ # Static Analysis of Runtime Pallets -* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/sarp-basic-functionality.md) +* **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/sarp-basic-functionality.md) * **Proposer:** [Bhargav Bhatt](https://github.com/bhargavbh), [David Hawig](https://github.com/Noc2) ## Project Description :page_facing_up: -[Runtime Pallets](https://docs.substrate.io/fundamentals/runtime-development/) are modules for writing the business logic of blockchains in [Substrate](https://github.com/paritytech/substrate) (a Rust framework fo rbuilding blockchians). These are usually concise pieces of standalone code with relatively few dependencies and clear specifications, hence tractable targets for performing static analysis and verification. We would like to develop tools and techniques to perform static analysis with reasonable soundness guarantees. In particular, we would like to target vunerability classes that are detectable using dataflow analysis techniques like *tag analysis* and *taint analysis*. Just to give a flavor, relevant might vulnerabilities include: +[Runtime Pallets](https://docs.substrate.io/fundamentals/runtime-development/) are modules for writing the business logic of blockchains in [Substrate](https://github.com/paritytech/polkadot-sdk/tree/master/substrate) (a Rust framework fo rbuilding blockchians). These are usually concise pieces of standalone code with relatively few dependencies and clear specifications, hence tractable targets for performing static analysis and verification. We would like to develop tools and techniques to perform static analysis with reasonable soundness guarantees. In particular, we would like to target vunerability classes that are detectable using dataflow analysis techniques like *tag analysis* and *taint analysis*. Just to give a flavor, relevant might vulnerabilities include: * [incorrect origin](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/incorrect-origin/description.md) of dispatchable functions. * [unsigned transaction](https://github.com/bhargavbh/MIRAI/blob/main/substrate_examples/unsigned-transaction/description.md) validation. * tracking bad randomness: ensure bad randomness does not leak into sensitive functions. diff --git a/docs/RFPs/Under Development/raft-validators.md b/docs/RFPs/Under Development/raft-validators.md index b07a20fd265..f417142002e 100644 --- a/docs/RFPs/Under Development/raft-validators.md +++ b/docs/RFPs/Under Development/raft-validators.md @@ -1,6 +1,6 @@ # High-availability validator setup -* **Status:** [Under Development](https://github.com/w3f/Grants-Program/blob/master/applications/High_availability_validator_setup.md) +* **Status:** [Implemented](https://github.com/w3f/Grants-Program/blob/master/applications/High_availability_validator_setup.md) * **Proposer:** mmagician * **Projects you think this work could be useful for:** Polkadot & Kusama Validators From 456615dca32ea9de9d5d7fd38a75730c3b1808b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 26 Sep 2023 11:10:46 +0200 Subject: [PATCH 660/665] Invoice after approval (#2005) --- docs/Support Docs/milestone-deliverables-guidelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Support Docs/milestone-deliverables-guidelines.md b/docs/Support Docs/milestone-deliverables-guidelines.md index ddda52aa2a3..f244b04aa90 100644 --- a/docs/Support Docs/milestone-deliverables-guidelines.md +++ b/docs/Support Docs/milestone-deliverables-guidelines.md @@ -8,7 +8,7 @@ Unless instructed otherwise, please submit all your milestones via PR to the [Gr ## Invoice -Although a milestone needs to be reviewed and accepted, you can submit your invoice alongside your delivery pull request through [this form](https://docs.google.com/forms/d/e/1FAIpQLSfmNYaoCgrxyhzgoKQ0ynQvnNRoTmgApz9NrMp-hd8mhIiO0A/viewform). +After a milestone is reviewed and accepted, you can submit your invoice alongside your delivery pull request through [this form](https://docs.google.com/forms/d/e/1FAIpQLSfmNYaoCgrxyhzgoKQ0ynQvnNRoTmgApz9NrMp-hd8mhIiO0A/viewform). ## Content From 0a7b5f08ddc983a2f89583adbedc28f6d7b18a77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Tue, 26 Sep 2023 11:36:51 +0200 Subject: [PATCH 661/665] Update index.md Stylograph completed --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index a9d52880792..6c8658a5f74 100644 --- a/applications/index.md +++ b/applications/index.md @@ -99,7 +99,7 @@ Besides, **there is a clear difference between an application being accepted and | [CoinFabrik](https://www.coinfabrik.com/) | [ScoutCoinFabrik: Milestone 2](ScoutCoinFabrik_2.md) | [GitHub](https://github.com/coinfabrik) | ☐ | ☒ | ☒ | | [Polytope Labs](https://research.polytope.technology/) | [Interoperable State Machine Protocol](ismp.md) | [GitHub](https://github.com/polytope-labs) | ☐ | ☒ | ☒ | | [Talentica Software](https://www.talentica.com/) | [Implementation Benchmarking Milestone 3](ink-pallet-benchmarking-phase-2.md) | [GitHub](https://github.com/Nikhil-Desai-Talentica) | ☐ | ☒ | ☒ | -| [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☐ | ☐ | +| [Deep Ink Ventures GmbH](https://github.com/deep-ink-ventures) | [Stylograph](Stylograph.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☒ | | [Zeeve](https://www.zeeve.io) | [Ink Playground IDE Improvements](ink-playground-ide-improvements.md) | [GitHub](https://github.com/Zeeve-App) | ☐ | ☐ | ☐ | | [Scio Labs](https://scio.xyz/) | [XCM Domain Name Service](xcm-domain-service.md) | [GitHub](https://github.com/scio-labs) | ☐ | ☒ | ☐ | | [Gloslab](https://github.com/smiasojed) | [Contracts performance measurement tool proposal](contracts-tool.md) | [GitHub](https://github.com/smiasojed) | ☐ | ☒ | ☐ | From 42b0b57d82e7f780c0dea0c093e99e17952a9513 Mon Sep 17 00:00:00 2001 From: David Hawig Date: Tue, 26 Sep 2023 20:02:48 +0200 Subject: [PATCH 662/665] Update README.md (#2010) Change formating of process, since :::tip and :::info doesn't work for the readme. --- README.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/README.md b/README.md index 2b12402c6ea..83209ceafe4 100644 --- a/README.md +++ b/README.md @@ -147,13 +147,7 @@ The W3F Grants Program offers different grant levels to help you best, depending ## :pencil: Process -:::tip -If you want to apply in **private**, you can do so [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. -::: - -:::info -Payments can be made in USDT and USDC on the Polkadot [AssetHub](https://wiki.polkadot.network/docs/learn-assets), Bitcoin and fiat (USD, EUR, CHF). Please indicate your preference in the application [as outlined in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md?plain=1#L7). -::: +> **:loudspeaker:** Payments can be made in USDT and USDC on the Polkadot [AssetHub](https://wiki.polkadot.network/docs/learn-assets), Bitcoin, and fiat (USD, EUR, CHF). Please indicate your preference in the application [as outlined in our application template](https://github.com/w3f/Grants-Program/blob/master/applications/application-template.md?plain=1#L7). If you want to apply in **private**, you can do so [:arrow_right: here](https://docs.google.com/forms/d/e/1FAIpQLSfMfjiRmDQDRk-4OhNASM6BAKii7rz_B1jWtbCPkUh6N7M2ww/viewform). Note that this is generally a slower process and imposes stricter requirements on applicants. ### 1. Application From 4445254dd09ff455c88b7c4bb68a70e488a53d37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20M=C3=BCller?= Date: Wed, 27 Sep 2023 12:31:46 +0200 Subject: [PATCH 663/665] Change announcement bar to sub0 video --- docusaurus.config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index e606f27f0bb..38256102c6b 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -28,7 +28,7 @@ module.exports = { announcementBar: { id: 'announcement', content: - 'Meet us at sub0!', + 'Watch our sub0 presentation on Support in the Polkadot Ecosystem!', backgroundColor: '#000', textColor: '#ffffff', isCloseable: true, From 182208425ac0b479a0a82974b48869d26f764854 Mon Sep 17 00:00:00 2001 From: Nikhil W3F <142136841+nikw3f@users.noreply.github.com> Date: Wed, 27 Sep 2023 13:35:33 +0200 Subject: [PATCH 664/665] Updated Wave 17 deliveries (#2013) --- applications/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/index.md b/applications/index.md index 6c8658a5f74..8bf613fb424 100644 --- a/applications/index.md +++ b/applications/index.md @@ -128,10 +128,10 @@ Besides, **there is a clear difference between an application being accepted and | Team | Project | Link | Terminated | First Delivery | Completed | | :------------------------------------------------------------------| :------------------------------------------------------------------------------------------------------| :------------------------------------------------------------------- | :--------- | :------------: | :--------: | | [Deep Ink Ventures GmbH](http://deep-ink.ventures/) | [GenesisDAO](GenesisDAO.md) | [GitHub](https://github.com/deep-ink-ventures) | ☐ | ☒ | ☒ | -| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☐ | +| [ArtZero](https://artzero.io/) | [ArtZero & InkWhale](ArtZero_InkWhale.md) | [GitHub](https://github.com/artzero-io) | ☐ | ☒ | ☒ | | [EightFish](https://github.com/eightfish-org/eightfish) | [EightFish](eightfish.md) | [GitHub](https://github.com/miketang84/eightfish) | ☐ | ☒ | ☒ | | [Protofire](https://protofire.io/) | [Polkadot Contract Wizard](polkadot-contract-wizard.md) | [GitHub](https://github.com/protofire/) | ☐ | ☒ | ☒ | -| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☐ | +| [Runtime Verification](https://runtimeverification.com/) | [KMIR: the K semantics of MIR](rv-kmir.md) | [GitHub](https://github.com/runtimeverification) | ☐ | ☒ | ☒ | | [Me Protocol](https://meprotocol.io/) | [Me Protocol](MeProtocol.md) | [GitHub](https://github.com/Me-Protocol) | ☐ | ☐ | ☐ | | [Comrade Coop](https://comrade.coop/) | [Validated Streams](validated-streams.md) | [GitHub](https://github.com/comrade-coop) | ☐ | ☒ | ☒ | | [Blockcoders](http://blockcoders.io/) | [Kuma Cross-chain Wallet](cross-chain-wallet.md) | [GitHub](https://github.com/blockcoders) | ☐ | ☒ | ☒ | From 6e838e4492e0f11741dde463509731e27788e22b Mon Sep 17 00:00:00 2001 From: Keegan | W3F <35080151+keeganquigley@users.noreply.github.com> Date: Wed, 27 Sep 2023 08:00:05 -0400 Subject: [PATCH 665/665] Update index.md (#2011) --- applications/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/applications/index.md b/applications/index.md index 8bf613fb424..1662f4d05f9 100644 --- a/applications/index.md +++ b/applications/index.md @@ -201,7 +201,7 @@ Besides, **there is a clear difference between an application being accepted and | [10Clouds Sp. z o.o.](https://10clouds.com/) | [Crowdloan Front End Template](crowdloan_frontend_template.md) | [GitHub](https://github.com/10clouds) | ☐ | ☒ | ☒ | | [DodoRare, Inc.](https://dodorare.com/) | [Faterium](faterium.md) | [GitHub](https://github.com/faterium) | ☐ | ☒ | ☒ | | [The Bacon Beacon](https://github.com/random-bacon) | [Pallet Drand Client](pallet-drand-client.md) | [GitHub](https://github.com/random-bacon) | ☐ | ☒ | ☐ | -| [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☐ | ☐ | +| [Helikon Labs](https://helikon.io/) | [ChainViz v1](chainviz.md) | [GitHub](https://github.com/helikon-labs/chainviz) | ☐ | ☒ | ☐ | | [Mutai Solutions](https://bryanmutai.co/) | [Crowdloans-FET](Crowdloans-FET.md) | [GitHub](https://github.com/brymut) | ☐ | ☐ | ☐ | | [k/factory](https://k-f.co/) | [Centrifuge Go-Substrate-RPC Client V2](centrifuge-gsrpc-v2.md) | [GitHub](https://github.com/centrifuge/go-substrate-rpc-client) | ☐ | ☐ | ☐ | | [Colorful Notion](https://github.com/colorfulnotion) | [Zombienet Explorer: Multi-Chain Substrate Block Explorer](Zombienet-Explorer.md) | [GitHub](https://github.com/colorfulnotion/zombienet-explorer) | ☐ | ☐ | ☐ |